skill-autoresearch — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited skill-autoresearch (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
┌──────────────────────────┐
│ SETUP (one-time) │
│ │
│ 1. Choose target skill │
│ 2. Create test brief │
│ 3. Define stop criteria │
└──────────┬───────────────┘
│
┌─────────────────────▼─────────────────────┐
│ │
│ ITERATION LOOP │
│ │
│ ┌──────────────────────────────────┐ │
│ │ Executor Agent (worktree) │ │
│ │ - Reads target SKILL.md │ │
│ │ - Follows procedure step by step │ │
│ │ - Uses test brief as input │ │
│ │ - Reports confusion log per step │ │
│ └──────────────┬─────────────────────┘ │
│ │ │
│ ┌──────────────▼─────────────────────┐ │
│ │ Score (orchestrator) │ │
│ │ - Average clarity across steps │ │
│ │ - Tool/script success (0/1) │ │
│ │ - Output quality metrics │ │
│ │ - Compare to stop criteria │ │
│ └──────────────┬─────────────────────┘ │
│ │ │
│ ┌────────▼────────┐ │
│ │ Criteria met? │ │
│ └───┬─────────┬───┘ │
│ No │ │ Yes │
│ ┌────────▼──────┐ │ │
│ │ Fix skill │ │ │
│ │ files based │ │ │
│ │ on findings │ │ │
│ └────────┬──────┘ │ │
│ │ │ │
└────────────┘ ┌────▼─────────────────┐ │
│ DONE │ │
│ Report final scores │ │
│ + changelog │ │
└───────────────────────┘The key insight: instead of writing test scripts, you launch an agent that follows the skill procedure as a real user would. The agent's confusion IS the test signal. If it gets confused, the skill's instructions are unclear. If the output is wrong, the procedure has a gap.
This is mandatory, not optional. Do not replace the executor-agent run with a local checklist, fixture smoke test, or manual paraphrase of what the executor would have done.
Each step in the target skill gets a clarity rating (1-10). The average across all steps is the primary optimization target. This is the equivalent of Karpathy's val_bpb — a single quantitative number that improves monotonically as the skill gets clearer.
Each executor runs in a git worktree, so it can create files, run scripts, and make changes without affecting the working directory. Failed experiments are discarded automatically. This is analogous to Karpathy's branch-per-experiment pattern.
This is mandatory for every executor run. Do not run the executor in the main worktree.
Skill procedures converge fast — unlike ML hyperparameter search (100+ experiments), prose clarity improvements plateau after 3-5 rounds. If you're still finding major issues after 5 iterations, the skill may need architectural changes, not instruction tweaks.
Identify the skill to test. Read:
Note the skill's:
Before creating briefs or fixtures, ask the user whether they want persistence.
Use this decision flow:
Do you want to persist test files?In which folder? Default path is workdir/autoresearch-evals/{skill-name}/Do not assume persistence without asking first.
A test brief is a simulated set of "source materials" that an executor agent uses as input. It replaces the real user.
Requirements:
Default storage: do not save the brief permanently. Keep it in runtime only, such as runtime/.tmp/skill-autoresearch/{skill-name}/{brief-name}.md, or inline it in the executor prompt if small.
If persistence is explicitly requested by the user after the preflight question:
result.json in that same folder.workdir/autoresearch-evals/{skill-name}/.update-existing-file.md, ambiguous-input.md. Bad: 260417-brief.md, tmp.md.Important split:
workdir/autoresearch-evals/{skill-name}/fixtures/ / scripts/ if no folder was specified.Score tracking:
result.json next to the persisted brief and fixtures, use this schema: ./result.schema.json.Template:
# Test Brief: [Scenario Name]
> Simulated input for testing the [skill-name] skill.
> The executor agent treats this as what a real user would provide.
## Scenario
[Describe the test scenario — what is the user trying to accomplish?]
## Source Materials
[The actual content the executor will use as input — colors, text, data, files, etc.]
## Simulated User Behavior
[How the executor should respond when the skill asks for user input]
- When asked to confirm: [confirm / reject / partial]
- When asked to fill gaps: [provide values / skip / done]
- When asked to choose: [which option]
## Expected Output
[What the output should approximately contain — used by reviewer for validation]
## Edge Cases Included
[List the intentional edge cases and what correct handling looks like]If the scenario needs non-trivial starting files and persistence was requested, prefer this pattern inside the brief:
## Fixture Source
- Materialize from `./fixtures/[fixture-name]/`
- Or run `./scripts/setup-[scenario].sh` in the isolated worktreeIf persistence was not requested, describe the setup inline or create it directly inside the isolated worktree for that run.
Every autoresearch loop needs explicit stop criteria. Without them, you'll iterate forever on diminishing returns.
Default stop criteria (use these unless the skill warrants different thresholds):
| Metric | Target | How Measured |
|---|---|---|
| Instruction clarity | >= 8.5/10 average | Executor confusion log |
| Script/tool success | 100% (all pass) | Exit codes from skill's scripts |
| Output completeness | >= 75% of expected fields | Parser/validator output or manual count |
| Mode coverage | All modes tested | At least one test per mode |
| No blocking issues | 0 remaining | Executor reports no confusion >= 3 steps below 7/10 |
| Brief leakage | 0 brief-specific literals copied into the skill | Reviewer diff inspection |
Custom metrics for skills with measurable output:
For each iteration:
#### 5a. Launch the executor agent
This step is mandatory for every brief you count as tested.
Use the Agent tool with:
isolation: "worktree" — so changes don't affect the main workspacemode: "auto" — so the executor can create files and run scriptsRequirements:
Before launching:
Executor prompt template (copy and customize):
You are a test executor for iteration N of an autoresearch loop. Your job is to follow
the [SKILL NAME] skill procedure EXACTLY as written. Read all files fresh — do not
assume you know the contents.
## Your Task
1. Read the SKILL.md at [path to target SKILL.md]
2. Read any templates/reference files the skill uses
3. Read the test brief at [path to test brief]
4. Materialize any referenced fixture or run any referenced setup script inside the isolated worktree
5. Follow the procedure step by step in [MODE] mode
6. Treat the brief as test input, not as source text to transplant into the skill
7. Complete ALL steps including validation/output generation
## Simulated User Behavior
[Copy from test brief]
## CRITICAL: Confusion Report
Rate each step on clarity (1-10). For EACH step, note:
- Was the instruction clear? (yes/no)
- Did you have to guess or interpret anything ambiguous?
- Were there contradictions between instructions and templates?
- Did any guidance added since the last iteration help?
- Did any proposed fix look specific to this brief rather than general to the skill?
## Output Format
### 1. Execution Result
- Skill completed end-to-end? (yes/no)
- Tool/script outputs (full text of validation, coverage, errors)
- Files created
### 2. Confusion Log
Step 1: Clarity X/10
- Issue: ...
(Continue for all steps)
### 3. Issues Found
- Template issues
- Script/tool issues
- Procedure gaps
- Brief-specific leakage risk
### 4. Overall Assessment
- What worked well
- What is still confusing
- Suggestions for improvement#### 5b. Score the results
After the executor returns, compute scores against stop criteria:
| Metric | Score | Pass? |
|---|---|---|
| Instruction clarity | [avg of step scores] | [>= target?] |
| Script/tool success | [pass/fail] | [all pass?] |
| Output completeness | [%] | [>= target?] |
| Mode coverage | [modes tested / total modes] | [all covered?] |
| Blocking issues | [count of steps < 7/10] | [0?] |
| Brief leakage | [count] | [0?] |
#### 5c. Fix or stop
If all criteria met: Stop the loop. Report final scores and changelog.
If criteria not met: Analyze the executor's confusion log and fix the target skill files:
Bump the skill version after each round of fixes (patch for minor clarifications, minor for new steps/guidance).
Then launch the next iteration.
If the target skill has multiple modes (create/update, import/export, etc.), test each mode at least once. You can test secondary modes in the same iteration as the final create-mode pass.
For update mode specifically:
When the loop converges, present:
Convergence summary:
Autoresearch: [skill name]
Iterations: N
Clarity: [start] → [end]
Changes: [count of edits to SKILL.md, template, scripts]
Modes tested: [list]
Stop criteria: ALL METChangelog (what was fixed per iteration):
Iteration 1 (clarity X.X):
- [finding] → [fix applied]
- [finding] → [fix applied]
Iteration 2 (clarity X.X):
- [finding] → [fix applied]If persistence was requested, write result.json in the persisted eval folder using the schema contract. Keep that file compact and table-shaped:
results mirrors the final scoring tablebriefs contains every persisted brief keyed by brief namestatus plus per-brief results when the brief was actually scoredresult.jsonVersion bumps:
autoresearch-evals/{skill-name}/ and keep {brief-name}.md, fixtures/, scripts/, and result.json inside it.runtime/.tmp/.result.json as current-state summary only if persistence was requested; do not use it as a changelog or executor audit log.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.