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).
9.8 KiB
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 atskills/implementation/and is referenced elsewhere asspire:implementation(agents/athanor.md:15,README.md's component table). If skill identity resolves from thenamefield,spire:implementationis a broken reference — the real id would bespire:implementation-orchestration. If identity resolves from directory name instead, thenamefield itself is just wrong/misleading. - Root cause: this file is a verbatim carry-over from the old
g4b_ai:implementation-orchestrationskill (description text is byte-for-byte identical to the pre-migrationg4b_aiversion) — the folder was renamed toimplementationbut the frontmatternamewas 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.mdassumes 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 atplugins/spire/skills/igor/references/project.mdand is included correctly elsewhere via a relative path (skills/igor/SKILL.md:13uses@references/project.md). - Impact: this include will not resolve for any project that installs
spireas a normal plugin (i.e., doesn't hand-copyigor/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) declaresmodelexplicitly.igor.mdhasname,description,memory,skillsbut nomodel. The plugin's ownmodel-tiers.mdreference is emphatic that model must always be explicit ("Always passmodelonAgentcalls... 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'sskills:list usesspire:workpad. This is the only bare, unnamespaced entry. - Fix: change to
spire:igorfor 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 baretome:namespace. Sincetomeis not its own plugin (noplugin.jsonunderskills/tome/) but a nested skill group inside the singlespireplugin, 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:14says tome setup happens "viaspire:init" — but the actual skill isskills/tome/skills/init/SKILL.mdwith frontmattername: init, cross-referenced everywhere else as bareinit/tome:init, never asspire:init. Three different spellings of the same reference (spire:initin README,tome:init-style prose in the tome skills themselves, bareinitin 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:initgiven 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'smodel: claude-opus-4-6(no suffix) andresearcher.md'smodel: 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-6likeathanor.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 (perREADME.md:5, "Replacesg4b_ai", and the currently-installedassistantskill 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 itsskills:frontmatter. Tome is correctly absent from all agent preload lists; it's referenced only conditionally in prose ("if available in the project") inagents/athanor.md:23andagents/adept.md:28. - No
warpspace-*org4b_aileftovers in code paths:grep -rniE 'g4b_ai|warpspace|forge\b'across the whole plugin returns onlyREADME.md:5("Replacesg4b_ai"), which is an intentional, correctly-worded historical note, not a leftover bug. svgskill 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,searchall correctly omit theAgenttool (leaf agents, matching their "cannot spawn sub-agents" descriptions);athanorcorrectly hastools: "*"(needs Agent tool to fan out);adepthas notools:restriction listed but its description and body correctly describe dispatching Explore subagents, consistent with unrestricted tool access. igor/SKILL.md's own@references/project.mdinclude: resolves correctly (relative to the skill file, matching the actual file atskills/igor/references/project.md) — this is the correct pattern thatagents/athanor.mdshould have copied instead of inventing a different (broken) path.- Plugin manifests are valid JSON and both declare
"name": "spire"correctly. researchandresearch-treeskills: frontmatter names match their directories, cross-reference each other andworkpadcorrectly, and their described agent tiers (scout/search/researcher) match the actual agent files' models and tool sets exactly.