Why: CONTEXT.md is an instructed every-session read, so a wrong assertion in it
is cited downstream without being checked. The b9c7762 rewrite introduced one
broken pointer and carried over two claims that were already false.
Implementation notes:
- The Preload tax entry pointed at docs/spec/gates.md for the measurement
method. gates.md has no such method — it uses the 23,427-char figure once, in
passing, without deriving it. The method and the current figure both live in
ADR-0020, which is where a dated measurement belongs: it is superseded there
deliberately, and issue #99 tracks its drift.
- Dropped the "~5,900 tokens across 39 skills" measurement rather than
re-measuring it. It was already wrong three days after being written (~5,340
today) and it was the only live number in the file. Every sibling entry is one
definitional sentence plus a pointer fragment; this one now matches, and
CONTEXT-FORMAT.md:43 asks for exactly that.
- Dropped "Written by the session-handoff skill or directly by the human" from
the LESSONS.md entry. No session-handoff skill exists — LESSONS.md:7 records
it as planned work. Who writes a file is not its definition.
Impact: removes the only rot surface in the file and the only assertion in it
that names an artifact the repo does not have.
Refs: #99
9.4 KiB
name, description
| name | description |
|---|---|
| AI Development Repo | The domain language of the global AI development config repository |
AI Development Repo
The bounded context of this repo is how agent instructions are authored, packaged, distributed, and
kept small. Terms here name concepts specific to that problem. Mechanics live elsewhere:
docs/spec/architecture.md for structure, docs/spec/gates.md for enforcement, docs/adr/ for
decisions.
Language
Context cost
Preload tax:
The always-on context cost of every installed skill's name and description, charged from the
first token of every session whether the skill is invoked or not. Measurement method and current
figure: ADR-0020.
Avoid: context cost, token overhead
Skill context contract:
The ADR-0020 authoring rules that hold the preload tax and body size down — a description carries a
trigger clause, at most one capability clause, and a boundary clause, and nothing else. Thresholds
and the target-resolution walk: docs/spec/gates.md.
Avoid: skill budget, size limit
Dispatch body:
The body pattern a skill with two or more mutually exclusive flows must use — the body carries only
the dispatch table and the gates common to every branch, and each flow lives in its own
self-contained references/ file. Exemplar: apm-workflow.
Avoid: router body, thin body
Hand-invoked skill:
A skill reached only by typing its slash command, declared disable-model-invocation: true. The host
withholds it from the model-visible listing entirely, so it pays no preload tax and its description
becomes human-facing text. Exemplar: zoom-out.
Avoid: manual skill, disabled skill
Delegation discipline:
The agent-side counterpart to the dispatch body. A plugin-scope agent is a single .agent.md file
with no sibling references/ directory, so it cannot disclose to itself — it can only delegate to
skills. Its characteristic defect is therefore restatement, not length.
Avoid: agent hygiene
Distribution
Skill:
A reusable slash command defined as a SKILL.md file following the
Agent Skills open standard, authored at
plugins/<plugin>/.apm/skills/<skill>/SKILL.md.
Avoid: command, prompt, macro
Plugin:
The deployable unit — one or more skills, agents, hooks, commands, and MCP servers bundled into a
single installable directory under plugins/<name>/, compiled from that plugin's .apm/ source.
Avoid: package, bundle, module
Plugin marketplace:
A Git repository carrying a marketplace.json manifest that lists installable plugins. There is no
backend, registry, or SaaS — the Git repo is the marketplace.
Avoid: registry, store, catalogue
holocron: This repository, in its role as a plugin marketplace and as the remote the six plugin dependencies resolve against. Avoid: the marketplace, upstream
apm-consumed install:
How this repo installs its own plugins as of 2026-08-14 — six dependencies.apm entries in the root
apm.yml deployed by apm install, rather than claude plugin install <name>@holocron. Its
consequences: ADR-0018.
Avoid: apm install, dependency install
Provenance chain:
The three-stage traceability record linking a skill back to its research inputs: /research produces
topic docs and a sources.md; the author skill records which sources informed which files in
references/sources.md and source_keys frontmatter; skill-audit validates the chain is complete
and internally consistent.
Avoid: sources, citations, attribution
Governance
HITL (human-in-the-loop): The agent pauses before a consequential action and a human approves before execution. Required for irreversible or high-stakes actions — architecture changes, production deployments, security configuration. Avoid: manual approval, gated action
HOTL (human-on-the-loop): The agent acts and a human monitors, able to intervene after the fact. Acceptable only for low-stakes, bounded, reversible actions where the cost of pausing exceeds the blast radius of an error. Avoid: autonomous, unsupervised
Sycophancy: The failure mode where an RLHF-trained model prioritises approval over accuracy — changing a correct answer to a wrong one under user pressure, then persisting in the wrong answer. Treated here as a first-class reliability risk, not a quality-of-life concern. Avoid: agreeableness, people-pleasing
Documents
AGENTS.md:
The provider-agnostic always-on instruction file, in plain markdown with no provider-specific syntax
(ADR-0003). Two exist: repo-level, and the global core/AGENTS.md deployed to ~/.agents/AGENTS.md.
Avoid: instructions file, system prompt
Thin adapter:
A provider-specific instruction file (CLAUDE.md, .cursor/rules/*.mdc, copilot-instructions.md)
that imports its AGENTS.md and adds only that provider's syntax, carrying no original always-on
content of its own (ADR-0002, ADR-0003).
Avoid: wrapper, shim, provider file
LESSONS.md: The long-loop feedback log for patterns observed across sessions, at the repo root. Avoid: changelog, retro, postmortem
Management Application:
A separate product in a separate repo for browsing, editing, and configuring AI development configs
through a product UI, with Git as an invisible persistence layer. Repo-agnostic; this repo is its
canonical default content. Roadmap: docs/VISION.md.
Avoid: the UI, the dashboard, the app
Quality
Skill composition: A skill calling another skill by name to delegate a sub-task — the caller owns the orchestration decision ("when to do X"), the callee owns the mechanics ("how to do X"). Avoid: chaining, nesting, sub-skill
Vale audit prefilter:
The deterministic Vale pass that runs ahead of skill-audit/agent-audit's Description dimension,
so LLM judgment is spent only on what a pattern cannot catch. Mechanics: docs/spec/gates.md.
Avoid: linting, style check
Issue: The cross-provider term for a tracked unit of work. Gitea is this repo's canonical tracker (ADR-0007), but skills say "linked issue" generically rather than naming a provider. Avoid: ticket, card, task
Relationships
- A Plugin bundles one or more Skills and agents; a Plugin marketplace lists Plugins; holocron is this repo wearing that hat.
- Every model-invocable Skill pays the Preload tax. A Hand-invoked skill does not — which is the first question to settle when authoring one.
- The Skill context contract bounds both the Preload tax (description) and the body. A Dispatch body is how a skill stays inside it; Delegation discipline is how an agent does.
- AGENTS.md is the source of always-on rules; a Thin adapter imports it and originates nothing.
- Skill composition is the caller/callee split.
forgeroutes a genuinely undecided artifact type to the matching author skill — an already-specified fix (file, line, and change known) calls that author skill directly, because each routing hop re-derives instructions from a shorter brief and has been observed to drop hard constraints handed down the chain. - HITL and HOTL are exclusive per action class, and the choice must be explicit and documented. Sycophancy is why HOTL is not the safe default.
- A Skill built on research carries a Provenance chain;
skill-auditfails it when broken. - LESSONS.md feeds the standing files: three or more entries on one pattern graduate the pattern into the relevant standing document.
Example dialogue
Dev: "This one only fires when someone types the slash command. Does its description still need trigger words?" Maintainer: "No — that's a hand-invoked skill. The host withholds it from the model-visible listing, so it pays no preload tax at all and the description is human-facing text." Dev: "Then the body can be as long as it needs to be?" Maintainer: "Different budget. The skill context contract gates the body whether or not the skill is model-invoked — the description competes with every other skill's description, the body competes with the caller's live conversation. Four mutually exclusive flows means a dispatch body: table in
SKILL.md, onereferences/file per flow." Dev: "And if I split it into an agent instead?" Maintainer: "Then you're in delegation discipline territory. An agent has noreferences/to disclose to, so the failure mode flips — it stops being length and starts being restatement of a procedure some skill already owns."
Flagged ambiguities
- "skill" was used for both the authored
SKILL.mdunderplugins/<name>/.apm/skills/and the deployed copy under.claude/skills/— resolved: the authoring source is the Skill; the deployed copy is gitignoredapm installoutput and is never edited. - Skills answer to two names, bare (
gitea-prs) and namespaced (gitea:gitea-prs), because user-scope native installs were left enabled deliberately (ADR-0018) — resolved: write the bare name; a working namespaced call is not evidence of a defect. - "context" means both the model's live token window (the Preload tax sense) and the bounded domain this file describes — resolved: unqualified "context" in this repo means the token window.
- "audit" was used for both an author skill's inline closeout and
forge's independent clean-context recheck — resolved: these are two distinct layers, kept separate precisely because an audit running in the same context as the work it checks shares that work's blind spots.