/evaluate
Compare baseline and new implementation results. Produce the machine-readable final report `result.json`, update `experiments.json`, and append a row to `comparison.json`.
$ npx -y skills add Upsonic/Upsonic --skill evaluate --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/evaluate
Context preview
The summary Claude sees to decide when to auto-load this skill.
Compare baseline and new implementation results. Produce the machine-readable final report `result.json`, update `experiments.json`, and append a row to `comparison.json`.
SKILL.md
evaluate.SKILL.mdEvaluate Skill
Purpose
Compare baseline and new implementation results. Produce the machine-readable final report `result.json`, update `experiments.json`, and append a row to `comparison.json`.
When to Use
Phase 5 — after the new implementation is complete and metrics are collected.
Input
| Parameter | Type | Description | |-----------|------|-------------| | experiment_path | path | `experiments/{research_name}/` | | research_name | string | Name of this experiment |
Actions
1. **Collect all metrics** from `log.json` (Phase 3 baseline entry + Phase 4 new method entry).
2. **Determine verdict:**
- `BETTER`: new method outperforms baseline on the majority of key metrics
- `WORSE`: new method underperforms baseline on the majority of key metrics
- `INCONCLUSIVE`: mixed results or differences within noise margin
- `FAILED`: experiment could not produce comparable results (dependency failure, implementation crash, data incompatibility)
3. **Write `{experiment_path}/result.json`** in the exact schema below. Always valid JSON; never leave fields undefined — use `null` for unknown values.
{
"name": "{research_name}",
"verdict": "BETTER",
"summary": "2-3 paragraphs explaining what the new method does, how it fundamentally differs from the baseline, and what trade-offs it makes.",
"explanation": "2-3 sentences explaining WHY this verdict was reached. Reference specific metrics and their differences. Be concrete — mention numbers, not vague statements.",
"comparison": {
"metrics": [
{
"name": "accuracy",
"current": 0.853,
"new": 0.872,
"diff": 0.019,
"diff_display": "+0.019",
"unit": null,
"higher_is_better": true,
"better": "new"
},
{
"name": "training_time_seconds",
"current": 2.0,
"new": 45.0,
"diff": 43.0,
"diff_display": "+43.0",
"unit": "seconds",
"higher_is_better": false,
"better": "current"
}
]
},
"file_locations": {
"current_notebook": "experiments/{research_name}/current.ipynb",
"current_data": "experiments/{research_name}/current_data/",
"new_notebook": "experiments/{research_name}/new.ipynb",
"research_source": "experiments/{research_name}/research.pdf",
"experiment_log": "experiments/{research_name}/log.json"
}
}Field rules
- `verdict`: exactly one of `"BETTER"`, `"WORSE"`, `"INCONCLUSIVE"`, `"FAILED"`.
- `summary` / `explanation`: plain text, no markdown headings. Short paragraphs only.
- `comparison.metrics[]`:
- `current` / `new` are numbers (or `null` if a side could not compute the metric).
- `diff = new - current` (raw number). `diff_display` is the short string with sign (`"+0.019"`, `"-0.03"`).
- `better`: `"new"` | `"current"` | `"tie"` | `null` — computed from `diff` and `higher_is_better`.
- `unit` is a short unit string (`"seconds"`, `"%"`, etc.) or `null`.
- `file_locations` uses paths relative to the experiments directory root. `research_source` must match whatever Phase 0 materialized — `research.pdf`, `research_source.{ext}`, or the `research_source/` directory for a cloned repo.
4. **Update `experiments/experiments.json`:**
- Set `status` to `"completed"` (or `"failed"` if the experiment failed).
- Fill in `verdict`, `key_metric`, `baseline_model`, `new_method`.
- `key_metric` is an object: `{"name": "...", "baseline": <num>, "new": <num>}`.
5. **Update `experiments/comparison.json`:**
- If the file does not exist, create it with `{"experiments": []}`.
- Append an entry:
{
"name": "{research_name}",
"date": "YYYY-MM-DD",
"baseline": "{baseline_model}",
"new_method": "{new_method}",
"key_metric": {"name": "accuracy", "baseline": 0.853, "new": 0.872},
"verdict": "BETTER"
}6. **Update `{experiment_path}/log.json`** — append a Phase 5 entry:
{
"name": "Phase 5: Evaluate",
"completed_at": "2026-04-17T11:40:00Z",
"verdict": "BETTER",
"key_change": "accuracy +0.019 (new > current)",
"files_written": ["result.json", "experiments.json", "comparison.json"]
}Output
- `{experiment_path}/result.json` — the final machine-readable report.
- `experiments/experiments.json` — updated with this experiment's final verdict.
- `experiments/comparison.json` — new row appended.
- `log.json` — finalized with Phase 5 entry.
Read more
Evaluate Skill
Purpose
Compare baseline and new implementation results. Produce the machine-readable final report `result.json`, update `experiments.json`, and append a row to `comparison.json`.
When to Use
Phase 5 — after the new implementation is complete and metrics are collected.
Input
| Parameter | Type | Description | |-----------|------|-------------| | experiment_path | path | `experiments/{research_name}/` | | research_name | string | Name of this experiment |
Actions
1. **Collect all metrics** from `log.json` (Phase 3 baseline entry + Phase 4 new method entry).
2. **Determine verdict:**
- `BETTER`: new method outperforms baseline on the majority of key metrics
- `WORSE`: new method underperforms baseline on the majority of key metrics
- `INCONCLUSIVE`: mixed results or differences within noise margin
- `FAILED`: experiment could not produce comparable results (dependency failure, implementation crash, data incompatibility)
3. **Write `{experiment_path}/result.json`** in the exact schema below. Always valid JSON; never leave fields undefined — use `null` for unknown values.
{
"name": "{research_name}",
"verdict": "BETTER",
"summary": "2-3 paragraphs explaining what the new method does, how it fundamentally differs from the baseline, and what trade-offs it makes.",
"explanation": "2-3 sentences explaining WHY this verdict was reached. Reference specific metrics and their differences. Be concrete — mention numbers, not vague statements.",
"comparison": {
"metrics": [
{
"name": "accuracy",
"current": 0.853,
"new": 0.872,
"diff": 0.019,
"diff_display": "+0.019",
"unit": null,
"higher_is_better": true,
"better": "new"
},
{
"name": "training_time_seconds",
"current": 2.0,
"new": 45.0,
"diff": 43.0,
"diff_display": "+43.0",
"unit": "seconds",
"higher_is_better": false,
"better": "current"
}
]
},
"file_locations": {
"current_notebook": "experiments/{research_name}/current.ipynb",
"current_data": "experiments/{research_name}/current_data/",
"new_notebook": "experiments/{research_name}/new.ipynb",
"research_source": "experiments/{research_name}/research.pdf",
"experiment_log": "experiments/{research_name}/log.json"
}
}Field rules
- `verdict`: exactly one of `"BETTER"`, `"WORSE"`, `"INCONCLUSIVE"`, `"FAILED"`.
- `summary` / `explanation`: plain text, no markdown headings. Short paragraphs only.
- `comparison.metrics[]`:
- `current` / `new` are numbers (or `null` if a side could not compute the metric).
- `diff = new - current` (raw number). `diff_display` is the short string with sign (`"+0.019"`, `"-0.03"`).
- `better`: `"new"` | `"current"` | `"tie"` | `null` — computed from `diff` and `higher_is_better`.
- `unit` is a short unit string (`"seconds"`, `"%"`, etc.) or `null`.
- `file_locations` uses paths relative to the experiments directory root. `research_source` must match whatever Phase 0 materialized — `research.pdf`, `research_source.{ext}`, or the `research_source/` directory for a cloned repo.
4. **Update `experiments/experiments.json`:**
- Set `status` to `"completed"` (or `"failed"` if the experiment failed).
- Fill in `verdict`, `key_metric`, `baseline_model`, `new_method`.
- `key_metric` is an object: `{"name": "...", "baseline": <num>, "new": <num>}`.
5. **Update `experiments/comparison.json`:**
- If the file does not exist, create it with `{"experiments": []}`.
- Append an entry:
{
"name": "{research_name}",
"date": "YYYY-MM-DD",
"baseline": "{baseline_model}",
"new_method": "{new_method}",
"key_metric": {"name": "accuracy", "baseline": 0.853, "new": 0.872},
"verdict": "BETTER"
}6. **Update `{experiment_path}/log.json`** — append a Phase 5 entry:
{
"name": "Phase 5: Evaluate",
"completed_at": "2026-04-17T11:40:00Z",
"verdict": "BETTER",
"key_change": "accuracy +0.019 (new > current)",
"files_written": ["result.json", "experiments.json", "comparison.json"]
}Output
- `{experiment_path}/result.json` — the final machine-readable report.
- `experiments/experiments.json` — updated with this experiment's final verdict.
- `experiments/comparison.json` — new row appended.
- `log.json` — finalized with Phase 5 entry.
Other skills on upsonic.
- /analyze_current
Read and understand the current baseline implementation. Extract all relevant information about the existing approach without modifying anything, and record the analysis as a structured JSON entry.
Open skill - /benchmark
Define the comparison metrics and extract baseline values from the current implementation. Record them as a structured JSON entry so downstream phases and final evaluation can read them directly.
Open skill - /experiment_management
Set up and manage the experiment folder structure. This is Phase 0 — it runs before any analysis begins. All bookkeeping files are JSON (never markdown).
Open skill - /implement
Create a new Jupyter notebook implementing the method from the research paper, using the same data as the baseline. Record implementation details and measured metrics as a structured JSON entry.
Open skill - /progress
Maintain a **machine-readable** progress file so dashboards, CLIs, and notebooks can poll the experiment's state at any time. The file is a JSON document — never markdown, never human-prose-first.
Open skill - /research
Read the materialized research source and extract actionable information needed to implement the proposed method. Record the findings as a structured JSON entry.
Open skill

