Acolyte

SkillDev tools

Guide for working on the Acolyte codebase. Use when building features, fixing bugs, or extending Acolyte itself.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Acolyte skill

What this skill tells your AI

The instructions your AI receives, as published by cniska/acolyte in .agents/skills/acolyte/SKILL.md and read by ahel’s review.

Acolyte is a terminal-first AI coding agent: local-first, observable, extensible. This skill is a map of the codebase — it tells you where to look. Read AGENTS.md for invariants and rules. Read the linked docs for detail.

Architecture

CLI → daemon (RPC) → lifecycle → model + tools
SubsystemKey conceptsDocs
LifecycleSingle-pass: resolve → prepare → generate → finalize. Effects apply per-tool-result. Model ends the turn with a native end_turn (a step with no tool calls); that step's text is the final responsedocs/lifecycle.md
ToolsrunTool: budget → cache → toolkit → registry. Toolkits cover file, code, undo, session, signal, memory, skill, test, tasklist, gh, git, web, and shelldocs/tooling.md
SessionsPersistent conversation context, history, model selection, and token usagedocs/sessions.md
TasksState machine: accepted → queued → running → completed|failed|cancelleddocs/tasks.md
MemoryOn-demand via toolkit, not injected. Observer distills facts via memory-observe tool calls. SQLite + semantic embeddingsdocs/memory.md
TUICustom React reconciler. Three primitives: Box, Text, Staticdocs/tui.md
ProvidersPluggable: OpenAI, Anthropic, Google, Vercel AI Gateway, OpenAI-compatible localsdocs/configuration.md
WorkspaceSandbox scopes file ops to project root. Profile detection infers ecosystem and commandsdocs/workspace.md
ProtocolWebSocket JSON envelopes with request correlation and task state transitionsdocs/protocol.md
CLICommand registry, daemon spawn, argument parsingdocs/cli.md
ErrorsStructured error codes and kinds, consistent shaping across layersdocs/errors.md
LocalizationLocale catalogs in src/i18n/locales/*.json, en fallbackdocs/localization.md

What to read when

TaskStart here
Adding or modifying a tooldocs/tooling.md, then the relevant *-toolkit.ts
Changing lifecycle behaviordocs/lifecycle.md, then src/lifecycle-*.ts
Working on the TUIdocs/tui.md, then src/tui/
Changing memory behaviordocs/memory.md, then src/memory-*.ts
Adding a providersrc/provider-*.ts, docs/configuration.md
Modifying RPC or task flowdocs/protocol.md, docs/sessions.md, docs/tasks.md
Changing workspace detectiondocs/workspace.md, then src/workspace-*.ts
Adding a CLI commanddocs/cli.md, then src/cli-command-registry.ts
Adding or changing error codesdocs/errors.md, then src/error-contract.ts
Updating bundled skillsdocs/skills/{name}.md; these are Acolyte's built-in skills.

Extension patterns

ExtensionHow
ToolCreate or extend src/{domain}-toolkit.ts with createTool + runTool, register in src/tool-registry.ts
Bundled skillCreate docs/skills/{name}.md, add text import in src/bundled-skills.ts, add to BUNDLED_SKILLS
Project skillCreate .agents/skills/{name}/SKILL.md — scanned automatically
Lifecycle effectDefine Effect in src/lifecycle-effects.ts, add to PRE_EFFECTS or POST_EFFECTS
Ecosystem detectorDefine EcosystemDetector in src/workspace-detectors.ts, add to ECOSYSTEM_DETECTORS
ProviderAdd src/provider-{name}.ts, register in provider resolution
CLI commandAdd to src/cli-command-registry.ts

Testing

TypePatternWhen to use
Unit*.test.tsPure logic, schemas, contracts
Integration*.int.test.tsReal server/lifecycle/tool wiring
Visual*.tui.test.tsxTUI rendering snapshots
Perf*.perf.test.tsLatency trend detection

Helpers: tempDir() for filesystem fixtures, tempDb() for SQLite stores, createSessionContext() for tool tests. Full check: bun run verify. See docs/testing.md.

Signals

GitHub stars
25
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
acolyte
Source
github.com/cniska/acolyte