marketplace/bundles/plan-marshall/skills/manage-personas/SKILL.md
Resolve a persona's composition DAG into a flat, deduped skills[] for dispatch
npx skillsauth add cuioss/plan-marshall manage-personasInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Persona resolution for the persona / ref / profile identity model. The resolve verb computes the transitive closure of a persona's composition DAG and emits one flat, deduped skills[] that a dispatch site passes as the execution-context's explicit skills[]. This is deterministic resolution — analogous to architecture resolve and manage-config resolve-recipe — not new runtime authority and not nested skill loading.
Execution mode: Single-verb script-executor — call resolve and route on the returned TOON status. Do not improvise additional verbs or arguments.
Prohibited actions:
profiles: frontmatter is the binding source of truth.composes: frontmatter is the binding source of truth.skills[].Constraints:
status: error, error: composition_cycle).persona-plan-marshall-agent is always included, unconditionally — it is never read from composes:.resolve doesGiven --persona-key {bundle:persona} and optional --domains a,b,c, the resolver reads the persona's SKILL.md frontmatter and produces a flat, deduped skills[] by unioning, in deterministic order:
plan-marshall:persona-plan-marshall-agent (unconditional; same guarantee as the current foundational base load).bundle:skill notation in the persona's composes: frontmatter list (ref-* concerns and, for meta personas, other persona-* skills).persona-*, the transitive closure of its composes: and profiles: resolution (DAG walk; cycles rejected).profiles: frontmatter list, the profile × {domains} domain skills resolved via the Extension API (manage-config resolve-domain-skills --domain {domain} --profile {profile}), for every domain in --domains. When --domains is omitted, no profile×domain skills are merged (the resolver emits base + composition only).The persona's frontmatter (profiles: + composes:) is the sole binding source of truth — there is no hardcoded table anywhere in the resolver.
status: success
persona_key: plan-marshall:persona-implementer
skills[N]:
- plan-marshall:persona-plan-marshall-agent
- plan-marshall:ref-code-quality
- ...
On error: status: error with an error discriminator (persona_not_found, not_a_persona, composition_cycle, composed_persona_not_found).
The canonical argparse surface for manage_personas.py. The plugin-doctor analyzer (_analyze_manage_invocation.py) reads this section as source-of-truth for the manage-invocation-invalid and missing-canonical-block rules. Consuming docs xref this section by name instead of restating the command inline. See pm-plugin-development:plugin-script-architecture cross-skill-integration.md § "Script invocation in documentation".
python3 .plan/execute-script.py plan-marshall:manage-personas:manage_personas resolve \
--persona-key PERSONA_KEY [--domains DOMAINS]
--persona-key is the bundle:skill notation of the persona to resolve (e.g. plan-marshall:persona-implementer). --domains is an optional comma-separated list of domain names whose profile × domain skills are merged.
development
Domain-owned OpenRewrite log-line finding parser for the java-cui domain — parses the
development
Domain-owned OpenRewrite marker detection for the java-cui domain — scans Java/Kotlin sources for cui-rewrite TODO markers, categorizes them by recipe, and fails the gate on any detected marker
development
Operator control surface for the marshalld build server — enrol/drop a project in the machine-global registry (the opt-in enable signal and anti-laundering wall), manage the daemon lifecycle (start, stop, drain, status, install, upgrade) version-pinned to the verified bundle copy, and inspect the daemon's per-project interaction-audit log (read-only)
tools
The tiny build-consumption client for the marshalld build server — submit a build job, bounded long-poll for its result, ping the daemon identity, and preflight registry-plus-liveness in one call; consumption only, never provisioning or enrolment