analyze-results
Skill69 starsChanged 7 months agoMITView on GitHub
Turn raw experiment outputs into publication-ready figures, tables, and statistical analysis. Use when asked to "analyze results", "make figures", "create tables", or "visualize experiments". Proactively invoke after /experiment produces results.
- Installs packages
10 other projects use a version of this.
Adopted by
Most recently taken up by
- Seraght/claude-skillstheir own version, first seen Oct 25, 2026
- MacroMan5/autotrain-yolotheir own version, first seen Oct 25, 2026
- yvesory/academic-research-suitetheir own version, first seen Oct 9, 2026
- talhaMah56/claude_skillstheir own version, first seen Sep 12, 2026
- EarthOnlinePlayer5732/my-skillstheir own version, first seen Aug 11, 2026
- wanshuiyin/Auto-claude-code-research-in-sleeptheir own version, first seen Jul 15, 2026
Other versions10 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 10
- wanshuiyin/Auto-claude-code-research-in-sleep★ 19ksame name
- zjunlp/Mechanist★ 75same name
- Chanw-research/claude-code-paper-writing★ 42same name
- EarthOnlinePlayer5732/my-skills★ 17same name
- yvesory/academic-research-suite★ 9same name
- MacroMan5/autotrain-yolo★ 8same name
- Yusong-Enceladus/claude-skills★ 8same name
- raja21068/AutoResearch★ 2same name
- Seraght/claude-skills★ 0same name
- talhaMah56/claude_skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository9 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- experimentSkill
- lit-reviewSkill
- novelty-checkSkill
- researchSkill
- rstack-upgradeSkill
- setupSkill
- rstackSkill
- write-paperSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
20 rules. 0 are common, 8 are distinctive, and 12 are very specific to this project.
0
Common
Most of the 9 edited versions we read keep these.
8
Distinctive
This author's own choices. Worth a look.
12
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 76
If output shows UPGRADE_AVAILABLE <old> <new>: read rstack-upgrade/SKILL.md and follow the "Inline Upgrade Flow".
- Very specific: line 77
If output shows JUST_UPGRADED <from> <to>: tell user "Running RStack v{to} (just updated!)" and continue.
- Very specific: line 79
If output shows NEEDS_SETUP: tell user to run /setup first.
- Very specific: line 81
If TEL_PROMPTED is no: Ask the user about telemetry.
- Very specific: line 92
If A: run rstack-config set telemetry community
- Distinctive: line 94
If B: ask a follow-up:
- Very specific: line 101
If B→A: run rstack-config set telemetry anonymous If B→B: run rstack-config set telemetry off
- Very specific: line 102
If B→B: run rstack-config set telemetry off
- Very specific: line 121
Read .rstack/experiments.jsonl.
- Very specific: line 122
Read results/ directory to find raw outputs (metrics.json, figures/, stdout.log for each run).
- Distinctive: line 127
Create a LaTeX-formatted comparison table comparing all experiment runs:
- Distinctive: line 132
Read from experiments.jsonl.
- Very specific: line 134
Write table source to analysis/tables/comparison.tex.
- Very specific: line 154
Write a Python script to analysis/scripts/fig_{name}.py
- Very specific: line 158
If matplotlib is not installed, run pip install matplotlib first.
- Distinctive: line 194
Never invent data points. Every number comes from experiments.jsonl or results/ files.
- Distinctive: line 195
Always generate both PNG and PDF versions of figures (PNG for preview, PDF for LaTeX).
- Distinctive: line 196
Use clean, publication-quality style: no gridlines, readable fonts, proper axis labels.
- Distinctive: line 197
If only one experiment run exists, skip ablation charts and note "single run, no comparison possible."
- Distinctive: line 203
After the skill workflow completes (success, error, or abort), log the telemetry event.
“Common” is measured: kept by at least 6 in 10 of the 9 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Preamble (run first)
# --- GENERATED PREAMBLE START ---
_PROJECT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
if ! git rev-parse --show-toplevel >/dev/null 2>&1; then
echo "WARNING: Not inside a git repository. Files will be written to $(pwd)."
fi
mkdir -p ~/.rstack/sessions ~/.rstack/analytics "$_PROJECT_ROOT/.rstack"
touch ~/.rstack/sessions/"$PPID"
find ~/.rstack/sessions -mmin +120 -type f -delete 2>/dev/null || true
_SESSIONS=$(find ~/.rstack/sessions -mmin -120 -type f 2>/dev/null | wc -l | tr -d ' ')
_RSTACK_DIR="$(cd "$(dirname "$0")/.." 2>/dev/null && pwd || echo "$HOME/.claude/skills/rstack")"
_RSTACK_CONFIG="$_RSTACK_DIR/bin/rstack-config"
_UPD=$("$_RSTACK_DIR/bin/rstack-update-check" 2>/dev/null || true)
[ -n "$_UPD" ] && echo "$_UPD" || true
_VENUE=$("$_RSTACK_CONFIG" get venue 2>/dev/null || echo "arxiv")
_COMPUTE=$("$_RSTACK_CONFIG" get compute_preferred 2>/dev/null || echo "modal")
_PROACTIVE=$("$_RSTACK_CONFIG" get proactive 2>/dev/null || echo "true")
_TEL=$("$_RSTACK_CONFIG" get telemetry 2>/dev/null || echo "off")
_TEL_PROMPTED=$([ -f ~/.rstack/.telemetry-prompted ] && echo "yes" || echo "no")
_BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
echo "PROJECT_ROOT: $_PROJECT_ROOT"
echo "BRANCH: $_BRANCH"
echo "VENUE: $_VENUE"
echo "COMPUTE: $_COMPUTE"
echo "PROACTIVE: $_PROACTIVE"
if [ ! -f ~/.rstack/.setup-complete ]; then
echo "NEEDS_SETUP"
fi
_TEL_START=$(date +%s)
_SESSION_ID="$$-$(date +%s)"
echo "TELEMETRY: ${_TEL:-off}"
echo "TEL_PROMPTED: $_TEL_PROMPTED"
if [ "$_TEL" != "off" ]; then
echo '{"skill":"analyze-results","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","repo":"'$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || echo "unknown")'"}' >> ~/.rstack/analytics/skill-usage.jsonl 2>/dev/null || true
fi
if [ "$_TEL" != "off" ]; then
echo '{"skill":"analyze-results","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","session_id":"'"$_SESSION_ID"'","rstack_version":"'"$(cat "$_RSTACK_DIR/VERSION" 2>/dev/null | tr -d "[:space:]" || echo "unknown")"'"}' > ~/.rstack/analytics/.pending-"$_SESSION_ID" 2>/dev/null || true
fi
for _PF in $(find ~/.rstack/analytics -maxdepth 1 -name '.pending-*' 2>/dev/null); do
if [ -f "$_PF" ]; then
_PF_BASE="$(basename "$_PF")"
_PF_SID="${_PF_BASE#.pending-}"
[ "$_PF_SID" = "$_SESSION_ID" ] && continue
if [ "$_TEL" != "off" ] && [ -x "$_RSTACK_DIR/bin/rstack-telemetry-log" ]; then
"$_RSTACK_DIR/bin/rstack-telemetry-log" --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true
fi
rm -f "$_PF" 2>/dev/null || true
fi
break
done
eval "$("$_RSTACK_DIR/bin/rstack-slug" 2>/dev/null)" 2>/dev/null || true
echo "SLUG: ${SLUG:-unknown}"
# --- GENERATED PREAMBLE END ---If output shows UPGRADE_AVAILABLE <old> <new>: read rstack-upgrade/SKILL.md and follow the "Inline Upgrade Flow". Then continue with this skill.
If output shows JUST_UPGRADED <from> <to>: tell user "Running RStack v{to} (just updated!)" and continue.
If output shows NEEDS_SETUP: tell user to run /setup first.
If TEL_PROMPTED is no: Ask the user about telemetry. Use AskUserQuestion:
Help RStack get better! Community mode shares usage data (which skills you use, how long they take, crash info) with a stable device ID so we can track trends and fix bugs faster. No code, file paths, or repo names are ever sent. Change anytime with
rstack-config set telemetry off.
Options:
- A) Help RStack get better! (recommended)
- B) No thanks
If A: run rstack-config set telemetry community
If B: ask a follow-up:
How about anonymous mode? Just a counter that helps us know if anyone's out there.
Options:
- A) Sure, anonymous is fine
- B) No thanks, fully off
If B→A: run rstack-config set telemetry anonymous
If B→B: run rstack-config set telemetry off
Always run:
touch ~/.rstack/.telemetry-promptedThis only happens once. If TEL_PROMPTED is yes, skip this entirely.
Important: Note the PROJECT_ROOT value from the preamble output. All file paths below are relative to this project root directory. Work products (analysis/, figures) go at the project root. Plumbing (.rstack/experiments.jsonl) goes in the .rstack/ subdirectory.
Step 0: Load Experiment Data
First, create output directories:
_PROJECT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
mkdir -p "$_PROJECT_ROOT/analysis/figures" "$_PROJECT_ROOT/analysis/tables" "$_PROJECT_ROOT/analysis/scripts"- Read
.rstack/experiments.jsonl. If it does not exist or is empty, tell user: "No experiment results found. Run /experiment first or provide results manually." - Read
results/directory to find raw outputs (metrics.json, figures/, stdout.log for each run). - Count completed runs. If fewer than 2, warn: "Only {N} completed runs. Results may not be meaningful. Consider running more experiments."
Step 1: Generate Comparison Table
Create a LaTeX-formatted comparison table comparing all experiment runs:
| Run | Hypothesis | Metric | Value | Improved? | Duration |
Read from experiments.jsonl. Include baseline (first run or user-specified baseline) and all subsequent runs. Highlight the best result.
Write table source to analysis/tables/comparison.tex.
Step 2: Generate Figures
For each visualization needed, generate a self-contained Python matplotlib script and run it locally:
Training curves (if metrics.json contains per-epoch data):
import matplotlib.pyplot as plt
import json
# Read metrics, plot loss/accuracy curves, save to analysis/figures/Ablation chart (if multiple experiment variants exist):
- Bar chart comparing metric across runs
- Error bars if multiple seeds were used
Other figures as appropriate for the experiment type (confusion matrix, attention maps, etc.).
For each figure:
- Write a Python script to
analysis/scripts/fig_{name}.py - Run it:
python analysis/scripts/fig_{name}.py - Output PNG + PDF to
analysis/figures/
If matplotlib is not installed, run pip install matplotlib first.
Step 3: Statistical Summary
Write analysis/stats.json with:
{
"total_runs": 5,
"completed_runs": 4,
"failed_runs": 1,
"best_run": "run-003",
"best_metric": {"name": "val_loss", "value": 0.342},
"baseline_metric": {"name": "val_loss", "value": 0.456},
"improvement": "25.0%",
"figures_generated": ["loss_curve.png", "ablation.png"],
"tables_generated": ["comparison.tex"]
}Step 4: Human Checkpoint
Show the user:
- Summary table (text format)
- List of generated figures (read and display the PNGs)
- Key finding: "Best result: {metric} = {value} (run-{N}), {X}% improvement over baseline"
Use AskUserQuestion:
Figures and tables generated. {N} figures, {M} tables. Best result: {metric_name} = {value} ({improvement}% vs baseline).
A) Looks good — proceed to paper writing B) Re-run analysis with different parameters C) Need more experiments first
Important Rules
- Never invent data points. Every number comes from experiments.jsonl or results/ files.
- Always generate both PNG and PDF versions of figures (PNG for preview, PDF for LaTeX).
- Use clean, publication-quality style: no gridlines, readable fonts, proper axis labels.
- If only one experiment run exists, skip ablation charts and note "single run, no comparison possible."
Telemetry (run last)
After the skill workflow completes (success, error, or abort), log the telemetry event.
# --- GENERATED EPILOGUE START ---
_TEL_END=$(date +%s)
_TEL_DUR=$(( _TEL_END - _TEL_START ))
rm -f ~/.rstack/analytics/.pending-"$_SESSION_ID" 2>/dev/null || true
if [ "$_TEL" != "off" ]; then
echo '{"skill":"analyze-results","duration_s":"'"$_TEL_DUR"'","outcome":"OUTCOME","session":"'"$_SESSION_ID"'","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'"}' >> ~/.rstack/analytics/skill-usage.jsonl 2>/dev/null || true
fi
if [ "$_TEL" != "off" ] && [ -x "$_RSTACK_DIR/bin/rstack-telemetry-log" ]; then
"$_RSTACK_DIR/bin/rstack-telemetry-log" \
--skill "analyze-results" --duration "$_TEL_DUR" --outcome "OUTCOME" \
--session-id "$_SESSION_ID" --pipeline-stage "analyze-results" 2>/dev/null &
fi
# --- GENERATED EPILOGUE END ---Replace OUTCOME with success/error/abort based on the workflow result.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

