Updated April 2026
| Agent | Category | Lang | Notes |
|---|---|---|---|
| Acolyte | Terminal agent | TS | Local-first, lifecycle-driven, observable |
| Codex | Terminal agent | Rust | OpenAI's agent, sandbox execution |
| 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.
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
| Project | Language | Description | Source Lines | Files | Dependencies |
gh auth login)~/.codex/config.tomlgh auth login)~/.claude/settings.json| 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'; |
| 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 { |
| 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 |
| @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) |
| 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!") |