Skip to content
Back to skills

Autoresearch

ASecurity

Iteratively improve a Stream Deck profile by invoking the autoresearch-driver subagent, scoring each iteration, and keeping improvements. Usage - /autoresearch profile <app-name> [--max-iter N]. Default 10 iterations. Requires the opendeck MCP server and data/shortcuts/<app>.json.

  • 5 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added August 30, 2026
ai-agentsbashnodegit

Works with

  • claude desktop
  • mcp

Security analysis

A93/100
  • highPerforms destructive filesystem operations

Pro shows the line behind each finding and how to fix it

Scanned August 30, 2026

npx -y skills add thisis-romar/opendeck-factory --skill autoresearch --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Autoresearch?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Autoresearch
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/thisis-romar-autoresearch/badge)](https://www.skillsdirectory.com/skills/thisis-romar-autoresearch)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: autoresearch
description: Iteratively improve a Stream Deck profile by invoking the autoresearch-driver subagent, scoring each iteration, and keeping improvements. Usage - /autoresearch profile <app-name> [--max-iter N]. Default 10 iterations. Requires the opendeck MCP server and data/shortcuts/<app>.json.
version: 0.1.0
lastmod: 2026-04-27T00:00:00Z
---

# /autoresearch

Iterative profile optimizer implementing the Karpathy autoresearch pattern:

```
subagent edits profile
    ↓
locked scorer measures it
    ↓
improvement kept / regression reverted
    ↓
repeat N times
```

## Usage

```
/autoresearch profile <app-name> [--max-iter N]
```

- `<app-name>` — matches `data/shortcuts/<app>.json` and `profiles/<app>/`
- `--max-iter N` — iteration budget (default: 10)

## What You Must Do When Invoked

### 1 — Parse arguments

Extract `app` and `maxIter` (default 10) from the invocation. If `profile` keyword is absent or `app` is missing, print usage and stop.

### 2 — Pre-flight checks

Run all four checks before starting the loop. Stop on any failure.

```bash
# a. Shortcuts file exists?
test -f data/shortcuts/<app>.json || echo "MISSING: data/shortcuts/<app>.json"

# b. Profile dir exists?
test -d profiles/<app> || echo "MISSING: profiles/<app>/"

# c. MCP server responds?
# Call mcp__opendeck__list_profile with profiles/<app> — if it errors, print guidance
# to start Claude Desktop or check claude_desktop_config.json

# d. Baseline score
node scripts/autoresearch/score.mjs profiles/<app> data/shortcuts/<app>.json
```

Print the baseline breakdown before the loop.

### 3 — Loop (i = 1 to maxIter)

**Step A — Snapshot** (Bash):
```bash
rm -rf autoresearch/snapshot
cp -r profiles/<app> autoresearch/snapshot
```

**Step B — Invoke subagent** via Agent tool (subagent_type: `autoresearch-driver`):

Pass this prompt (substitute live values):
```
App: <app>
Profile dir: profiles/<app>
Shortcuts file: data/shortcuts/<app>.json
Score file: autoresearch/score.json
Current score breakdown: <contents of autoresearch/score.json>
Iteration: <i> of <maxIter>
History: <last 3 lines from autoresearch/profile-history.jsonl, or "none">
Make one targeted improvement to profiles/<app>/ that lifts the lowest-scoring metric.
```

**Step C — Score** (Bash):
```bash
node scripts/autoresearch/score.mjs profiles/<app> data/shortcuts/<app>.json
```
Read `new_score` from `autoresearch/score.json`.

**Step D — Keep or revert**:

If `new_score > best_score`:
```bash
rm -rf autoresearch/best/<app>
mkdir -p autoresearch/best
cp -r profiles/<app> autoresearch/best/<app>
```
Append kept record to `autoresearch/profile-history.jsonl`:
```
{"iteration":<i>,"score":<new_score>,"delta":<new_score - best_score>,"kept":true,"change":"<CHANGE line>"}
```
Update `best_score = new_score`.

Else:
```bash
rm -rf profiles/<app>
cp -r autoresearch/snapshot profiles/<app>
```
Append reverted record to `autoresearch/profile-history.jsonl`:
```
{"iteration":<i>,"score":<new_score>,"delta":<new_score - best_score>,"kept":false,"change":"<CHANGE line>"}
```

**Step E — Early stop check**:

If the last 3 iterations all returned `CHANGE: none`, stop early and print: "Early stop: profile appears locally optimal."

**Step F — Tier 3 live test** (every 5th iteration + final iteration only):

Call `mcp__opendeck__live_test_profile` with `builds/<app>.streamDeckProfile`. Log mismatches as warnings but do NOT count them against the score.

### 4 — Final report

Print:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Autoresearch complete: <app>
Baseline → Best: <baseline> → <best> (<+delta>)
  coverage:   <old> → <new>
  p1Density:  <old> → <new>
  coherence:  <old> → <new>
Iterations: <total> (<kept> kept, <reverted> reverted)
Best profile: autoresearch/best/<app>/
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```

Then ask: "Pack and install the best profile? (y/n)"  
If yes: `mcp__opendeck__pack_profile` + `mcp__opendeck__live_test_profile`.

## Filesystem layout (all gitignored)

```
autoresearch/
  score.json              ← current scorer output (overwritten each iteration)
  profile-history.jsonl   ← one JSON line per iteration
  snapshot/               ← pre-iteration backup for revert
  best/<app>/             ← best profile found so far
```

## Notes

- Token cost: ~5K tokens per iteration (subagent context + MCP outputs + scorer). A 10-iter run uses ~50K tokens.
- `live_test_profile` requires Stream Deck app installed and a device connected. Skip gracefully if absent.
- Subagent does NOT generate icons — rearranges existing buttons only. Run `npm run generate:icons` separately for new icon needs.
- See `autoresearch/program.md` for the research strategy the subagent follows.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.