Research auto
Skill JasonCodeMaker/Agentic-Research-Control-Panel/skills/research-auto
Local control plane for governed AutoResearch in real repos: human-approved scope, live experiment tracking, evidence-backed results, and project memory for Claude Code and Codex.
npx -y skills add JasonCodeMaker/Agentic-Research-Control-Panel --skill research-autoAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 6 stars6 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Use when the user invokes /research-auto or asks to run an autonomous research campaign over one committed Direction toward a measurable gate.
SKILL.md
13.2 KB, ~3.1k tokens by cl100k_base, as published. Nobody here has run it
research-auto
Purpose
/research-auto runs a campaign over one Direction. /research-run advances one materialized
package; /research-auto decides what happens after each terminal experiment:
Direction + measurable gate
-> resolve or ratify the charter
-> materialize a package
-> run one experiment
-> verify its result
-> record the Campaign cycle
-> stop, or design the next experiment
The loop ends when verified evidence clears the Direction's gate, the cycle budget is exhausted, no legal candidate remains, or the campaign reaches a decision reserved for the user.
scripts/conductor.py owns deterministic routing, gate evaluation, Campaign cycle records, away-mode
handoff bundles, and the authority guard. It does not own Project, Direction, Experiment, Package,
Run, Learning, Rule, or Decision mutations.
Authority
The campaign adds no independent writer. The conductor submits CampaignUpdated through the
research-op management gateway. Every other mutation stays with its owning use case;
materialization also uses that gateway, while the experiment harness writes only its own Run
directory.
| Decision | Owner | Route |
|---|---|---|
| Project or Direction acceptance | human | Triage proposal, then user disposition |
| Gate, execution mode, and max cycles | human | Ratified as the campaign charter |
| New validation Experiment spec | human | Scope review and user ratification |
| Bind an accepted Experiment to a Package | agent within ratified scope | research-op --target experiments-row |
| Run launch, monitoring, and terminal result | /research-run | Experiment and Run contracts |
| Insight or package Rule | explicit editorial decision | /research-analysis |
| Package terminal transition or adoption | human acknowledgement | /research-run |
| Campaign cycle or handoff bundle | conductor | research-op campaign gateway |
The conductor never disposes Triage, commits Project or Direction scope, edits an interface file, or moves the gate after a failure.
Storage model
The workspace has one managed root:
.research/
├── state/ # authoritative events and current fold
├── audit/ # command/action audit
├── experiments/ # immutable run evidence
└── interface/ # derived human view
Campaign cycles and handoff bundles are fields of the Campaign aggregate whose id equals the
Direction id. There is no separate campaign ledger file and no separate PACK file. The Context Pack
is an ephemeral query over state; a Run freezes the exact launch context in its own
.research/experiments/<pkg>/<experiment>/<run>/context.json.
Do not edit files below .research/state/ or .research/interface/. Use bounded queries for reads
and typed commands for writes.
Resources
<pipeline-root> is the Trustworthy Research Pipeline checkout.
| Asset | Path |
|---|---|
| Campaign conductor | skills/research-auto/scripts/conductor.py |
| Admission logic | skills/research-run/scripts/admission.py |
| Scope and Triage workflow | /research-scope |
| Direction-to-package materializer | skills/research-package/scripts/create_from_scope.py |
| Mutation and query gateway | skills/research-op/scripts/research_op.py |
| Experiment evidence | .research/experiments/<pkg>/<experiment>/<run>/ |
| Human interface | .research/interface/ |
Conductor commands:
python3 skills/research-auto/scripts/conductor.py status \
--workspace . \
--direction-id <direction-id> \
--max-cycles <N> \
--mode AUTONOMOUS \
[--gate "<gate>"] \
[--no-candidate]
python3 skills/research-auto/scripts/conductor.py gate-eval \
--measured <value> \
--gate "<gate>"
python3 skills/research-auto/scripts/conductor.py append-cycle \
--workspace . \
--direction-id <direction-id> \
--record '<cycle-json>'
python3 skills/research-auto/scripts/conductor.py pack \
--workspace . \
--direction-id <direction-id> \
--bundle '<handoff-json>'
Use --research-root <path> only when the workspace intentionally overrides the default
.research root.
Charter
An invocation has four inputs:
direction: a committed Direction id such asdir/retrieval-v2, or free text that must be shaped;gate: one numeric comparator clause such asR@1 >= 48;mode:USER_GUIDEDorAUTONOMOUS;max-cycles: a positive campaign budget, default 5.
For a committed Direction, its spec.success_gate is authoritative. If the invocation supplies a
different gate, submit a Direction revision through Triage and pause. Do not override the committed
gate in Campaign state.
Procedure
0. Read admission state
Use the state-backed /research-run admission logic. The generated interface is not an execution
prerequisite.
import sys
sys.path.insert(0, "<pipeline-root>/skills/research-run/scripts")
import admission
context = admission.build_research_context(".")
state = admission.detect_admission_state(".")
actions = admission.build_admission_actions(
state,
{
"pending": context["pending_proposals"],
"direction_id": (context["direction"] or {}).get("id"),
},
root=".",
)
Route missing prerequisites as follows:
NO_PROJECT: hand off to/research-onboardand pause.NO_DIRECTION: shape and ratify the campaign Direction in step 1.NO_EXPERIMENTorNO_PACKAGE: continue to campaign design and materialization.NOT_READYorREADY: continue through the normal/research-runpath.
Surface any returned next_step object without paraphrasing its authority boundary.
1. Resolve the charter
Run:
python3 skills/research-auto/scripts/conductor.py status \
--workspace . \
--direction-id <direction-id> \
--max-cycles <N> \
--mode AUTONOMOUS \
--gate "<gate>"
Handle action.type:
FORM_DIRECTION: invoke/research-brainstorm, then submit the Direction, gate, mode, and cycle budget through Triage. Use the single semantic review fromresearch-scopeand pause for ratification.AWAIT_RATIFICATION: if the semantic review has not been shown, show it once throughresearch-scope; otherwise report that the user decision is still pending without repeating the proposal or exposing its id and hash.ASK_USER: ask for a gate with one comparator clause.- any other route: the committed charter is usable.
2. Materialize package scope
For MATERIALIZE_PACKAGE, first make sure the Direction has accepted Scope Experiments.
- Shape each formal
level=experimentnode with onlypurpose,config_ref, andgate. Use/research-scopeto review and ratify missing Experiments. Campaigns never commit their own Scope, including inAUTONOMOUSmode.
Then check materialization:
python3 skills/research-package/scripts/create_from_scope.py \
--workspace . \
--direction-id <direction-id> \
--check \
--json
If materializable is true:
python3 skills/research-package/scripts/create_from_scope.py \
--workspace . \
--direction-id <direction-id>
For a later campaign package under the same Direction, provide a fresh
--id <YYYY-MM-DD>-<slug>-c<N>. Never reopen a terminal package by editing its projection.
3. Execute one route at a time
Re-run status after every accepted action.
RUN_PACKAGE: delegate the open package to/research-run. That skill owns readiness, resource allocation, launch, monitoring, result verification, and terminal routing.DESIGN_EXPERIMENT: follow the design procedure below.SUCCESS_EXIT,HALT_BUDGET,HALT_NO_CANDIDATE, orASK_USER: go to step 5.
Do not reproduce /research-run logic inside the conductor.
4. Design and harvest a cycle
For DESIGN_EXPERIMENT, query the current Context Pack through the gateway:
python3 skills/research-op/scripts/research_op.py \
context <package-id> \
--workspace .
The query is ephemeral. Use its Project, Direction, package controls, Experiment specs, pending Decisions, applicable Rules and Learnings, failed methods, and evidence references. Pending proposals are collision warnings, not accepted Scope.
Draft the next hypothesis from that context and verified run evidence. If several candidates remain plausible, rank them independently. First ratify the new Experiment through Scope. Then bind that same accepted aggregate to the Package:
python3 skills/research-op/scripts/research_op.py \
--workspace . \
--pkg <package-id> \
--op insert \
--target experiments-row \
--payload '{
"scope_experiment_id":"experiment/<direction>/reranker-variant",
"local_id":"P3",
"status":"READY",
"output":".research/experiments/<package-id>/P3/<run-id>/result.json"
}'
experiments-row binds execution metadata only. It rejects purpose, config_ref, gate,
or a copied spec. Do not attach an Experiment to invented or pending scope.
When /research-run reaches a terminal Run:
- read the verdict and measured value from the finalized result;
- evaluate the campaign gate with
conductor.py gate-eval; - record useful mechanism-level learning through
/research-analysis; - append the witnessed Campaign cycle.
The cycle command requires an existing Package, Experiment, and terminal Run:
python3 skills/research-auto/scripts/conductor.py append-cycle \
--workspace . \
--direction-id <direction-id> \
--record '{
"cycle":3,
"direction_id":"<direction-id>",
"pkg_id":"<package-id>",
"exp_id":"P3",
"run_id":"<run-id>",
"hypothesis":"The reranker improves recall under fixed controls.",
"verdict":"FAIL",
"measured":"46.1",
"gate_eval":"FAIL",
"evidence":".research/experiments/<pkg>/P3/<run-id>/result.json",
"next_action":"DESIGN_EXPERIMENT"
}'
append-cycle rejects incomplete records, illegal verdicts, a non-terminal Run, mismatched ownership,
duplicate cycle numbers, and gate_eval=PASS without verdict=PASS.
When a campaign stops or hands off, append a compact handoff bundle after the cycle:
python3 skills/research-auto/scripts/conductor.py pack \
--workspace . \
--direction-id <direction-id> \
--bundle '{
"attempted":"cycle 3: P3 reranker",
"found":"FAIL, 46.1 against R@1 >= 48",
"hypothesis_state":"unsupported",
"next_action":"DESIGN_EXPERIMENT",
"blocking_decision":"none"
}'
This bundle is part of the Campaign aggregate. It is not a second context store.
5. Exit
Build the report from Campaign cycles and referenced run evidence.
SUCCESS_EXIT: require a recordedgate_eval=PASS,verdict=PASS, and resolvable evidence. Let/research-runhandle the package transition and T1 acknowledgement. Adoption remains a human decision.HALT_BUDGET: report the exhausted budget, propose extend, revise, or archive through Triage, then pause.HALT_NO_CANDIDATE: report why no legal Experiment remains, propose a scope revision or archive, then pause.ASK_USER: ask the single blocking question.
Every exit report includes cycles used, each hypothesis and verdict, measured value against the gate,
evidence path, queued acknowledgements, and the route's next_step.
Directive changes
A user instruction that changes constraints, metrics, baselines, or experiment design is a
DIRECTIVE_CHANGE. Route it to its typed owner in the same turn and re-run status.
- Package or Experiment changes go through
research-op. - Direction changes become Triage proposals and pause.
- Scope or Execution Lease mode changes require a new user-reviewed authority boundary.
The campaign never rewrites its own charter.
Output contract
| Output | Authoritative home | Writer |
|---|---|---|
| Campaign cycles and handoff bundles | Campaign aggregate in .research/state/ | conductor through research-op |
| Project, Direction, Experiment, Package, Decision, Learning, Rule | unified research state | owning use case through research-op |
| Run context, logs, metrics, and result | .research/experiments/<pkg>/<experiment>/<run>/ | experiment runtime |
| Command audit | .research/audit/actions.jsonl | management gateway |
| Human pages | .research/interface/ | lib.interface atomic rebuild |
Done condition
The campaign is complete only when one of these conditions holds:
- a witnessed Campaign cycle records
gate_eval=PASS, and/research-runhas completed terminal routing with its acknowledgement collected or queued; - a halt route has produced its report and Triage proposal;
ASK_USERhas surfaced the blocking question.
An open Run is not a stopping condition. Continue monitoring through /research-run.
Error path
| Symptom | Action |
|---|---|
GateUnparseable | Ask for one numeric comparator clause |
validate_campaign_action rejects | Drop the action and use the Triage pause route |
append-cycle rejects | Repair the record from authoritative Run state; do not invent evidence |
create_from_scope --check returns a handoff | Surface its nextSkill and nextAction |
research-op rejects | Read the structured rule and repair the payload |
| No legal Experiment remains | Route HALT_NO_CANDIDATE and propose a scope decision |
What ships with it: 1 file
18.9 KB alongside SKILL.md, 1 of them executable
scripts/
- conductor.pyruns18.9 KB
Gives 0 of the 12 instructions most research analysis skills give in ~3.1k tokens
Counted across 1,063 of the 1,754 authors here whose files we hold, read 2026-08-07
- Generate a markdown reportin 32 of 1063, across 23 files
- Cite each claim's sourcein 30 of 1063, across 15 files
- Define the ideal customer profilein 20 of 1063, across 2 files
- Search for companies matching the criteriain 20 of 1063, across 2 files
- Assign a fit score from one to tenin 20 of 1063, across 2 files
- Analyze the codebase to understand the productin 19 of 1063, across 1 file
- Ask clarifying questions about the value propositionin 19 of 1063, across 1 file
- Look for signals of immediate needin 19 of 1063, across 1 file
- Identify the target decision maker rolein 19 of 1063, across 1 file
- Suggest a personalized contact strategyin 19 of 1063, across 1 file
- Provide conversation starters for outreachin 19 of 1063, across 1 file
- Format results in a scannable markdown templatein 19 of 1063, across 1 file
Said here and by no other author read
- run one experiment per cycle
- verify experiment result against gate
- record campaign cycle after terminal run
- stop when gate is cleared or budget is exhausted
- use state-backed admission logic to read prerequisites
- submit differing gates as a direction revision and pause
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.