npx claudepluginhub luagam/stage-harnessThis skill uses the workspace's default tool permissions.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Details PluginEval's skill quality evaluation: 3 layers (static, LLM judge), 10 dimensions, rubrics, formulas, anti-patterns, badges. Use to interpret scores, improve triggering, calibrate thresholds.
在执行任何 harnessctl 命令前,先解析本地 CLI 路径:
if [ -z "${HARNESSCTL:-}" ]; then
candidates=(
"./stage-harness/scripts/harnessctl"
"../stage-harness/scripts/harnessctl"
"$(git rev-parse --show-toplevel 2>/dev/null)/stage-harness/scripts/harnessctl"
)
for candidate in "${candidates[@]}"; do
if [ -n "$candidate" ] && [ -x "$candidate" ]; then
HARNESSCTL="$candidate"
break
fi
done
fi
test -n "${HARNESSCTL:-}" && test -x "$HARNESSCTL" || {
echo "harnessctl not found. Set HARNESSCTL=/abs/path/to/stage-harness/scripts/harnessctl" >&2
exit 1
}
Candidate skill lifecycle: mine → shadow validate → auto-refine → human promotion.
Skills improve over time through evidence from real epics. Rather than writing skills manually, stage-harness mines patterns from completed work, validates them in shadow mode, refines them automatically, and only presents them to a human when they've proven reliable.
[mine] → [candidate] → [shadow-validate] → [auto-refine] → [promote?]
↑ |
└──────── (iterate) ─────────────────┘
After each epic DONE, skill-miner scans:
A pattern becomes a candidate when seen ≥ 2 times.
Candidate is written to .harness/memory/candidate-skills/<slug>/candidate-skill.md using the template.
On the next relevant epic, the candidate skill runs in "shadow mode":
Shadow metrics tracked in observations.jsonl:
{"ts": "...", "epic": "...", "prediction": "...", "actual": "...", "match": true, "notes": "..."}
{"ts": "...", "epic": "...", "prediction": "...", "actual": "...", "match": false, "notes": "diverged on edge case"}
After N shadow runs (configurable, default 3):
ready_for_promotionAuto-refine: skill-miner reads failed observations, identifies common failure patterns, rewrites the candidate-skill.md to address them.
When a candidate reaches ready_for_promotion:
/harness:done surfaces it: "1 skill ready for promotion: jwt-auth-pattern (95% match over 4 epics)"skills/<slug>/SKILL.md and plugin.json updated---
status: candidate | shadow_validating | ready_for_promotion | archived
shadow_runs: 4
match_rate: 0.95
first_seen: 2024-01-20
epics: [add-user-auth, refresh-token-rotation]
---
# Skill: <slug>
...
Track per-candidate:
shadow_runs: number of shadow validationsmatch_rate: fraction where prediction matched actualdivergence_cases: list of epic+reason where it failedauto_refine_count: how many times auto-refined$HARNESSCTL skill list # show all candidates + status
$HARNESSCTL skill show <slug> # show candidate details + metrics
$HARNESSCTL skill promote <slug> # promote ready candidate to skills/
$HARNESSCTL skill archive <slug> # archive failed candidate
Invoke skill: skill-evolution
Operation: mine | shadow_validate | auto_refine | promote
Epic: <completed epic name>