Skip to content

Instantly share code, notes, and snippets.

View cniska's full-sized avatar
🎩
Coding

Christoffer Niska cniska

🎩
Coding
View GitHub Profile
@cniska
cniska / coding-agents.md
Last active April 2, 2026 10:11
Coding Agent Landscape

Coding Agent Landscape

Updated April 2026

Open Source

Agent Category Lang Notes
Acolyte Terminal agent TS Local-first, lifecycle-driven, observable
Codex Terminal agent Rust OpenAI's agent, sandbox execution
@cniska
cniska / SKILL.md
Last active March 27, 2026 10:42
Plan Skill
name plan
description Design a feature or behavior change through dialogue. Use when asked to plan, scope, design, or break down work before coding.

If an issue number is given, fetch it with gh issue view $ARGUMENTS and use it as the starting point.

Have a design conversation about this task. Read the relevant code, share what you find, say what you think, and let the user shape the direction. The plan emerges from the dialogue — do not build it in isolation.

If a question can be answered by reading the code, read the code instead of asking.

@cniska
cniska / acolyte-benchmarks.md
Last active March 6, 2026 19:58
Acolyte Benchmarks

Acolyte Benchmarks

Measured comparisons of Acolyte against prominent open-source AI coding agents. All metrics are from source code analysis — no opinions, just counts.

Metrics extracted with benchmark.sh

Projects Compared

| Project | Language | Description | Source Lines | Files | Dependencies |

@cniska
cniska / 01-setup.md
Last active February 15, 2026 08:46
Codex Starter Kit

Setting Up Codex

Prerequisites

  • Codex installed
  • Recommended: install Codex via Homebrew for easy updates
  • GitHub CLI authenticated (gh auth login)
  • Copy config.toml to ~/.codex/config.toml

Quick Start

@cniska
cniska / 01-setup.md
Last active April 2, 2026 19:01
Claude Code Starter Kit

Setting Up Claude Code

Prerequisites

Quick Start

@cniska
cniska / 01-openapi.ts
Last active February 16, 2026 06:44
Express + Zod to OpenAPI
import {
OpenAPIRegistry,
OpenApiGeneratorV3,
RouteConfig,
ZodRequestBody,
extendZodWithOpenApi,
} from '@asteasolutions/zod-to-openapi';
import { OpenAPIObjectConfig } from '@asteasolutions/zod-to-openapi/dist/v3.0/openapi-generator';
import { Application, NextFunction, Request, RequestHandler, Response, Router } from 'express';
import fs from 'node:fs/promises';
@cniska
cniska / Validator.kt
Last active September 5, 2022 07:22
A validator implementation written in Kotlin.
sealed interface Validator {
fun validate(value: String): Int?
}
object RequiredValidator : Validator {
override fun validate(value: String): Int? =
if (value.isNotBlank()) null else ValidationError.Required
}
object EmailValidator : Validator {
@cniska
cniska / 01-store.kt
Last active February 16, 2026 06:41
A predictable state container (like Redux) written in Kotlin for use with Android view models.
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update
interface State
interface Action
typealias Reducer<State, Action> = (State, Action) -> State
@cniska
cniska / DatePicker.kt
Last active June 28, 2024 16:46
DatePicker and TimePicker components for Jetpack Compose.
@Composable
fun DatePicker(
label: String,
value: String,
onValueChange: (String) -> Unit = {},
keyboardActions: KeyboardActions = KeyboardActions.Default,
keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
pattern: String = "yyyy-MM-dd",
) {
val formatter = DateTimeFormatter.ofPattern(pattern)
@cniska
cniska / GuessANumber.kt
Last active September 5, 2022 07:25
A "guess a number game" implementation written in Kotlin that we wrote together with my 12 year old son when learning basic concepts in programming.
import kotlin.random.Random
fun main() {
val secretNumber = Random.nextInt(1, 100)
var numTries = 0
var numTriesLeft: Int
var gameWon = false
println("Welcome to Guess a number!")