/topic
Research State of the Art (SOTA) literature for an Artificial Intelligence / Machine Learning (AI/ML) topic, method, or architecture. Finds relevant papers, builds a comparison table, recommends the best implementation strategy for the current codebase, and optionally produces a
Claude Code
$ npx -y skills add Borda/AI-Rig --skill topic --agent claude-code
Codex
$ npx skills add Borda/AI-Rig --skill topic -a codex -y
Cursor
$ npx skills add Borda/AI-Rig --skill topic -a cursor -y
Gemini CLI
$ npx skills add Borda/AI-Rig --skill topic -a gemini-cli -y
GitHub Copilot
$ npx skills add Borda/AI-Rig --skill topic -a github-copilot -y
OpenCode
$ npx skills add Borda/AI-Rig --skill topic -a opencode -y
Windsurf
$ npx skills add Borda/AI-Rig --skill topic -a windsurf -y
SKILL.md
topic.SKILL.mdname: topic
description: Research State of the Art (SOTA) literature for an Artificial Intelligence / Machine Learning (AI/ML) topic, method, or architecture. Finds relevant papers, builds a comparison table, recommends the best implementation strategy for the current codebase, and optionally produces a phased implementation plan mapped to the codebase. Owns broad SOTA search end-to-end via foundry:web-explorer; delegates codebase mapping to foundry:solution-architect.
argument-hint: <topic> [--team] | plan [<output.md>] [--keep "<items>"]
allowed-tools: Read, Write, Bash, Grep, Glob, Agent, WebSearch, WebFetch, TaskCreate, TaskUpdate, AskUserQuestion, TaskList
disable-model-invocation: true
effort: medium
<objective>
Research AI/ML topic literature. Return actionable findings: SOTA methods, best fit, concrete implementation plan. Skill = orchestrator — gathers codebase context, delegates literature search to researcher agent, packages results into structured report.
NOT for deep single-paper analysis or experiment design — use `research:scientist` directly for hypothesis generation, ablation design, experiment validation.
</objective>
<inputs>
- **$ARGUMENTS**: one of:
- `<topic>` — topic, method name, or problem description (e.g. "object detection for small objects", "efficient transformers", "self-supervised pretraining for medical images")
- `plan` — produce phased implementation plan from most recent research output (auto-detected from `.temp/`)
- `plan <path-to-output.md>` — produce plan from specific existing research output file
- `--team` — multi-agent mode; spawns 2–3 researcher teammates for topics with 3+ competing method families and no SOTA consensus; ~7× token cost vs single-agent mode
</inputs>
<compaction>
- Key boundary: end of Step 2 — SOTA literature gathered and written to AGENT_OUT; before Step 3 report synthesis.
- Preserve: AGENT_OUT path (TMPDIR key), BRANCH (TMPDIR key), DATE (TMPDIR key), REPORT_OUT target path, flag-stripped topic string (`topic-clean-args` TMPDIR key).
- Clear at Step 1 start (stale prior run) and at follow-up gate (terminal action).
</compaction>
<workflow>
<!-- Agent resolution: see _RESEARCH_SHARED/agent-resolution.md -->
<!-- ../../assets/images/topic-arch.svg diagrams the runs, gates and parallel fan-out. Documentation only, never loaded — update it in the same commit as any change to step order, gate placement, or agent fan-out. -->
Agent Resolution
**Agent resolution**: load and follow the protocol below. Contains: foundry check + fallback table. For literature search (Step 2a and team researchers), foundry unavailable → conduct the work inline as the sole owner; never substitute a `general-purpose` search agent. Team consolidation uses `general-purpose`; if that agent cannot be resolved or declines the task, the lead consolidates inline. In plan mode, unavailable `foundry:solution-architect` → `general-purpose` per the table. Agents this skill uses: `foundry:web-explorer`, `foundry:solution-architect`, `general-purpose` (team consolidator).
# loads: compaction-contract.md
PLUGIN_ROOT=$(python "${CLAUDE_PLUGIN_ROOT}/bin/resolve_plugin_root.py" --plugin-name research) || exit $?; export PLUGIN_ROOT
export CSID="${CLAUDE_CODE_SESSION_ID:-$PPID}"
python "$PLUGIN_ROOT/bin/resolve_shared.py" --persist research-shared --emit agent-resolution.md --emit untrusted-content.md || exit 1 # timeout: 5000 — cold resolve; every later site reads the research-shared sentinel instead of re-running python**Task hygiene** — follow CLAUDE.md §Task Management for deferred task-tool loading, initial TaskList triage and update sequencing; use the report-delivery task below for this skill's final gate.
**Task tracking**: per CLAUDE.md, create tasks (TaskCreate) for each major phase — paper collection, researcher analysis, report generation — all in the same response as the first real tool call. Mark in_progress/completed throughout. Every later `TaskUpdate` rides with the next real tool call — never a bookkeeping-only turn; the one standalone call is a `completed` right before a long report.
- Always create **"Print report header"** as its own task (all paths — single-agent Step 3, `--team`, `plan`) — `in_progress` right after the report file is written (by the lead directly, or by a spawned consolidator's returned envelope); `completed` only once the delivery block (`---` header table + compact summary) is built from the saved report for the final reply after the answer. Delivery rules: Step 3 and its hook note.
- The shared `## Follow-up gate` below must not fire while this task is `pending`/`in_progress`.
Step 1: Understand the codebase context
Read current project before searching, extract constraints:
- Framework (PyTorch, JAX, TensorFlow, scikit-learn)?
- Task (classification, detection, generation, regression)?
- Constraints (latency, memory, dataset size, compute budget)?
**Case-insensitive flag/mode normalization** — normalize before parsing so `--PLAN`, `--Team`, `Plan`, etc. accepted. Each Bash tool call runs fresh shell, so lowercased copy does NOT persist across blocks — re-derive inline from `$ARGUMENTS` (harness-substituted every block) wherever dispatch check needs it, e.g. `echo "$ARGUMENTS" | tr '[:upper:]' '[:lower:]' | …`. Preserve original `$ARGUMENTS` only where literal substitution into prompts required (e.g. topic string). Scope: covers `--team` / mode dispatch only — `--keep` capture (via `parse-skill-flags.py --keep-state topic`, which reads raw `$ARGUMENTS`) is case-insensitive and token-aware, preserving value case; never route the lowered copy into the `--keep-state topic` pass.
**Unsupported flag check** (runs BEFORE any mode dispatch to catch unknown flags in all modes): load and follow the protocol below. Supported flags for this skill: `--team`, `--keep`.
One block loads the protocol, extracts `--keep`, runs a single flag parse, and prints `UNKNOWN_FLAGS`, `TEAM_MODE`
Read more
name: topic description: Research State of the Art (SOTA) literature for an Artificial Intelligence / Machine Learning (AI/ML) topic, method, or architecture. Finds relevant papers, builds a comparison table, recommends the best implementation strategy for the current codebase, and optionally produces a phased implementation plan mapped to the codebase. Owns broad SOTA search end-to-end via foundry:web-explorer; delegates codebase mapping to foundry:solution-architect. argument-hint: <topic> [--team] | plan [<output.md>] [--keep "<items>"] allowed-tools: Read, Write, Bash, Grep, Glob, Agent, WebSearch, WebFetch, TaskCreate, TaskUpdate, AskUserQuestion, TaskList disable-model-invocation: true effort: medium
<objective>
Research AI/ML topic literature. Return actionable findings: SOTA methods, best fit, concrete implementation plan. Skill = orchestrator — gathers codebase context, delegates literature search to researcher agent, packages results into structured report.
NOT for deep single-paper analysis or experiment design — use `research:scientist` directly for hypothesis generation, ablation design, experiment validation.
</objective>
<inputs>
- **$ARGUMENTS**: one of:
- `<topic>` — topic, method name, or problem description (e.g. "object detection for small objects", "efficient transformers", "self-supervised pretraining for medical images")
- `plan` — produce phased implementation plan from most recent research output (auto-detected from `.temp/`)
- `plan <path-to-output.md>` — produce plan from specific existing research output file
- `--team` — multi-agent mode; spawns 2–3 researcher teammates for topics with 3+ competing method families and no SOTA consensus; ~7× token cost vs single-agent mode
</inputs>
<compaction>
- Key boundary: end of Step 2 — SOTA literature gathered and written to AGENT_OUT; before Step 3 report synthesis.
- Preserve: AGENT_OUT path (TMPDIR key), BRANCH (TMPDIR key), DATE (TMPDIR key), REPORT_OUT target path, flag-stripped topic string (`topic-clean-args` TMPDIR key).
- Clear at Step 1 start (stale prior run) and at follow-up gate (terminal action).
</compaction>
<workflow>
<!-- Agent resolution: see _RESEARCH_SHARED/agent-resolution.md -->
<!-- ../../assets/images/topic-arch.svg diagrams the runs, gates and parallel fan-out. Documentation only, never loaded — update it in the same commit as any change to step order, gate placement, or agent fan-out. -->
Agent Resolution
**Agent resolution**: load and follow the protocol below. Contains: foundry check + fallback table. For literature search (Step 2a and team researchers), foundry unavailable → conduct the work inline as the sole owner; never substitute a `general-purpose` search agent. Team consolidation uses `general-purpose`; if that agent cannot be resolved or declines the task, the lead consolidates inline. In plan mode, unavailable `foundry:solution-architect` → `general-purpose` per the table. Agents this skill uses: `foundry:web-explorer`, `foundry:solution-architect`, `general-purpose` (team consolidator).
# loads: compaction-contract.md
PLUGIN_ROOT=$(python "${CLAUDE_PLUGIN_ROOT}/bin/resolve_plugin_root.py" --plugin-name research) || exit $?; export PLUGIN_ROOT
export CSID="${CLAUDE_CODE_SESSION_ID:-$PPID}"
python "$PLUGIN_ROOT/bin/resolve_shared.py" --persist research-shared --emit agent-resolution.md --emit untrusted-content.md || exit 1 # timeout: 5000 — cold resolve; every later site reads the research-shared sentinel instead of re-running python**Task hygiene** — follow CLAUDE.md §Task Management for deferred task-tool loading, initial TaskList triage and update sequencing; use the report-delivery task below for this skill's final gate.
**Task tracking**: per CLAUDE.md, create tasks (TaskCreate) for each major phase — paper collection, researcher analysis, report generation — all in the same response as the first real tool call. Mark in_progress/completed throughout. Every later `TaskUpdate` rides with the next real tool call — never a bookkeeping-only turn; the one standalone call is a `completed` right before a long report.
- Always create **"Print report header"** as its own task (all paths — single-agent Step 3, `--team`, `plan`) — `in_progress` right after the report file is written (by the lead directly, or by a spawned consolidator's returned envelope); `completed` only once the delivery block (`---` header table + compact summary) is built from the saved report for the final reply after the answer. Delivery rules: Step 3 and its hook note.
- The shared `## Follow-up gate` below must not fire while this task is `pending`/`in_progress`.
Step 1: Understand the codebase context
Read current project before searching, extract constraints:
- Framework (PyTorch, JAX, TensorFlow, scikit-learn)?
- Task (classification, detection, generation, regression)?
- Constraints (latency, memory, dataset size, compute budget)?
**Case-insensitive flag/mode normalization** — normalize before parsing so `--PLAN`, `--Team`, `Plan`, etc. accepted. Each Bash tool call runs fresh shell, so lowercased copy does NOT persist across blocks — re-derive inline from `$ARGUMENTS` (harness-substituted every block) wherever dispatch check needs it, e.g. `echo "$ARGUMENTS" | tr '[:upper:]' '[:lower:]' | …`. Preserve original `$ARGUMENTS` only where literal substitution into prompts required (e.g. topic string). Scope: covers `--team` / mode dispatch only — `--keep` capture (via `parse-skill-flags.py --keep-state topic`, which reads raw `$ARGUMENTS`) is case-insensitive and token-aware, preserving value case; never route the lowered copy into the `--keep-state topic` pass.
**Unsupported flag check** (runs BEFORE any mode dispatch to catch unknown flags in all modes): load and follow the protocol below. Supported flags for this skill: `--team`, `--keep`.
One block loads the protocol, extracts `--keep`, runs a single flag parse, and prints `UNKNOWN_FLAGS`, `TEAM_MODE`
Practical agent workflows for Python, ML, and open-source maintenance. AI-Rig turns recurring work—scoping a change, reproducing a bug, reviewing a pull request, running an experiment, or checking release readiness—into explicit workflows with specialist
More skills from other plugins.
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
ask-matt
Ask which skill or flow fits your situation. A router over the skills in this repo.
Questions about topic.
- Which coding agents can use topic?
- topic installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

