feat(engine): stage skill: property — programmatic plugin skill binding#119
Closed
iamcxa wants to merge 2 commits into
Closed
feat(engine): stage skill: property — programmatic plugin skill binding#119iamcxa wants to merge 2 commits into
iamcxa wants to merge 2 commits into
Conversation
- Frontmatter template: skill: {plugin:skill-name} for stages with plugin-provided skills
- Stage prose template: 'Load skill: Invoke Skill(...)' instruction when skill: is present
- Enables workflow plugins to bind stage skills that ensign loads at dispatch time
- model: was already supported; skill: completes the per-stage plugin binding
- status parser: add 'skill' to optional_fields so it's preserved in stage dict - claude-team build: inject Skill() loading instruction into ensign prompt when stage has skill: property (component 1.5, between header and stage def) - commission SKILL.md: document skill: property in stage template + prose template Enables workflow plugins to bind stage-specific skills that ensign loads automatically at dispatch time. Previously skill loading relied on ensign reading README prose — now it's programmatic via claude-team build. Verified: all 4 ship-flow stages (sharp/plan/execute/ship) get correct Skill() injection with matching model dispatch.
Contributor
Author
|
Re-audited this PR's scope per your feedback on other PRs in this batch:
Ready for review when you get a chance. #134 and #135 have now been rebased independently (each containing only their claimed scope). #130 still pending a separate scope decision (your suggestion to move it to its own skill). |
This was referenced Apr 20, 2026
Collaborator
|
can you see if referencing the skill in the stage definition works? |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Workflow plugins (like ship-flow) provide stage-specific skills, but there's no structured way for the engine to tell an ensign which plugin skill to load for a given stage. Currently ensigns improvise from README prose — unreliable for complex stages.
Solution
Three small changes that enable structured skill binding:
1. Commission template:
skill:stage propertyCommission now documents
skill:alongside existing properties (worktree, gate, agent, model).2. Status parser: preserve
skill:in stage dictOne field added to the optional list.
3. claude-team build: inject
Skill()into ensign promptEnsign prompt now gets a structured Skill() instruction before the stage definition.
Verified
Tested against a live ship-flow workflow (4 stages: sharp/plan/execute/ship). All 4 stages correctly inject their
Skill()call into the ensign prompt with the matching model dispatch.Diff
skills/commission/SKILL.md: +3 lines (skill: property in template + prose instruction)skills/commission/bin/status: +1 field in optional_fields listskills/commission/bin/claude-team: +6 lines (skill injection in prompt assembly)Total: 10 insertions, 2 deletions.