Skip to content

fix(plugin): missing project mandate is optional, not a broken path#18

Merged
isingh merged 1 commit into
mainfrom
fix/plugin-mandate-optional
Jun 15, 2026
Merged

fix(plugin): missing project mandate is optional, not a broken path#18
isingh merged 1 commit into
mainfrom
fix/plugin-mandate-optional

Conversation

@isingh

@isingh isingh commented Jun 14, 2026

Copy link
Copy Markdown
Contributor

The bug

On the plugin install path, Claude Code never creates a .truecast/ instance dir in the repo. But the generated agent body said "your job lives in .truecast/agents/<name>/instance/mandate.md — if it doesn't exist, write it." Two failures stacked:

  1. The path is absent (no truecast install ran), and
  2. Personas are read-only (Read, Grep, WebSearch, WebFetch — no Write), so they cannot create the mandate they're told to.

Result: the agent reads nothing, can't create it, and bails to "working from craft principles" — the ".truecast doesn't exist" report.

The fix

Reframe the plugin-transport "Your job" section so a missing brief is optional, not an error: the persona asks the user what they need (which a read-only agent can do) and proceeds from its craft, and points to the truecast CLI for a standing, persisted mandate.

Rejected alternatives: scaffolding .truecast/ via a plugin SessionStart hook (unsandboxed code execution — the supply-chain risk we avoid) and granting Write (breaks least-privilege).

Scope / safety

  • Skill paths (${CLAUDE_PLUGIN_ROOT}/core) were already correct — unchanged.
  • Subagent transport is byte-identical (golden test green).
  • Regenerated all 11 plugin bodies; claude plugin validate --strict passes; truecast publish --check clean.

Test plan

  • 159 tests pass (updated the plugin-transport assertions: missing mandate → asks, never "write that mandate").
  • typecheck / lint (src) / build clean.

🤖 Generated with Claude Code

…able path

On the plugin install path Claude Code never creates a `.truecast/` instance
dir, so the agent body's "your job lives in .truecast/.../mandate.md — if it
doesn't exist, write it" dangled: the path was absent AND read-only personas
(Read/Grep/WebSearch/WebFetch — no Write) cannot create it, so they bailed to
"working from craft principles" (reported as the .truecast-doesn't-exist bug).

Reframe the plugin-transport job section: treat a missing brief as normal, tell
the persona to ASK the user what they need (which a read-only agent can do),
and point to the `truecast` CLI for a standing, persisted mandate. Skill paths
(${CLAUDE_PLUGIN_ROOT}/core) were already correct and are unchanged; the
subagent transport is byte-identical (golden green). Regenerated all 11 plugin
bodies; `claude plugin validate --strict` passes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@isingh isingh merged commit f066114 into main Jun 15, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant