Repository navigation
Decisions
This page is the index of the design decisions of claudetto. Read it to find the page that holds the detail of a decision. Each row gives the number, the title, and the page with the detail. Design holds the principles.
The ids D1 to D47 come from dotclaude 1.0.0 and stay as they were.
The ids from D48 are new in claudetto 0.1.0.
Engine Facts holds the facts of the engine that a change must not break.
A missing id is a removed decision.
The removed ids are D7, D11, D19, D20, D21, D32, D33, D35, D36, D40, and D41.
They described the removed design of dotclaude 1.0.0, such as the spec store, the append-only event log, and /dotclaude:handoff.
A kept decision whose basis changed in 0.1.0 says so in its section and points to openspec/changes/claudetto-0-1-0/design.md.
The restart has its own list of decisions in openspec/changes/claudetto-0-1-0/design.md.
Its numbers D1, D2, D8, and the others are not the numbers on this page.
This page always writes "(D3 there)" when it cites that file.
| Decision | Title | Page |
|---|---|---|
| D1 | Rule of Least Power | Settings |
| D2 | No guard route, settings.json only |
Settings |
| D3 | Tool-description and section cuts by id | Prompt |
| D4 | Measured budget | Prompt |
| D5 | Who invokes what | Settings |
| D6 | Status line | Tools |
| D8 | Context7 skill | Tools |
| D9 | Evals through claude plugin eval
|
Tools |
| D10 | Schema extraction | Settings |
| D12 | Agent frontmatter search | Router |
| D13 | No router, the main loop keeps the session choice | Router |
| D14 | Off switches | Settings |
| D15 | claudetto owns the system prompt | Prompt |
| D16 | Request capture and the session start | Prompt |
| D17 | Plugin and marketplace layout | Layout |
| D18 | Separation of concerns, size bounds, and bound tiers | Layout |
| D22 | Context bound for subagents and the main session | Tools |
| D23 | Development frictions | Layout |
| D24 | Add-on plugins stay separate | Layout |
| D25 | Agent roster | Router |
| D26 | Code graph through the CodeGraph CLI | Tools |
| D27 | Measured facts over model reports | Evidence |
| D28 | Compliance by checks, not by prose | Prompt |
| D29 | Semantic line breaks | Evidence |
| D30 | Hold work that is right under an unsupported claim | Evidence |
| D31 | Guard hooks fail open | Hook Events |
| D34 | Adherence by checks in code, with no new judge (now the asks slice, see D43) |
Architecture |
| D37 | Ports and adapters inside vertical slices | Architecture |
| D38 | A generated composition root | Architecture |
| D39 | One hook module in place of classic command hooks | Architecture |
| D42 | Zero token cost where a hook, a script, or a CLI can do the work | Architecture |
| D43 |
asks only on a weaker check or discarded work |
Architecture |
| D44 | Jev is a slice of the core plugin, with a small model as the fallback | Architecture |
| D45 | Add-ons import nothing from the core plugin or from each other | Architecture |
| D46 | Bounds in three tiers | Architecture |
| D47 | Arrow functions, plain data, and classes only for state | Architecture |
| D48 | User notices through $.ui.log, not a transcript row |
Engine Facts |
| D49 | No catch-all in a hook that calls next first |
Engine Facts |
| D50 | A marker in $.env for each Bash call of Claude |
Engine Facts |
| D51 | The sandbox is the hard stop, and setup writes it | Engine Facts |
| D52 | Each adapter keeps its own $ calls |
Engine Facts |
| D53 | A plugin verdict only makes a call stricter | Engine Facts |
| D54 | The attribution reminder in place of includeGitInstructions
|
Engine Facts |
| D55 | No session-wide env through CLAUDE_ENV_FILE
|
Engine Facts |
| D56 | Toolchain facts come from the environment, not from model memory | Engine Facts |
| D57 | A plugin bin/ command is named by its path, not by its bare name |
Engine Facts |
| D58 |
Stop sees the reply after the user and gives the background tasks |
Engine Facts |
| D59 | A local background command has no time limit | Engine Facts |
| D60 | The built-in read dedup covers only the same range | Engine Facts |
| D61 | A tool.call hook sees the outcome of the permission dialog |
Engine Facts |
| D62 | Start context, served model, and fetch timeout come from three documented points | Session Facts |
| D63 | The cost of the judge comes from its own usage
|
Session Facts |
- Start
- How claudetto Works
- Add-On Plugins
- How Claude Code Works
- Reference
- Rationale
- Evidence
- Development
- Archive