Files
holocron/docs/adr/0008-agent-audit-single-file-invocation.md
Defame1297 05bb9d6e9f docs(adr): triage, rewrite, and renumber ADRs for clean slate
Complete ADR refactoring for issue #15:

## Changes

1. **Triage archival** — deleted chunk-era ADRs (0001–0003, 0006–0011, 0013); kept active decisions (0004, 0005, 0012, 0014+)
2. **ADR-0004 rewrite** — now reflects plugin-based skill distribution (`plugins/<name>/skills/` + `claude plugin install`) instead of monolithic `.agents/skills/` deployment
3. **Renumber to 0001–0009** — sequential clean slate after archival; all cross-references updated
4. **Content audit** — verified all 9 remaining ADRs for alignment with plugin model, removed stale chunk/deployment language

Kept ADRs: 0001–0009
- 0001: Skills distributed via plugins
- 0002: Two-tier CLAUDE.md (always-on + on-demand)
- 0003: AGENTS.md as provider-agnostic entry point
- 0004: INFO finding level in skill-audit
- 0005: agent-author dual provider scaffold
- 0006: Plugin version parity (version in both manifests)
- 0007: Gitea as exclusive issue tracker
- 0008: agent-audit single-file invocation
- 0009: agent-audit field inventory reference

All decisions are active and aligned with current repository state (marketplace/plugin model).

Closes #15 (ADR section of acceptance criteria)
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-04 17:18:04 +00:00

1.8 KiB

agent-audit takes a single file path and derives the counterpart by scope detection

agent-audit validates agent definition file pairs (Claude Code .md + Copilot .agent.md). The skill accepts a path to either file and derives the counterpart using scope detection rather than requiring the caller to name both files or supply a root directory.

Considered options

Directory input (rejected) — analogous to skill-audit <skill-dir>. Rejected because agents have no per-agent directory. At plugin scope both files are flat in agents/; at project scope they are in completely different directories (.claude/agents/ and .github/agents/). No single directory contains both files across all scopes.

<name> <root> signature (rejected) — mirrors new-agent.sh <name> <root>. Rejected because it requires the caller to supply two pieces of information when one (the file path) is sufficient. The file path already implies the agent name (filename stem) and the root (found by walking up). Forcing the caller to re-supply what the script can infer is the kind of convention knowledge the script exists to encapsulate.

Consequences

  • The unit of validation is the pair. A missing counterpart is always a FAIL — an orphan file is incomplete by definition.
  • Scope detection walks up from the input file: first directory containing plugin.json → plugin scope; first directory containing .git without plugin.json → project scope; path under ~ with neither → user scope.
  • At user scope the derivation crosses filesystem locations (~/.claude/agents/ ↔ ~/.copilot/agents/); the script must handle the home directory case explicitly.
  • The invocation signature is the public contract. Changing it is a breaking change to any caller — treat it as such.