Architecture at a glance
Veyyon ships as the veyyon CLI (Bun + TypeScript, Rust helpers). Subsystems map
each has a handbook page and matching engineering notes under docs/.
The request path
┌──────────────────────────────────────────────────────────────┐
prompt ──► │ veyyon (packages/coding-agent) │
│ │ │
│ ▼ │
│ AgentSession turn loop │
│ │ model stream → tools (read, bash, edit, …) │
│ ▼ │
│ hashline / handlers ──► filesystem (approval-gated) │
└──────────────────────────────────────────────────────────────┘
Subsystems
| Subsystem | Responsibility | Chapter |
|---|---|---|
Edit engine (@veyyon/hashline) | Default hashline edit path | Edit engine |
| Sessions | Session trees, compaction | Compaction & memory |
| MCP | MCP client integration | MCP |
| Config | Settings and profiles | Config |
| Memory | off / local / mnemopi / hindsight | Memory |
| Goals | Goal cards and budgets | Goal state |
Design rules
- One primary edit path. Hashline is the default edit surface; alternate
edit.modevalues exist for compatibility. - Explicit failures. Invalid config, stale hashline tags, and denied actions return actionable errors to the operator or model. Denied tools do not auto-escalate permissions.
Tool-call argument repair (alias maps, strict unknown-key rejection, parse leniency) runs at the dispatch seam in packages/coding-agent/src/repair/schema-repair.ts. See Repair. Providers and models: Providers.