Why: four defects in the files every session pays for, all introduced or left behind by the trim. AGENTS.md told agents the `<plugin>:` form still resolves "because user-scope native installs were left enabled on purpose", and that a working namespaced call "is not something to fix". That premise is false on this machine: installed_plugins.json is empty, no enabledPlugins key exists in ~/.claude.json, and ~/.apm/marketplaces.json is empty. ADR-0018 already reversed itself once on this exact claim (Correction 2026-08-14) using that same enablement as its evidence, so flipping the assertion again would be the third revision in three. Both files now assert nothing about install state at all, which removes the flip-flop surface instead of re-aiming it. The other three are guard-rails whose instruction survived the trim while the caveat that made it safe did not: - The run-tests.sh line omitted --strict, so it named the one invocation that reports SKIPPED rather than failed when a dependency is missing. gates.md records this gate going green having verified 15 of 17 suites on a vale-less PATH. .pre-commit-config.yaml:70 already uses --strict for that reason. - The .claude/settings.json prohibition lost its ADR-0019 exception, so an agent applying it literally would strip apm's own merged SessionStart entry and create the drift the rule exists to prevent. - LESSONS.md still routed graduated rules to CONTEXT.md's Principles section, which this branch deleted. Implementation notes: the six terms the trim dropped while AGENTS.md still claimed CONTEXT.md glosses everything -- authoring root, content mirror, apm package, output profile, near-miss, vacuous green -- are restored as one-line entries per CONTEXT-FORMAT.md, sourced from architecture.md, gates.md and skill-audit's description-quality.md rather than reworded. ADR-0018 gets a third dated note recording the observation and the fact that the state has now been described two ways, and its stale user-scope inventory is replaced by a pointer to it; the decision it records is untouched. LESSONS.md:3 carried the identical stale claim as :5 and is fixed with it. Impact: preloaded context is now free of assertions about machine state. Refs: #105 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TmFqzpuExLJv3m114XVE9w
11 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
apm package:
The unit apm builds and installs — plugins/<name>/apm.yml plus the hand-authored
plugins/<name>/.apm/ tree it compiles from (ADR-0015).
Avoid: plugin directory, source tree
Content mirror:
The generated flat skills/, agents/, commands/, instructions/, extensions/ directories and
merged hooks/hooks.json at a plugin root — also called the flat mirror — compiled from that
plugin's .apm/ tree so hosts that convention-scan those paths discover the content (ADR-0017).
Avoid: generated copy, duplicate tree
Output profile:
An apm pack target format for a generated manifest; apm has claude
(.claude-plugin/marketplace.json) and codex (the differently-shaped
.agents/plugins/marketplace.json) and none for Copilot CLI's legacy path, which a sync script
mirrors instead. Mechanics: docs/spec/architecture.md.
Avoid: build target, export format
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
Authoring root:
The directory a gate resolves against — the nearest ancestor of the file being checked holding
plugins/*/.apm/skills or plugins/*/.apm/agents, falling back to the nearest ancestor holding
.git. The walk: docs/spec/gates.md.
Avoid: repo root, project root
Near-miss: A sibling skill or agent whose plausible queries share keywords with this one but need something different — the only thing a boundary clause should exclude. Avoid: overlap, similar skill
Vacuous green: A check that reports success because it measured nothing — zero files scanned, an unparsed value read as empty, a conditional branch that never armed. Avoid: false pass, clean run
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 can answer to two names, bare (
gitea-prs) and namespaced (gitea:gitea-prs), depending on whether a native install exists at user scope alongside the apm one (ADR-0018) — resolved: write the bare name, which is the only formapm installproduces. - "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.