eval-autoresearch-fit — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited eval-autoresearch-fit (Agent Skill) and scored it 87/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 3 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 3 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
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.
Assess whether a skill is a viable candidate for the Karpathy 3-File Autoresearch autonomous optimization loop. Scores each skill on four dimensions, proposes what the 3-file architecture would look like, and updates the canonical summary-ranked-skills.json via the update script.
The Karpathy autoresearch pattern requires three conditions simultaneously:
Skills that lack these properties cannot run an effective autonomous loop.
The canonical ranked skills list lives at:
plugin-research/experiments/analyze-candidates-for-auto-reseaarch/skills/eval-autoresearch-fit/assets/resources/summary-ranked-skills.jsonAfter every evaluation, update it with the update script (see Step 5).
Each dimension is scored 1-10. Max total = 40.
| Dimension | 10 (Best) | 1 (Worst) |
|---|---|---|
| Objectivity | Binary pass/fail or exact numeric output from a shell command | Purely subjective, requires human taste judgment |
| Execution Speed | Completes in seconds | Requires 30+ min or human input |
| Frequency of Use | Triggered multiple times per day | Rarely needed (monthly or less) |
| Potential Utility | Prevents systemic failures or saves hours per session | Nice-to-have improvement |
Viability thresholds:
If $ARGUMENTS is a path to a directory containing SKILL.md, read it directly.
Otherwise find it by name from the repo root:
PROJECT_ROOT=$(git rev-parse --show-toplevel)
find "$PROJECT_ROOT/plugins" -name "SKILL.md" | grep "$ARGUMENTS" | head -5Read the SKILL.md fully before scoring.
Reason through each dimension explicitly before assigning a number.
Objectivity (1-10)
Execution Speed (1-10)
Frequency of Use (1-10)
Potential Utility (1-10)
Determine the loop type:
Important: if a skill has both a script component and a prompt component, propose splitting into two separate loops. Label them Loop A (script) and Loop B (prompt). Score and barrier each separately.
The Spec (`program.md`): What is the optimization goal? What constraints apply? What is the NEVER STOP directive?
The Mutation Target: Which single file does the agent modify per iteration? If the skill inherently requires multi-file changes, flag this as a barrier and propose how to isolate it.
The Evaluator (`evaluate.py`):
Note: thisevaluate.pyis a script you would write when implementing the autoresearch loop for the target skill — it is NOT part of this skill. This skill only describes what it would look like. When ready to build the loop, createevaluate.pyinside the target skill'sautoresearch/directory.
Produce the assessment in this format:
## Autoresearch Fit Assessment: [Skill Name]
**Plugin:** [plugin-name]
**Skill path:** [relative path from repo root]
### Scores
| Dimension | Score | Rationale |
|---|---|---|
| Objectivity | X/10 | [one line] |
| Execution Speed | X/10 | [one line] |
| Frequency of Use | X/10 | [one line] |
| Potential Utility | X/10 | [one line] |
| **TOTAL** | **X/40** | |
**Verdict: [HIGH / MEDIUM / LOW / NOT_VIABLE]**
**Loop type: [DETERMINISTIC / LLM_IN_LOOP / HYBRID]**
### Proposed 3-File Architecture
**Spec (`program.md`):**
> [2-3 sentences: optimization goal + constraints + NEVER STOP directive]
**Mutation Target:** `[path/to/file]`
**Evaluator command:**[shell command that outputs a single number]
> Deterministic: [YES / NO + explanation]
### Key Barriers
- [Barrier 1]
- [Barrier 2 if any]
### Recommendation
[1-2 sentences. If MEDIUM: what to address first.]Then update the JSON using the update script:
DATA_JSON=$(git rev-parse --show-toplevel)/plugin-research/experiments/analyze-candidates-for-auto-reseaarch/skills/eval-autoresearch-fit/assets/resources/summary-ranked-skills.json
SKILL_DIR=.
python "$SKILL_DIR/scripts/update_ranked_skills.py" \
--json-path "$DATA_JSON" \
--plugin <plugin> \
--skill <skill> \
--objectivity X --speed X --frequency X --utility X \
--verdict HIGH|MEDIUM|LOW|NOT_VIABLE \
--loop-type DETERMINISTIC|LLM_IN_LOOP|HYBRID \
--mutation-target "path/to/file" \
--evaluator-command "python evaluate.py ..." \
--barriers "Barrier 1" "Barrier 2" \
--eval-notes "Key insight from this evaluation" \
--status EVALUATEDDATA_JSON=$(git rev-parse --show-toplevel)/plugin-research/experiments/analyze-candidates-for-auto-reseaarch/skills/eval-autoresearch-fit/assets/resources/summary-ranked-skills.json
# List all entries with current status
python ./scripts/update_ranked_skills.py --json-path "$DATA_JSON" --list
# Show a specific entry
python ./scripts/update_ranked_skills.py --json-path "$DATA_JSON" \
--plugin agent-agentic-os --skill os-eval-runner --show
# List only PENDING entries (next batch to evaluate)
python ./scripts/update_ranked_skills.py --json-path "$DATA_JSON" \
--list --filter-status PENDING
# Generate morning report (full ranked table + recommendation)
python ./scripts/update_ranked_skills.py --json-path "$DATA_JSON" --morning-reportWhen the user says "evaluate next batch" or "continue the list":
--list --filter-status PENDING to see remaining skillstotal_autoresearch_viabilityWhen a skill scores HIGH or MEDIUM, scaffold the actual autoresearch loop inside the target skill using the autoresearch/ convention. This folder lives inside the target skill directory.
Directory convention (inside the target skill):
plugins/<plugin>/skills/<skill>/
SKILL.md ← mutation target (agent edits this each iteration)
autoresearch/ ← the loop lives here
program.md ← the spec (goal + constraints + NEVER STOP)
evaluate.py ← LOCKED evaluator (agent must never modify this)
results.tsv ← experiment ledger (one row per iteration)
tasks/ ← golden task fixtures (LLM_IN_LOOP skills only)
test-fixtures/ ← deterministic inputs (DETERMINISTIC skills only)Why evaluate.py runs every iteration: The loop is: agent mutates SKILL.md → run autoresearch/evaluate.py → record metric in results.tsv → KEEP (commit) or DISCARD (git reset). evaluate.py is locked — the agent only touches the mutation target.
Cost by loop type:
Implement DETERMINISTIC candidates first where possible (fast, free, many trials).
Scaffold steps for HIGH/MEDIUM verdicts:
autoresearch/ inside the target skill directoryprogram.md from the template (goal, metric, mutation target, NEVER STOP)evaluate.py implementing the evaluator command from the assessmentresults.tsv with header: commit\tmetric\tstatus\tdescriptiontest-fixtures/ with at least one deterministic inputtasks/ with at least one human-validated golden taskplugins/ from repo root, report path before proceeding~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.