Research Experiment Analyst
SkillMonitoring & opsAnalyze experiment results: read the training logs and metrics, score a run against its plan. A PLAN_NAME resolves via exec_runs to its wkdrs/<run>/; a wkdrs/<run>/ path back-resolves to its plan; no argument lists the runs and asks. Inventories the §4 deliverables, checks EXEC_LOG's claims against
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Research Experiment Analyst skill
What this skill tells your AI
The instructions your AI receives, as published by wanghao9610/star in .agents/skills/star-expt-analyst/SKILL.md and read by ahel’s review.
Invocation: star-expt-analyst [PLAN_NAME | RUN_DIR | aggregate [PLAN_NAME] | watch [PLAN_NAME | RUN_DIR]] [DESCRIPTION]. Resolve aggregate and watch before loading the normal analysis workflow. A plan resolves through exec_runs; a run directory resolves back to its plan. With no settled target, list candidates and ask. watch is chat-only and authorizes no file write or successor action.
Shared conventions. Resolve the invocation target and mode first. Then read only the sections of docs/mds/star-workflow/research-workflow-conventions.md that the selected goal uses; load cited references/ and assets/ only when entering their branch or mode. Read .env once for the needed STAR_LANG, INVOLVE, STAR_*_MODEL, and runtime values; reuse values and convention text still visible verbatim. Resolve language under conventions §7.6: an explicit user request first, then a valid STAR_LANG, then the dialogue or invocation language; use the corresponding localized resources. SKILL_zh.md is for human readers and is never loaded at runtime. Preserve an existing document's frontmatter language. Clear natural-language instructions may select the target and scope and authorize the corresponding action; do not ask again for work already authorized.
Passing a tier model. Resolve the selected mode's PLAN, EXEC, or READ model for the current harness under conventions §10.8. Pass the resolved value when delegation accepts a per-dispatch model; use a fresh, self-contained context if model selection conflicts with full context inheritance. READ-tier collection and blind review do not inherit the producer's conversation. An empty value omits the model override and preserves the host or session default; if a configured value cannot be selected, keep the work here and state why. Never translate provider model names, invent parameters, or launch another CLI. A delegate carrying tier= does not relocate the whole run again and records its actual model from its own session provenance.
Role
Serve as the family's results auditor. star-plan-executor produces the run — code, artifacts, and a binary done-criterion verdict; star-code-reviewer audits the code that produced it; star-plan-reviser audits the plan text against execution evidence. This skill audits the results themselves: what did this run produce, did it finish, are the numbers healthy, do they meet what the plan expected, and what do they mean for the claim the plan traces to. The product is a persisted, evidence-backed analysis report. star-expt-digest reads across many of these to say what moved this period; it never re-scores a run, so a number belongs to whichever analysis first verified it.
Read and interpret; do not execute steps, fix code, revise plans, or flip plan status. Route anything the analysis finds beyond what it may write: unfinished or failed steps, and a met done-criterion still needing finalization, to star-plan-executor; plan text that no longer matches reality to star-plan-reviser; a refuted strategy to star-plan-reviser / star-plan-coach / star-plan-decomposer; a suspected code bug to star-code-reviewer; a broken environment to star-env-builder.
Core Principles
- Expectations are written down; every verdict cites one. The review rules: the sub-plan's §5 done-criteria and §4 deliverables, the root's §4 metrics and §5 kill-criteria, and any baseline the plan states. Every scored row carries {the criterion as written, the number, its source, the verdict}. Where the plan states no expectation, the row reads no stated expectation — never invent a threshold, never retrofit one to the number you found. Rubric:
references/analysis_rubric.md. - Read wide, verify every number before it enters the report. Delegate collection whenever bounded, independent, read-only reading of many or oversized logs materially helps — the main agent sizes it — by dispatching a read-only sub-agent on the READ tier's model (conventions §10.8), where the harness can name one. Every delegate follows the observation format in
references/analysis_rubric.md, never writes, and never grades the run's verdict. Re-open the cited file at the cited line for every number and every blocker/major observation before the report keeps it; downgrade or drop what does not hold up. A number in a report gets quoted into a paper. - Disk is the evidence; EXEC_LOG is a claim to corroborate. A step marked
doneis a claim until its artifact is on disk and matches what it says; a metric quoted in the log is a claim until traced back to the file that produced it. A claim without corroboration is an observation, not a fact (the reviser's discipline, applied to results). - Light parsing only; tools are evidence, never installed. Read files, grep logs, run small parsing snippets through the
.envconda env. pandas / matplotlib / tensorboard are used only if already installed; absent, the analysis narrows — text-only, no curves — and the report says so. Never install or upgrade anything (that isstar-env-builder's). - Interpret honestly; a negative result is a finding, not a failure. Say what the run shows and what it does not: one seed is not significance, a subset is not the benchmark, a metric with no baseline is not an improvement. A result that hits a root kill-criterion is a plan-level finding — report it plainly and route it. A result that looks too good gets the leakage check before the celebration.
- Strictly read-only; the STOP line applies. This skill writes only its own reports: the per-run analysis and its figures under
wkdrs/<run>/, and — in aggregate mode — the cross-run results table (wkdrs/results/results.md, orwkdrs/results/results_<slug>.mdwhen scoped). Never touch plan files,exec_status,EXEC_PLAN.md, orEXEC_LOG.md— a met criterion is recommended tostar-plan-executor, which owns finalization. Never re-run training, evaluation, or a costly API call to fill a missing metric: report it unmeasurable and hand the prepared command back to the user.
Workflow
Where this run executes. Apply the whole-run handoff in conventions §10.8 before Step 0. Normal analysis uses PLAN; aggregate and watch use READ. watch stays chat-only and ends without a writing successor.
Step 0: Resolve the run
- Read
.envand resolveCODE_NAME,CONDA_HOME,PYTHON_HOME(conventions §3). - Interpret the argument, first match wins:
aggregate, optionally followed by a plan name → aggregate mode: Step 8 only, over every run in the scope (references/aggregate_spec.md).watch, optionally followed by a plan name or run path → watch mode: Step 9 only — a chat-only quick check of a possibly still-running run; no verdict, no report file.- A
wkdrs/<run>/path → that run; back-resolve its plan via the run'sEXEC_LOG.mdfrontmattersource_plan, or the plan whoseexec_runsnames it. - A plan name (slug / numeric prefix / filename against
metds/plans/*_plan.md; ametds/plans/path counts) → that plan's current run (the lastexec_runsentry); an earlier run of the same leaf is addressed by itswkdrs/<run>/path. - A dropped subtree resolves the same way from its
dropped/locations — plan files undermetds/plans/dropped/, run dirs underwkdrs/dropped/<run>/; anexec_runsname resolves inwkdrs/first,wkdrs/dropped/second. - No argument → list every
wkdrs/*/EXEC_LOG.mdwith its run name, source plan, and logstatus, and ask one direct question about which to analyze. - Nothing matches → list the nearest plan and run candidates and ask one direct question.
- Nothing to analyze is a valid answer. If the plan has no
exec_runs, or the run directory is missing or holds no artifacts, say so and stop — route tostar-plan-executor <slug>. Never analyze a run that was never executed. - Detect sibling runs: other
wkdrs/directories whose name shares this run's<prefix>_<slug>stem (..._v2, a date suffix). List them; they feed the lightweight comparison at Step 5.
Step 1: Load the expectations
Read, in this order, and record which are absent:
- The sub-plan §1–§6 — especially §4 deliverables, §5 done-criteria, §6 local risks and fallback — plus its
traces_tofrontmatter. - The root plan at the top of the
parent:chain: its §4 metrics and §5 kill-criteria are review rules this run can hit (intermediate ancestors are sub-plans; their §5 are done-criteria). wkdrs/<run>/EXEC_PLAN.mdandEXEC_LOG.md: the step list, the bound checks, the "Awaiting user" STOP-line commands, "Pending amendments", and any recorded plan-level finding.
A missing §5 done-criterion does not block the analysis — the run cannot be scored against the plan, which is itself the report's headline and a routing signal to star-plan-decomposer or star-plan-reviser.
Step 2: Inventory & completion (dimensions A, B)
Read and follow references/analysis_rubric.md at this step:
- A — inventory: every §4 deliverable as
present/missing/unexpected, with the light integrity checks (non-empty, parses, plausible size) and layout conformance (AGENTS.md §8). - B — completion: every EXEC_LOG step claiming
donecorroborated against the artifact it names; every "Awaiting user" STOP-line command classifiedrun by the user(its output exists) orstill pending(it does not).
A run whose STOP-line commands were never executed is incomplete, and its §5 criteria are usually unmeasurable — say that early rather than scoring around it.
Step 3: Log health & metrics (dimensions C, D)
- C — log health: scan the run's logs for the fatal, numeric, and dynamics signals in the rubric. Big logs are grepped for patterns and read head-and-tail, never loaded whole (
references/analysis_rubric.md, "Reading big logs"). - D — metrics: for every metric the §5 criteria, the root §4, or a stated baseline names, extract the value from the most authoritative source available (results JSON/CSV > eval log summary > TB event file > last matching log line) and record that source. Score each criterion
met/not met/unmeasurable. - Figures (best-effort): if matplotlib is already installed in the
.envenv and the logs carry a per-step or per-epoch series worth seeing (loss, the §5 metric), render it towkdrs/<run>/analysis/<name>.pngand save its plot script beside it, so the figure is reproducible. Not installed, or no series → skip silently in chat, say in the report what was left out. Never install matplotlib to make a plot. - Scale: a small run (a handful of artifacts, no oversized log) is read locally. For a large one — many log files, or logs too big to read whole — dimension C works log file by log file, delegating selectively per Core Principle 2: dispatch a read-only sub-agent on the READ tier's model for each selected file set; each agent gets the rubric, the expectations digest, and its exact file list, and returns the structured observation format. Dimension D stays local: its source-authority ladder ranks sources against one another, so an agent holding one file cannot apply it, and the metric sources are small enough that delegating saves nothing Step 4 does not spend again immediately. One exception: a metric whose only source is a line inside an oversized log on an agent's list — that agent returns the metric row with its
source:, and Step 4 confirms it like any other. Read-only agents never write, never read outside their list, never grade the run's verdict.
Step 4: Verify
Merge and drop duplicates. For every number that will appear in the report, and every blocker/major observation: re-open the cited file at the cited line and confirm it says what the observation claims. Confirm each metric's source is the most authoritative available, and its split (train / val / test) the one the criterion means. Downgrade or drop what does not hold up. Unconfirmed observations worth a human's eye go to the report's Unconfirmed list — never into the verdict.
Step 5: Interpret & compare (dimension E)
- Interpret: does the result support or refute the claim in
traces_to? Does it match a root §5 kill-criterion, or negate an MVP "cheap early test"? Run the leakage checks the rubric lists before accepting a suspiciously strong number — where dimension C was delegated, run them against theconfig_echoeach collector returned, re-opening the cited lines only where one hits. State the run's limits explicitly (seeds, split size, what it does not show). - Compare (lightweight): if Step 0 found sibling runs, extract only their headline metrics — the ones the §5 criteria name — from their reports or logs and tabulate them beside this run's, one line saying which direction the numbers moved and against which run. Do not attribute the delta to a cause: naming why a variant won needs a controlled comparison this skill does not run. Recommend
star-plan-executorfor the next variant if the user wants one.
Step 6: Persist the report
Fill assets/expt_analysis_template.md (Chinese: assets/expt_analysis_template_zh.md; the report follows the plan's frontmatter language, else the dialogue language): scope & evidence base, verdict, done-criteria scorecard, artifacts & completion, log health, metrics & comparison (with the figures), interpretation, recommendations & routing. Write to wkdrs/<run>/EXPT_ANALYSIS_<YYYY-MM-DD>.md. Real dates only; a second analysis of the same run on the same day overwrites, on a later day writes its own file.
The run verdict is one of met / partially met / not met / inconclusive (evidence missing — e.g. STOP-line commands never run) / invalid (results exist but are untrustworthy — leakage, a crashed run marked done, a metric from the wrong split). Pick the honest one; inconclusive and invalid are real answers, not failures to reach a verdict.
Step 7: Digest & routing
Lead with the verdict, under about 500 words: the run verdict and the §5 scorecard in one line each, any blocker/major observations, the headline metrics with their sources, the sibling comparison if any, and where the figures are. Then the routing (dimension F): unfinished steps or an awaiting STOP-line command → star-plan-executor <slug>; §5 met → star-plan-executor <slug> to verify and finalize (it owns exec_status); plan text no longer true → star-plan-reviser <slug>; a kill-criterion hit or the claim refuted → star-plan-reviser (revise from evidence) / star-plan-coach (revisit method and risks) / star-plan-decomposer (re-scope); a code bug the logs suggest → star-code-reviewer <slug>; import errors or a broken env → star-env-builder. End with the report path.
Step 8: Aggregate (aggregate mode only)
aggregate [PLAN_NAME] runs this step alone — compiling every run's verified numbers into the results table and closing with its own digest — and the procedure is in references/aggregate_step.md, read with references/aggregate_spec.md when that is the mode and not before. A full analysis reads neither.
Step 9: Watch (watch mode only)
watch [PLAN_NAME | RUN_DIR] runs this step alone — a chat-only liveness and dimension-C check over a run that may still be executing, no verdict and no report file — and the procedure is in references/watch_step.md, read when that is the mode and not before.
State & File Rules
- The only writes are
wkdrs/<run>/EXPT_ANALYSIS_<YYYY-MM-DD>.md,wkdrs/<run>/analysis/when figures were rendered (the.pngfiles plus their plot scripts), and — in aggregate mode only —wkdrs/results/results.md(all plan trees) orwkdrs/results/results_<slug>.md(scoped). Nothing else, anywhere. Watch mode writes nothing — its whole product is the chat digest. - Never touch:
metds/plans/*— includingexec_status,exec_runs, andupdated;wkdrs/<run>/EXEC_PLAN.mdandEXEC_LOG.md(the executor's log is evidence, not a scratchpad — a plan-level finding is reported and routed, not written into the log);${CODE_NAME}/;metds/codearc.md;UPSTREAM.md;.env. - Never move, rename, or delete any artifact, log, or checkpoint — a run directory is the evidence base, and analysis never mutates its evidence.
- All commands run through
.env's conda env; no system python; never install or upgrade packages. Parsing snippets run inline; the only script left on disk is a figure's own plot script underanalysis/. - Nothing heavy: no training, no evaluation runs, no full-dataset passes, no costly API calls — the executor's STOP line applies here too. A metric that would need a run to obtain is
unmeasurable; hand the prepared command back to the user. - Git: read-only; this skill never commits (conventions §1).
- This skill sets no plan frontmatter and creates no run directories; its audit trail is the report file.
Dialogue Discipline
- Ask one direct question at a time where the workflow calls for it (which run to analyze, an ambiguous match) and require an explicit answer. The skill writes nothing outside its own report, so there is no confirmation point — but never state or imply that a plan, a status, or a log was changed. The report follows the plan's frontmatter
language, else the dialogue language.
Signals
- GitHub stars
- 52
- Forks
- 1
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
star-expt-analyst- Source
- github.com/wanghao9610/star