Files
reliquary/docs/workpad/reports/2026-09-14-spire-skill-audit.md
g4borg dd9a49a6a2 ✨ Apply Fable voice/philosophy review + audit fixes to Spire agents
Igor: clan opening, wired lifecycle (classification gate, conversation-to-work
trigger, proactive skim, wrap-up accretion), spawn template with branch/name/model,
synthesis-not-verification rule, model pinned to opus-4-6[1m], skill namespace
fixed to spire:igor. Task-notification plumbing extracted to harness-notes.md.
New mindset.md restores philosophical root lost in cross-repo extraction.

Adept: earned authority stance, strict-domain gravity well, compression-means-
successor in end-of-life.

Athanor: furnace opening paragraph, fixed broken @include path.

Implementation: fixed frontmatter name mismatch.

Journal template: Assistant -> Igor, contexts-as-paths comment.

Includes both review reports (Fable agent review, Sonnet skill audit).
2026-09-14 16:14:44 +02:00

9.8 KiB

Spire Plugin Skill Audit

Scope: all files under plugins/spire/skills/, plugins/spire/agents/, and the two plugin manifests. Mechanical review for namespace consistency, frontmatter correctness, cross-references, tome opt-in, and stale content.

Errors

1. skills/implementation/SKILL.md — frontmatter name doesn't match its directory or its cross-references

  • File: plugins/spire/skills/implementation/SKILL.md:2
  • Issue: Frontmatter is name: implementation-orchestration, but the skill lives at skills/implementation/ and is referenced elsewhere as spire:implementation (agents/athanor.md:15, README.md's component table). If skill identity resolves from the name field, spire:implementation is a broken reference — the real id would be spire:implementation-orchestration. If identity resolves from directory name instead, the name field itself is just wrong/misleading.
  • Root cause: this file is a verbatim carry-over from the old g4b_ai:implementation-orchestration skill (description text is byte-for-byte identical to the pre-migration g4b_ai version) — the folder was renamed to implementation but the frontmatter name was never updated to match.
  • Fix: change frontmatter to name: implementation, matching the directory and every cross-reference.

2. agents/athanor.md — broken @-include path

  • File: plugins/spire/agents/athanor.md:25
  • Issue: @.claude/skills/igor/references/project.md assumes the consuming project vendors a copy of the igor skill under its own .claude/skills/igor/. That directory doesn't exist anywhere in this plugin or in the described "swappable per-project reference" design — the actual file lives at plugins/spire/skills/igor/references/project.md and is included correctly elsewhere via a relative path (skills/igor/SKILL.md:13 uses @references/project.md).
  • Impact: this include will not resolve for any project that installs spire as a normal plugin (i.e., doesn't hand-copy igor/ into its own .claude/skills/). Athanor loses its per-project knowledge injection.
  • Fix: use the same relative-path convention as igor/SKILL.md, or reference the skill's canonical resource path consistently (whatever that resolves to for agent frontmatter includes in this plugin system) — but not a project-local .claude/skills/... guess.

Warnings

3. agents/igor.md — missing model field

  • File: plugins/spire/agents/igor.md
  • Issue: Every other agent (adept, athanor, researcher, scout, search) declares model explicitly. igor.md has name, description, memory, skills but no model. The plugin's own model-tiers.md reference is emphatic that model must always be explicit ("Always pass model on Agent calls... never dispatch a Fable-tier subagent unless the user explicitly asks"). If this omission means Igor inherits the invoking session's model, that may be intentional (Igor is user-invoked via /igor, not dispatched), but it's inconsistent with the rest of the plugin and worth a deliberate comment if intentional.
  • Fix: either add an explicit model: (e.g. pin to Opus 4.6 per user's stated preference for coordinator-tier agents) or add a one-line comment/note explaining the intentional inheritance.

4. agents/igor.md — unnamespaced skill reference

  • File: plugins/spire/agents/igor.md:11
  • Issue: skills: lists - igor (bare), while every other cross-reference to a spire skill in this codebase is namespaced (spire:workpad, spire:implementation). Every other agent's skills: list uses spire:workpad. This is the only bare, unnamespaced entry.
  • Fix: change to spire:igor for consistency, unless the agent's own self-referencing skill preload is meant to be resolved differently (worth confirming against how the harness treats an agent preloading "its own" named skill).

5. Tome sub-skills use a stale tome: namespace in prose, not spire:

  • Files: skills/tome/skills/navigate/SKILL.md:56, skills/tome/skills/check/SKILL.md:33, skills/tome/skills/init/SKILL.md:76,139
  • Issue: These reference sibling tome skills as /tome:handoff, /tome:check, /tome:curate, tome:navigate — a bare tome: namespace. Since tome is not its own plugin (no plugin.json under skills/tome/) but a nested skill group inside the single spire plugin, these are the exact kind of "leftover tome: namespace" the audit was asked to flag. They read as untouched holdovers from a time when tome may have been (or was modeled as) a standalone plugin.
  • Also affected: README.md:14 says tome setup happens "via spire:init" — but the actual skill is skills/tome/skills/init/SKILL.md with frontmatter name: init, cross-referenced everywhere else as bare init/tome:init, never as spire:init. Three different spellings of the same reference (spire:init in README, tome:init-style prose in the tome skills themselves, bare init in frontmatter) appear across the plugin — pick one and apply it uniformly.
  • Fix: decide the real invocation form once tome's actual namespace resolution is confirmed (likely spire:navigate, spire:check, spire:curate, spire:handoff, spire:init given the single-plugin structure) and normalize all cross-references and the README to match.

6. agents/adept.md — non-standard model string, inconsistent with sibling Opus agent

  • File: plugins/spire/agents/adept.md:9
  • Issue: model: claude-opus-4-6[1m] (literal model id + a [1m] suffix, presumably a 1M-context variant flag) vs. athanor.md's model: claude-opus-4-6 (no suffix) and researcher.md's model: opus (tier alias, not a literal id). Three different styles of specifying "Opus" appear across five agent files. This may be deliberate (adept is long-lived and journal-heavy, so a bigger context window is a reasonable ask), but it's worth confirming the [1m] syntax is actually a recognized model-id modifier in this harness rather than a copy-paste artifact.
  • Fix: confirm intent; if deliberate, a short comment in the frontmatter block or agent body would help; if not, align to claude-opus-4-6 like athanor.md.

Nits

7. skills/igor/references/journal-template.md — stale "Assistant" heading

  • File: plugins/spire/skills/igor/references/journal-template.md:4
  • Issue: Template heading reads # <Topic> — Assistant Session Journal. Everywhere else in this plugin the session coordinator is named Igor, not "Assistant" — "Assistant" is the name of the analogous skill/agent that Spire is meant to replace (per README.md:5, "Replaces g4b_ai", and the currently-installed assistant skill elsewhere in this environment plays exactly Igor's role: session journal + delegation). This is a leftover from the pre-Igor template.
  • Fix: # <Topic> — Igor Session Journal.

8. .codex-plugin/plugin.json is byte-identical to .claude-plugin/plugin.json

  • Files: plugins/spire/.claude-plugin/plugin.json, plugins/spire/.codex-plugin/plugin.json
  • Issue: Both manifests are word-for-word identical (name, version, description, author). Both are valid JSON and both correctly name the plugin spire, so nothing is broken today. But Codex's plugin/skill loading conventions are not confirmed to be schema-identical to Claude Code's (e.g. whether Codex expects a different manifest shape, additional fields, or a different skill-discovery mechanism). Flagging for manual confirmation rather than as a hard defect — could not verify the Codex plugin spec from this repo alone.

9. README's component table doesn't reflect that tome is 5 sub-skills, not 1

  • File: plugins/spire/README.md:14
  • Issue: Minor documentation completeness gap — the single README row for tome ("Navigate, curate, check, handoff, init.") is fine as a summary, but combined with finding #5 (namespace confusion) a reader has no single place that states the actual invocable names. Not a defect, just worth tightening once #5 is resolved.

Confirmed correct

  • Tome opt-in (audit item 5): confirmed via grep -rn '^skills:' -A5 agents/*.md — no agent (adept, athanor, igor) lists any tome skill (spire:navigate, tome:navigate, warpspace-tome:navigate) in its skills: frontmatter. Tome is correctly absent from all agent preload lists; it's referenced only conditionally in prose ("if available in the project") in agents/athanor.md:23 and agents/adept.md:28.
  • No warpspace-* or g4b_ai leftovers in code paths: grep -rniE 'g4b_ai|warpspace|forge\b' across the whole plugin returns only README.md:5 ("Replaces g4b_ai"), which is an intentional, correctly-worded historical note, not a leftover bug.
  • svg skill and its two reference docs (inline-svg.md, layout-legibility.md): internally consistent, no namespace issues, no broken paths — clean.
  • Agent tool restrictions match their descriptions: researcher, scout, search all correctly omit the Agent tool (leaf agents, matching their "cannot spawn sub-agents" descriptions); athanor correctly has tools: "*" (needs Agent tool to fan out); adept has no tools: restriction listed but its description and body correctly describe dispatching Explore subagents, consistent with unrestricted tool access.
  • igor/SKILL.md's own @references/project.md include: resolves correctly (relative to the skill file, matching the actual file at skills/igor/references/project.md) — this is the correct pattern that agents/athanor.md should have copied instead of inventing a different (broken) path.
  • Plugin manifests are valid JSON and both declare "name": "spire" correctly.
  • research and research-tree skills: frontmatter names match their directories, cross-reference each other and workpad correctly, and their described agent tiers (scout/search/researcher) match the actual agent files' models and tool sets exactly.