بنقرة واحدة
roster-skill-evolve
Implements skill-health approved improvements — skills, tools, adaptations, agents.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Implements skill-health approved improvements — skills, tools, adaptations, agents.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Audit code quality against KB-defined properties, invariants, and naming conventions.
Quality and compliance audit — combines code-quality and spec-compliance into one actionable report.
Periodic friction analysis — proposes new skills, deterministic tools, and adaptations.
Propose bounded self-improvement loops from KB, code, tests, issues, and CI signals.
Run a bounded verification-first improvement loop from an approved loop spec.
Health check + pipeline pre-flight — verifies roster install integrity and that the project's dev environment (build/test/lint/format) is actually runnable before work starts.
| name | roster-skill-evolve |
| description | Implements skill-health approved improvements — skills, tools, adaptations, agents. |
| version | 1.3.0 |
| domain | meta |
| phase | null |
| preamble | true |
| friction_log | true |
| allowed_tools | ["Read","Write","Edit","Bash","Agent","Skill","AskUserQuestion"] |
| human_gate | both |
| artifacts | {"reads":["skills-meta/health-<date>.md","workflows/*.cwr.json"],"writes":["skills/<domain>/<name>.md","scripts/<name>.sh",".harness/harness.json (via sync-harness.sh)"]} |
| pipeline_role | {"triggered_by":"/roster-skill-health with APPROVED proposals","receives":"skills-meta/health-<date>.md","produces":"skills / scripts / patches installed in the harness"} |
This preamble is injected into every roster skill that declares preamble: true.
It encodes the non-negotiable principles that govern all skill runs.
Do not defer tests, documentation, or robustness in the name of speed. A short-term shortcut is rarely faster than a complete solution. "We'll add tests in a follow-up" is not an acceptable decision — it is explicit debt, or it is not a decision at all.
Before creating anything, verify what already exists:
A false positive (checking for something that didn't exist) costs seconds. A false negative (building something that already existed) costs hours and creates debt.
Do not validate a direction if you have a grounded objection. Do not say "good idea" before verifying it is a good idea. If you spot a problem, say so — clearly, factually, without softening. State your recommendation, explain why, mention what context you might be missing, and ask.
When you and a sub-agent both agree to change the user's direction: → present the recommendation → explain why you both think it is better → state what context you might be missing → ask
Never act unilaterally in this case. The decision belongs to the user.
If you are blocked, the situation is ambiguous, or the action exceeds the declared scope: → escalate to the human — do not deviate from scope, do not guess
When you need to ask the user something, use your runtime's interactive input tool if one is available — do not ask via plain text output.
Known runtime tool names:
| Runtime | Tool name |
|---|---|
| Claude Code | AskUserQuestion |
| Copilot CLI | ask_user |
| Codex | request_user_input |
| OpenCode | question |
Rules:
At the end of each run, honestly record:
This is not a performance review. It is cross-run memory.
Format: see skills-meta/friction.jsonl.
If your skill's phase: frontmatter field is non-null (i.e. you are one of the staged
pipeline phases) and you are operating on a task with a briefs/<task>- context, append one
event to briefs/<task>-state.json when you finish — this is the durable, resumable record
/roster-run reads to resume and /roster-doctor status renders. Skip entirely if your phase:
is null (standalone skills: doctor, audit, investigate, init, skill-health) or there is no task
context. Create the file if absent; preserve every prior events entry:
{
"task": "<slug>",
"mode": "express|fast|full",
"current_phase": "implement",
"events": [
{ "phase": "implement", "outcome": "COMPLETED", "at": "<ISO-8601 or omit>", "by": "roster-implement" }
]
}
Rules for writing your event:
task is the canonical slug, derived once from the task description and reused identically
by every phase: lowercase, kebab-case, the ≤4 most significant words (the same rule
/roster-question and /roster-intake use to name briefs/<task>-*). The first phase to run
— roster-implement in Express/Fast, roster-question/roster-intake in Full — fixes the slug;
every later phase, and /roster-run's resume check, MUST derive the byte-identical slug or the
ledger will not be found. When in doubt, reuse the slug already present on existing
briefs/<task>-* files for this task rather than re-deriving.phase MUST be your skill's own phase: frontmatter value, verbatim — one of the legal
tokens: question, research, intake, spec, plan, implement, review, qa, ship.
Never invent a synonym (implementation, code-review, …); resume matches on these exact tokens.outcome is per phase, from this fixed vocabulary — intake: VALIDATED; spec:
VALIDATED, SKIPPED (non-spec'd task types), or BOUNCED; review/qa: GO or NO-GO;
ship: COMPLETED or BLOCKED; implement: COMPLETED or PARTIAL;
question/research/plan: COMPLETED. Do not invent other values — PARTIAL is legal
only on implement, and BLOCKED only on ship; every other phase/outcome pairing
is schema-illegal.implement/PARTIAL — emit only when in-scope work remains after the improve-loop
budget is exhausted, or a scope blocker stops the run. Never emit PARTIAL for "tests
failing" — a failing gate is not a terminal state; keep iterating within the budget or
escalate.ship/BLOCKED — emit only when review and QA are GO but the ship action itself is
impossible (permissions, remote state, human hold). A NO-GO gate is not BLOCKED.reason string field in the event itself — no
pointer-by-convention to an external artifact:
{ "phase": "ship", "outcome": "BLOCKED", "reason": "<why>", "by": "roster-ship" }./roster-run Step 1.4): a latest event implement/PARTIAL
re-routes to /roster-implement; a latest event ship/BLOCKED halts the pipeline and
surfaces the event's reason to the human.implement/review pair; that
repetition is the history, not a bug. Set current_phase to your phase (the latest completed).mode is the task's mode (express/fast/full); set it on first write, leave it thereafter.at if your runtime can produce one; otherwise omit the field. by is your
skill name (or human-gate for a gate decision).TASK environment variable — export it when invoking
hooks manually.You implement improvements approved by /roster-skill-health. Work one proposal at a time, with a human gate before each install.
Token discipline: one proposal at a time. No silent batching.
Find the most recent report:
ls -t skills-meta/health-*.md | head -1
Read this file. Extract proposals marked **APPROVED**.
If no APPROVED proposal:
"No approved proposals in the latest report. Re-run
/roster-skill-healthto analyze the friction log."
For each APPROVED proposal, in order A → B → C → D:
Gate before: present the proposed name and description. Confirm the domain (pipeline, operational, meta).
Search first:
skills/ for a similar existing skillindex.json) if availableInvoke skill-creator:
Spawn the skill-creator sub-agent if available (.claude/agents/skill-creator.md exists).
Otherwise, manually describe the skill (name, domain, description, artifacts in/out) and open an issue on the roster repo.
Provide:
.claude/agents/ (read from installed harness)Review the generated skill:
Gate after: present the final skill. Request install approval.
Install:
# Place in the appropriate domain
mv <skill-draft> skills/<domain>/roster-<name>.md
# Add to harness.json
# (layers.skills section)
# Project to runtimes if sync-harness.sh available
bash scripts/sync-harness.sh 2>/dev/null || echo "manual sync required"
Gate before: present the script name and its expected behavior.
Write the script in scripts/:
#!/usr/bin/env bash
# <name>.sh — <one-line description>
# Usage: ./<name>.sh [args]
# Motivated by: friction "<original friction>" (<N> occurrences)
# Added: <date>
set -euo pipefail
Test the script:
Reference in the affected skill:
Gate after: show the script and the diff of the modified skill.
Gate before: present the target skill, the section to modify, and the proposed change.
Read the current skill in its entirety.
Apply the patch:
Verify consistency:
Gate after: present the diff. Request approval before saving.
Project if the skill is in .claude/commands/:
cp skills/<domain>/roster-<name>.md .claude/commands/roster-<name>.md
Gate before: present the role, domain, and frictions motivating it. This is a large investment — confirm explicitly.
Sequence:
skill-creator to define the associated skill profilerecruiter in Mode 1 with the new role as the identified needFollow the standard recruiter workflow for install in the harness.
Collect instances and compute diffs:
ls workflows/*.cwr.json 2>/dev/null | grep -v 'templates/' || echo "no instances"
For each instance:
_roster_template_version to identify the source templateworkflows/templates/<mode>.cwr.json_roster_template_version → mark diff as [CONFLICT], skipCluster diffs: group instances by (template, structural-diff-signature). For clusters with count ≥ min_entries_for_signal (default 3, shared with roster-skill-health tunable), generate a unified structural diff.
Gate before: present the unified diff to the human. Show how many instances share this modification and what it does. Do not apply without explicit approval.
Apply patch (on approval):
workflows/templates/<mode>.cwr.json to incorporate the diff_roster_version: minor (x.Y.0) if steps added/removed; patch (x.y.Z) for wording changesbash scripts/sync-harness.shGate after: present the final template diff. Request commit approval.
Conflict handling: if template evolved since instances were created (version mismatch), mark the proposal [CONFLICT — template evolved; cannot apply cleanly] and skip without modifying any file.
After any edit to skill .md files, run this integrity check:
# Verify all friction_log: true skills have a valid jsonl block
missing=$(grep -rL '```jsonl' $(grep -rl 'friction_log: true' skills/ --include='*.md') 2>/dev/null)
if [ -n "$missing" ]; then
echo "❌ Missing jsonl wrapper in: $missing"
else
echo "✅ All friction_log skills have valid jsonl wrapper"
fi
If any skill fails: restore the ## Friction Log block with the correct format before proceeding to the next proposal.
[ -d kb ] || [ -d .harness ] && echo "harness present" || echo "harness absent"
If harness/KB is present:
→ Invoke skills/kb/harness-validator.md skill.
→ If Critical findings:
/roster-skill-evolve.For each APPROVED proposal:
skills/<domain>/roster-<name>.md installed + harness updatedscripts/<name>.sh created + affected skill patched| Condition | Action |
|---|---|
| No approved proposals in the health report | Stop — re-run /roster-skill-health to generate proposals first |
| A proposal implementation breaks existing quality gates | Stop — revert the change, note in friction log, skip that proposal |
| Harness-validator returns Critical and user chose to fix harness | Stop — fix harness, then re-run /roster-skill-evolve |
Primary path: Done — improvements installed; re-run /roster-skill-health after next batch of cycles
Alternatives:
/roster-skill-health immediately — if new frictions were discovered during this run💡 After evolving skills, run a few pipeline cycles to validate the improvements before the next health check.
{
"date": "<ISO-8601>",
"skill": "roster-skill-evolve",
"task": "skill-evolution",
"frictions": [],
"methods": [],
"suggestion_type": null,
"suggestion": null,
"effort_estimate": null
}