Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Optimize a skill by planning, exploring available tools, diagnosing failures, and implementing fixes via PR. Use this skill as soon as an optimization loop starts, especially on the first iteration when community tools or reference approaches should be explored before implementation.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-08 | ✗→✓ | ▲ Improved | 73% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 93% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 88% | 0% |
| case-18 | ✗→✓ | ▲ Improved | 72% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 64% | 0% |
You are the optimization orchestrator. Your goal is to raise the probe score by expanding capabilities, diagnosing failures, and landing focused PRs.
SkillHone's harness separates four things that are easy to confuse:
SKILL.md, scripts,references, and tests owned by the skill.
contract, and compiler/audit helpers. Treat it as measurement infrastructure, not something to copy into the skill.
These hold produced artifacts such as answer.mmd plus trajectory.jsonl.
compiler/validator diagnosis, issues, PRs, and wiki pages that explain what happened without exposing gold data.
Optimization work should be driven by the observation surface, not by guessing from the final score alone. The harness already creates the places where evidence lives; your job is to inspect the right layer before choosing what to change.
Start by understanding the current repo state and observation history — run status.py and summary.py from the Available Scripts section below.
Use this as context, not as a rigid workflow. If there is an open PR, review or resolve it before adding competing work. If a wiki page or closed issue already explains a failed approach, use that history instead of repeating it.
For a new or unfamiliar skill, read the skill and its observation history before deciding whether to explore external approaches. Use explorer when the current skill lacks obvious tools or domain patterns; do not explore just to satisfy a checklist.
| Subagent | What it does | |----------|-------------| | explorer | Discovers new tools and approaches the skill doesn't have yet — searches community registries for browser automation, alternative search engines, specialized APIs, etc. Expands the solution space beyond current tools. | | trajectory-analyzer | Reads solver trajectory files to diagnose tool-level errors (rate limits, wrong tool names, script crashes). Outputs _data/trajectory_diagnosis.json — redacted, safe to share. | | issue-reporter | Analyzes probe results + trajectory diagnosis, files ONE focused Forgejo issue describing the highest-impact failure to fix next. Also writes a wiki page for iteration history. | | developer | Picks up an open issue, implements the fix on a branch, opens a PR. | | reviewer | Reviews a PR — approves+merges if clean, requests changes otherwise. | | dev-quality-reviewer | Optional self-check before push — runs static check + rubric scoring. |
bash# Current Forgejo repo state (issues + PRs) python3 ~/.skillhone/skills/skillhone/scripts/status.py # Structured failure analysis (redacted, safe output) python3 ~/.skillhone/skills/skillhone-optimization/scripts/analyze_probe.py _data/probe_result.json # Render durable observation markdown for Forgejo wiki python3 ~/.skillhone/skills/skillhone-optimization/scripts/write_observation.py --probe _data/probe_result.json --title "Iteration-N-Observation" # Forgejo summary (issues, PRs, wiki pages) python3 ~/.skillhone/skills/forgejo/scripts/summary.py
Make one improvement per cycle that raises the probe score. Key principles:
infrastructure, solver execution, compiler/validator, verifier design, or skill instructions. probe_result.json alone is often insufficient.
files, tool errors, script crashes, permission problems, and loops. They are not gold answers; redacted patterns are safe improvement signals.
parsed, rendered, type-checked, tested, or schema-validated, inspect failed artifacts in the eval workdir and run the relevant task-local compiler/audit command before filing an issue. Do not ask the developer to infer failures from pass/fail alone when stderr or validator diagnostics exist.
_data/*.json files areintermediate artifacts. Every iteration should leave a Forgejo wiki observation page containing probe summary, trajectory diagnosis, compiler diagnosis, and the issue/PR action taken. This is part of SkillHone's observation advantage.
iteration, PR-validation, and final re-score results. Wiki pages and issues should say which score JSON/workdir/split produced the number instead of mixing them into one unlabeled score.
reference skills are useful when the skill lacks an approach, not when the failure is already explained by harness diagnostics.
developer.reviews, call the loaded backend skill scripts such as ~/.skillhone/skills/forgejo/scripts/*.py. Do not call Forgejo/GitLab/Gitea REST APIs directly with curl or handcrafted HTTP.
cat _data/forgejo_config.txt,~/.skillhone/settings.json, identities.conf, or environment variables that may contain tokens/API keys. Backend scripts read credentials themselves and redact logs.
probe_result.json's error field only captures timeouts. It CANNOT tell you about:
The trajectory-analyzer reads raw solver logs and categorizes these. If you see many "wrong_answer" failures, always check trajectory diagnosis first — the real cause might be search infrastructure, not reasoning.
For compiler-like artifact tasks, the highest-signal evidence is often not the score but the compiler/validator message. Examples:
assertions.
When probe failures include produced artifacts, collect a small redacted compiler diagnosis and pass that to issue-reporter and developer. The developer should receive the failure pattern ("subgraph labels used node-shape syntax", "missing answer.mmd", "off-palette fill color") rather than raw hidden eval data.
When the task output is something a public, globally-available toolchain compiles, parses, type-checks, or renders (Mermaid via mmdc, Rust via rustc, LaTeX via pdflatex, JSON Schema via a validator, TypeScript via tsc, …), running that tool on the artifact before submitting is basic engineering hygiene. The optimizer must enforce it on two sides:
public compiler/CLI on its own draft inside its workdir before writing the final artifact. We are not asking for runtime correctness — only that the artifact parses/compiles cleanly. If the tool exits non-zero or emits errors, the solver repairs and re-runs. A solver that submits an artifact it never tried to compile is shipping unverified output.
developerproduces a SKILL.md change or a script change, it must run the same public toolchain against a freshly drafted sample artifact before opening the PR. No green local compile = no PR.
The compiler/CLI in question is public infrastructure — mmdc, rustc, pdflatex, tsc, jq, etc. — installable from package managers, runnable by any user, and unrelated to the eval repo. You never look inside the eval repo for tools or rules; you use the same toolchain anyone shipping this artifact type would use.
Common signals that this layer is missing:
no_answer_produced failures, or scoring runs that report parse errorson artifacts the solver thought were fine.
trajectory diagnosis across iterations, even though the failure mode has already been flagged in a prior iteration's wiki observation.
The fix is a SKILL.md change (and a developer self-check), not a new workflow rule and not anything that touches the eval repo. The solver and the developer simply both run the public compiler before declaring done.
Anti-pattern: do not invent a new validator script. If the task type has a standard CLI (Mermaid → mmdc, Rust → rustc/cargo check, LaTeX → pdflatex, TypeScript → tsc --noEmit, JSON Schema → ajv/jq), use it directly. Do not write a new scripts/validate_*.py that re-implements checks the eval audit already does. A custom validator drifts from the real grader, tends to be over-strict, and has caused observed regressions (score crash, then revert). If the standard CLI is not on PATH, install it via the language's package manager once at the top of the SKILL.md workflow (npx -p @mermaid-js/mermaid-cli mmdc ..., cargo install --quiet ..., etc.) — the skill stays portable.
explorer subagentOther measured skills in the registry, with their headline benchmark lift.