Claude Skill

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

LLM Mart · 0 points · 16 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download Borda-AI-Rig-plugins_cc_research_skills_topic-39e3a48.zip · 14 KB
borda/ai-rig 27 4 forks Apache-2.0 Updated 2d ago
Part of borda/ai-rig — 82 skills

Install

skills CLI npx skills add https://github.com/Borda/AI-Rig/tree/main/plugins/cc_research/skills/topic
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install borda-ai-rig@llmmart
Git git clone https://github.com/Borda/AI-Rig.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole borda/ai-rig collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

Files (ai-rig)
  • modes
    • plan.md 6.4 KB
      <!-- file: plan.md — consumers: topic/SKILL.md -->
      
      ## Plan Mode
      
      Only when first token of `$ARGUMENTS` is exactly `plan` (not prefix match — "planning algorithms" must NOT trigger this mode).
      
      Produce sequenced, dependency-ordered implementation plan from SOTA research findings, mapped against current codebase. Use after research run identified recommended method — needed before `/develop:feature` (requires `develop` plugin).
      
      **Input detection** (parse argument after `plan`):
      
      - No argument → **auto-detect**: use Glob (pattern `topic-*.md`, path `.reports/research/`) to find recent research outputs; exclude paths containing `-plan-` or `-codebase-`; sort by modification time descending; pick most recent. Print `→ Using: <path>` before proceeding. No file found → stop: "No recent research output found — run `/research:topic <topic>` first."
      - Ends in `.md` → treat as path to existing research output file; skip to Step P1-B
      
      ### Step P1: Gather research findings
      
      **P1-A — Auto-detected report**: when the no-argument auto-detect above found a recent `.reports/research/topic-*.md`, read that file. (Plan mode dispatches BEFORE Steps 2–3, skips them — "fresh" report never exists in same run; input always prior run's report.) Extract: Recommendation section, Implementation Plan, Key Hyperparameters, Gotchas, Integration with Current Codebase.
      
      **P1-B — From existing output**: Read file at given path directly. Extract same sections.
      
      **Validation**: file must contain clear **Recommendation** section naming specific method. Missing or ambiguous → stop: "Research output does not contain a clear method recommendation — run `/research:topic <topic>` first, then pass the output path."
      
      Before spawning in Steps P2–P3, pre-compute output path components:
      
      ```bash
      export CSID="${CLAUDE_CODE_SESSION_ID:-$PPID}"
      BRANCH=$(git branch --show-current 2>/dev/null | tr '/' '-' || echo 'main')  # timeout: 3000
      DATE=$(date +%Y-%m-%d)  # timeout: 3000
      mkdir -p .temp .reports/research  # timeout: 3000
      # Anti-overwrite counter-suffix (quality-gates.md §Output Routing) — same rule as SKILL.md Step 3
      CODEBASE_OUT=$(python "${CLAUDE_PLUGIN_ROOT:-plugins/cc_research}/bin/resolve-anti-overwrite-path.py" .temp "output-research-codebase-$BRANCH-$DATE")  # timeout: 5000
      PLAN_OUT=$(python "${CLAUDE_PLUGIN_ROOT:-plugins/cc_research}/bin/resolve-anti-overwrite-path.py" .reports/research "topic-plan-$BRANCH-$DATE")  # timeout: 5000
      # Absolute path — hooks/enforce-topic-header.js reads this to gate the follow-up question
      echo "$PWD/$PLAN_OUT" > "${TMPDIR:-/tmp}/research-topic-report-file-${CSID}"
      ```
      
      <!-- same branch/date pattern as Step 2a block -->
      
      ### Step P2: Codebase analysis
      
      > **Agent budget** — each spawn costs ~120,851 tok of fixed overhead (~73 tool-calls' worth) plus ~12.0 s/call, so work under ~73 calls is cheaper done inline: spawn nothing. Keep each agent near ~55 tool-calls; past ~60 they stall without returning an envelope, forcing reconstruction from disk. Every spawn prompt must require an envelope even on exhaustion — `partial: true` plus what was finished.
      
      Call `Agent(subagent_type="foundry:solution-architect", prompt=...)`:
      
      ```markdown
      Read research findings file at <path from P1>.
      Analyze current codebase to map recommended method against existing code:
      1. Identify all files/modules relevant to recommended method's domain
      2. Map existing abstractions: interfaces, base classes, patterns codebase already uses
      3. Identify integration points: where does the new method plug in?
      4. Flag conflicts: existing patterns that would need to change
      5. Estimate complexity per integration point (low/medium/high)
      
      Write full analysis to `<$CODEBASE_OUT>` via Write tool. (Substitute resolved path — not template variable.)
      Return ONLY a compact JSON envelope on your final line — nothing else after it:
      {"status":"done","integration_points":N,"conflicts":N,"file":"<$CODEBASE_OUT>","confidence":0.N,"summary":"N integration points, N conflicts"}
      ```
      
      ### Step P3: Synthesize plan
      
      Read both files (research findings from P1 + codebase analysis from P2). Produce phased plan, write to `$PLAN_OUT` (resolved path from P1 bash block):
      
      ```markdown
      ---
      Title: Research Plan — [method name]
      Topic: [original arguments]
      Outcome: [ready / needs work]
      Summary: [phase count, task count, top risk]
      Path: [resolved PLAN_OUT]
      ---
      
      ## Implementation Roadmap: [method name]
      Topic: [original $ARGUMENTS]
      
      ### Prerequisites
      - [dependency, environment requirement, or data prerequisite]
      
      ### Phase 1: Foundation — [description]
      **Goal**: [what this phase achieves and why it must come first]
      | Task | Files | Depends On | Complexity | Verification |
      |------|-------|------------|------------|--------------|
      | ...  | ...   | —          | low/med/hi | [how to verify done] |
      
      ### Phase 2: Core Implementation — [description]
      **Goal**: [what this phase achieves]
      | Task | Files | Depends On | Complexity | Verification |
      |------|-------|------------|------------|--------------|
      | ...  | ...   | Phase 1    | ...        | ...          |
      
      ### Phase 3: Integration & Validation — [description]
      **Goal**: wire into existing pipeline, validate end-to-end
      [same table format]
      
      ### Risks
      | Risk | Likelihood | Impact | Mitigation |
      |------|------------|--------|------------|
      | ...  | low/med/hi | ...    | ...        |
      
      ### Estimated Effort
      | Phase | Tasks | Complexity Mix | Estimate |
      |-------|-------|----------------|----------|
      | 1     | N     | N low, M med   | X days   |
      
      ### Next Steps
      - Phase 1 ready → `/develop:feature <first task from Phase 1>` (requires `develop` plugin)
      - Full plan approved → create `.plans/active/todo_<method>.md` with phases as task groups
      ```
      
      TaskUpdate "Print report header" → `in_progress`.
      
      Read `$PLAN_OUT` and render every `---` header field as a two-column `Field | Value` table in file order. Print the compact summary below in the same turn, then TaskUpdate "Print report header" → `completed`. The topic hook blocks only the workflow follow-up until the saved header matches the current parent-visible table. Diagnostic/recovery questions remain available; unreadable delivery evidence does not authorize the follow-up.
      
      ```text
      ---
      Research Plan — [method name]
      Phases:      [N] phases, [M] tasks total
      Complexity:  [N low / M medium / K high]
      Top risk:    [one-line from risks table]
      Confidence:  [score] — [key gaps]
      → saved to .reports/research/topic-plan-[date].md
      ---
      ```
      
    • team.md 5.9 KB
      <!-- file: team.md — consumers: topic/SKILL.md -->
      
      ## Team Mode (`--team`)
      
      Use when topic warrants exploring multiple competing method families with adversarial cross-evaluation.
      
      Trigger when: 3+ distinct method families exist AND field has no clear leading method (benchmark spread \<5% between top methods, or no SOTA consensus past 12 months). Skip for topics with clear dominant approach — default single researcher sufficient.
      
      **Workflow:**
      
      1. Lead completes Step 1 (codebase context) as normal
      
      > **Agent budget** — each teammate costs ~120,851 tok of fixed overhead (~73 tool-calls' worth) plus ~12.0 s/call, so work under ~73 calls is cheaper done inline: spawn nothing. Keep each teammate near ~55 tool-calls; past ~60 they stall without returning an envelope, forcing reconstruction from disk. Every spawn prompt must require an envelope even on exhaustion — `partial: true` plus what was finished.
      
      2. Spawn 2–3 **researcher** teammates, each assigned distinct method cluster
      3. Broadcast constraints to all: `broadcast {topic: <topic>, constraints: <framework/compute/dataset from Step 1>}`
      4. Each teammate researches independently, reports with `deltaT# HOOK:verify` (AgentSpeak v2 completion signal — see TEAM_PROTOCOL.md) and compressed comparison table
      5. Lead routes key findings from one researcher to others for cross-challenge: `@AR2: AR1 found [finding] — does it hold under [condition]?`
      6. Lead synthesizes into Step 3 report, noting where researchers agreed or diverged — written to `$REPORT_OUT` (resolved in the bash block below), whether the lead writes it directly (2 teammates) or the consolidator does (3 teammates)
      
      **Note on CLAUDE.md §6 (background agent monitoring)**: Team mode spawns in-process teammates via TeamCreate — not background agents writing to run directory. In-process teammates send TeammateIdle notifications on completion — synchronous completion signals. File-activity polling protocol (§8) doesn't apply; TeammateIdle equivalent liveness signal.
      
      Pre-compute before spawning:
      
      ```bash
      TEAM_PROTOCOL_PATH="$HOME/.claude/TEAM_PROTOCOL.md"
      ```
      
      **Spawn prompt template:**
      
      ```markdown
      # Substitute pre-computed values — do not pass raw $(date) expressions or shell vars into spawn prompts
      You are an researcher teammate researching: [topic].
      Read ~/.claude/TEAM_PROTOCOL.md — use AgentSpeak v2 for inter-agent messages.
      Your cluster: [method family N] (e.g., "attention-free architectures" vs "linear attention variants").
      Research the top 3 methods in your cluster: comparison table + recommendation given constraints.
      Write your full findings (comparison table, analysis, Confidence block) to `.temp/output-research-<teammate-name>-<SPAWN_BRANCH>-<SPAWN_DATE>.md` (substitute pre-computed values from bash block below) using the Write tool.
      Report completion with deltaT# HOOK:verify and include: papers=N recommendation="<method>" confidence=0.N file=.temp/output-research-<teammate-name>-<date>.md
      Compact Instructions: preserve paper titles, benchmarks, code links. Discard protocol handshakes.
      Task tracking: call TaskUpdate(in_progress) when you start your assigned task; call TaskUpdate(completed) when done, before sending your delta message.
      ```
      
      Lead synthesizes by reading teammate file paths from delta messages. Pre-compute:
      
      ```bash
      export CSID="${CLAUDE_CODE_SESSION_ID:-$PPID}"
      SPAWN_BRANCH="$(git branch --show-current 2>/dev/null | tr "/" "-" || echo "main")"  # timeout: 3000
      SPAWN_DATE="$(date -u +%Y-%m-%d)"  # timeout: 3000
      mkdir -p .temp .reports/research  # timeout: 3000
      # Anti-overwrite per teammate: run once per teammate before its spawn, with TNAME set to
      # that teammate's name; substitute resolved path (not template) into its prompt:
      #   _TOUT=$(python "${CLAUDE_PLUGIN_ROOT:-plugins/cc_research}/bin/resolve-anti-overwrite-path.py" .temp "output-research-$TNAME-$SPAWN_BRANCH-$SPAWN_DATE")  # timeout: 5000
      # Consolidator report path — same anti-overwrite rule as SKILL.md Step 3 (quality-gates.md)
      REPORT_OUT=$(python "${CLAUDE_PLUGIN_ROOT:-plugins/cc_research}/bin/resolve-anti-overwrite-path.py" .reports/research "topic-$SPAWN_BRANCH-$SPAWN_DATE")  # timeout: 5000
      # Absolute path — hooks/enforce-topic-header.js reads this to gate the follow-up question
      echo "$PWD/$REPORT_OUT" > "${TMPDIR:-/tmp}/research-topic-report-file-${CSID}"
      ```
      
      For 3 teammates, spawn consolidator researcher agent: "Read research files at [paths from deltas]. Synthesize into Step 3 unified report structure. Write to `<$REPORT_OUT>` (substitute resolved path from bash block above — not template variable). Return ONLY compact JSON: `{"status":"done","papers":N,"best_method":"<name>","confidence":0.N,"file":"<path>"}`"
      
      TaskUpdate "Print report header" → `in_progress`.
      
      **MANDATORY, not optional narration** — the consolidator's returned JSON is a routing signal only; it is never printed to the user and never satisfies this step. Consolidator wrote full report to `<file>` (from its envelope) but printed nothing itself. Before returning control to SKILL.md's `## Follow-up gate`: (1) Read `<file>` (Read tool); (2) render its `---` header fields as a two-column Markdown table (`Field | Value`, one row per key, file order) per quality-gates.md §Report File Format's Universal terminal-print rule — never print the raw `---`-delimited block; (3) append `→ saved to <file>`; (4) TaskUpdate "Print report header" → `completed` — only after the table has actually appeared in this response, never before. SKILL.md's Follow-up gate must not fire while this task is `pending`/`in_progress`.
      
      **Hook-enforced**: `hooks/enforce-topic-header.js` (PreToolUse on `AskUserQuestion`) denies the Follow-up gate call while `$REPORT_OUT` (sentinel path above) is missing or empty — a consolidator that never wrote its report cannot be papered over with an ad-hoc summary. The hook sees only whether the report exists, not whether the print happened; steps (1)–(4) above remain the check for the print itself.
      
  • SKILL.md 23.2 KB
    ---
    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, topic string from ARGUMENTS.
    - 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 -->
    
    ## Agent Resolution
    
    **Agent resolution**: load and follow the protocol below. Contains: foundry check + fallback table. Foundry not installed → substitute each `foundry:X` with `general-purpose` per table. Agents this skill uses: `foundry:web-explorer`, `foundry:solution-architect`.
    
    ```bash
    # loads: compaction-contract.md
    export CSID="${CLAUDE_CODE_SESSION_ID:-$PPID}"
    _RESEARCH_SHARED=$(python "${CLAUDE_PLUGIN_ROOT:-plugins/cc_research}/bin/resolve_shared.py" 2>/dev/null)  # timeout: 5000
    [ -z "$_RESEARCH_SHARED" ] && { echo "! Plugin path resolution failed — ensure research plugin installed and CLAUDE_PLUGIN_ROOT set, or invoke from project root."; exit 1; }
    echo "$_RESEARCH_SHARED" > "${TMPDIR:-/tmp}/research-shared-${CSID}"  # cold resolve — every later site reads this sentinel instead of re-running python
    cat "$_RESEARCH_SHARED/agent-resolution.md"
    ```
    
    **Task hygiene**: Before creating tasks, call `TaskList`. For each found task:
    
    - status `completed` if work clearly done
    - status `deleted` if orphaned / no longer relevant
    - keep `in_progress` only if genuinely continuing
    
    **Task tracking**: per CLAUDE.md, create tasks (TaskCreate) for each major phase — paper collection, researcher analysis, report generation. Mark in_progress/completed throughout. 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 `---` header has actually appeared in this response. This task exists because a sibling skill (oss:review) had an incident: report written correctly but terminal print step silently skipped while the hard-enforced `AskUserQuestion` fired anyway — tracking the print as its own task makes it as trackable as the tool calls around it. 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 `extract-keep-flag.py`, which reads raw `$ARGUMENTS` with a lowercase-literal regex) stays case-sensitive; never route the lowered copy into keep-flag extraction.
    
    **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`.
    
    ```bash
    # loads: unsupported-flag-protocol.md
    export CSID="${CLAUDE_CODE_SESSION_ID:-$PPID}"
    IFS= read -r _RESEARCH_SHARED < "${TMPDIR:-/tmp}/research-shared-${CSID}" 2>/dev/null || _RESEARCH_SHARED=""  # warm read of the Agent Resolution cold resolve (Check 41)
    cat "$_RESEARCH_SHARED/unsupported-flag-protocol.md"
    ```
    
    ```bash
    export CSID="${CLAUDE_CODE_SESSION_ID:-$PPID}"
    python "${CLAUDE_PLUGIN_ROOT:-plugins/cc_research}/bin/extract-keep-flag.py" topic "$ARGUMENTS"  # timeout: 5000 — parses --keep, clears a stale contract, persists for Step 2
    ```
    
    ```bash
    _ARGS_LC=$(echo "$ARGUMENTS" | tr '[:upper:]' '[:lower:]')  # flag/mode dispatch only — never the topic-string source
    eval "$(python "${CLAUDE_PLUGIN_ROOT:-plugins/cc_research}/bin/parse-skill-flags.py" --flags team "$_ARGS_LC")"  # timeout: 5000
    # scan CLEAN_ARGS, not raw blob: --team and --keep "<items>" already consumed — a
    # flag-shaped word inside a --keep value no longer reports as unknown
    UNKNOWN_FLAGS=$(echo "$CLEAN_ARGS" | tr '[:upper:]' '[:lower:]' | grep -oE -- '--[a-z][a-z0-9-]+' || true)  # timeout: 5000
    echo "UNKNOWN_FLAGS=$UNKNOWN_FLAGS"
    ```
    
    **Early dispatch for `--team` and `plan` modes** — check BEFORE Steps 2-3. `plan` as the first non-flag word wins over `--team` (plan mode has no team variant — `modes/plan.md` implements no team path); when both are present, proceed to Plan Mode and print one warning line: `⚠ --team has no effect in plan mode — ignored`. `--team` with any other first word (not `plan`) → Team Mode, as before:
    
    ```bash
    _ARGS_LC=$(echo "$ARGUMENTS" | tr '[:upper:]' '[:lower:]')  # flag/mode dispatch only — never the topic-string source
    eval "$(python "${CLAUDE_PLUGIN_ROOT:-plugins/cc_research}/bin/parse-skill-flags.py" --flags team "$_ARGS_LC")"  # timeout: 5000
    TEAM_MODE="$FLAG_TEAM"   # anchored-token match — no longer fires on --team inside a --keep value
    FIRST_WORD=$(echo "$CLEAN_ARGS" | tr '[:upper:]' '[:lower:]' | awk '{print $1}')  # timeout: 5000
    echo "TEAM_MODE=$TEAM_MODE FIRST_WORD=$FIRST_WORD"
    [ "$FIRST_WORD" = plan ] && [ "$TEAM_MODE" = true ] && echo "⚠ --team has no effect in plan mode — ignored"
    ```
    
    - `$FIRST_WORD` equals exactly `plan` → skip Steps 2-3; jump directly to **Plan Mode** section below (print the `⚠` line above first if `$TEAM_MODE` is also `true`).
    - Else `$TEAM_MODE` is `true` → skip Steps 2-3; jump directly to **Team Mode** section below.
    
    Steps 2-3 execute only when neither `--team` nor `plan` mode is detected.
    
    ## Step 2: Research & codebase check (run in parallel)
    
    > **Parallelism scope**: 2a (Agent spawn) and 2b (Grep) issue in one response. Any WebSearch/WebFetch calls inside the researcher agent are issued sequentially — invoke all searches before synthesizing results. No mechanism to parallelize prose-driven searches across calls.
    
    ### 2a: SOTA literature search (issue with 2b simultaneously in one response)
    
    **One owner for the search — decide first, never both**: `foundry:web-explorer` available (check below) → AGENT owns entire SOTA search, writes `$AGENT_OUT`; orchestrator issues NO WebSearch/WebFetch of its own (a second inline pass re-fetches the same 5 papers and bills the full page text twice). Web-explorer unavailable → orchestrator conducts the search inline. Either way: find top 5 papers for `$ARGUMENTS`, produce comparison table (method, key idea, benchmark results, compute, code availability), recommend single best method given codebase constraints from Step 1.
    
    **Note**: never dispatch to `research:scientist` for broad SOTA surveys — scientist scoped to deep single-paper analysis with named paper anchor. Use `research:scientist` directly only when: (a) specific paper identified and needs deep analysis, (b) hypothesis generation for identified method, or (c) experiment design for concrete approach. Broad SOTA = web-explorer territory.
    
    Pre-compute output paths before searching:
    
    ```bash
    export CSID="${CLAUDE_CODE_SESSION_ID:-$PPID}"
    BRANCH=$(git branch --show-current 2>/dev/null | tr '/' '-' || echo 'main')  # timeout: 3000
    DATE=$(date +%Y-%m-%d)  # timeout: 3000
    mkdir -p .temp .reports/research  # timeout: 3000
    # anti-overwrite counter-suffix (quality-gates.md §Output Routing) — resolved by resolve-anti-overwrite-path.py
    # Step 3 report path resolved HERE, not at Step 3: hook gate below must exist from moment
    # run commits to producing report, not from moment it remembers to.
    AGENT_OUT=$(python "${CLAUDE_PLUGIN_ROOT:-plugins/cc_research}/bin/resolve-anti-overwrite-path.py" .temp "output-research-agent-$BRANCH-$DATE")  # timeout: 5000
    REPORT_OUT=$(python "${CLAUDE_PLUGIN_ROOT:-plugins/cc_research}/bin/resolve-anti-overwrite-path.py" .reports/research "topic-$BRANCH-$DATE")  # timeout: 5000
    echo "$BRANCH" > "${TMPDIR:-/tmp}/topic-branch-${CSID}"
    echo "$DATE" > "${TMPDIR:-/tmp}/topic-date-${CSID}"
    echo "$AGENT_OUT" > "${TMPDIR:-/tmp}/topic-agent-out-${CSID}"
    echo "$REPORT_OUT" > "${TMPDIR:-/tmp}/topic-report-out-${CSID}"
    # Absolute path — hooks/enforce-topic-header.js reads this to gate the follow-up question
    echo "$PWD/$REPORT_OUT" > "${TMPDIR:-/tmp}/research-topic-report-file-${CSID}"
    ```
    
    Search targets (for whichever owner runs the search): arXiv, Papers With Code, Semantic Scholar, HuggingFace Hub. For each of top 5 papers: extract method, key idea, benchmark results, compute cost, code availability. The owner writes full findings (comparison table, paper analysis, recommendation, implementation plan, Confidence block) to `$AGENT_OUT`.
    
    > **Agent budget** — each spawn costs ~120,851 tok of fixed overhead (~73 tool-calls' worth) plus ~12.0 s/call, so work under ~73 calls is cheaper done inline: spawn nothing. Keep each agent near ~55 tool-calls; past ~60 they stall without returning an envelope, forcing reconstruction from disk. Every spawn prompt must require an envelope even on exhaustion — `partial: true` plus what was finished.
    
    **Availability check** (`ls ~/.claude/plugins/cache/borda-ai-rig/foundry/*/agents/web-explorer.md 2>/dev/null`): present → spawn `Agent(subagent_type="foundry:web-explorer", prompt="...")` as the sole search owner per the rule above — its prompt frames the ask strictly within web-explorer's declared scope (sourcing, fetching, and distilling published claims from arXiv / Papers With Code / Semantic Scholar pages — explicitly NOT a paper deep-dive, hypothesis generation, or experiment design), and carries the search targets, per-paper extraction fields, and the `$AGENT_OUT` write (resolved literal path). Absent → conduct the search inline using WebSearch and WebFetch directly.
    
    If the spawned agent's returned envelope indicates it declined or redirected the task instead of completing it (e.g. cites an ML-paper-analysis or out-of-scope limitation), treat this identically to "web-explorer unavailable" — the orchestrator conducts the search inline using WebSearch/WebFetch directly (the existing fallback). Never forward this task to `research:scientist`.
    
    ### 2b: Check for existing implementations (main context)
    
    Use Grep tool to search codebase for existing related code:
    
    - Pattern: `$ARGUMENTS` (treat as literal string — if `$ARGUMENTS` contains regex metacharacters like `.`, `*`, `+`, `?`, `(`, `)`, `[`, `]`, `\`, escape them via `grep -F` semantics, OR escape each metachar with `\\` before passing to Grep tool)
    - Glob: `**/*.py`
    - Output mode: `files_with_matches`
    - Limit to 1000 results (per external-data.md — never cap at default 10)
    
    ```bash
    export CSID="${CLAUDE_CODE_SESSION_ID:-$PPID}"
    # boundary: after Step 2 literature gathered (compaction-contract.md)
    IFS= read -r _AGENT_OUT < "${TMPDIR:-/tmp}/topic-agent-out-${CSID}" 2>/dev/null || _AGENT_OUT=""
    IFS= read -r _BRANCH < "${TMPDIR:-/tmp}/topic-branch-${CSID}" 2>/dev/null || _BRANCH=""
    IFS= read -r _DATE < "${TMPDIR:-/tmp}/topic-date-${CSID}" 2>/dev/null || _DATE=""
    IFS= read -r _KEEP < "${TMPDIR:-/tmp}/topic-keep-items-${CSID}" 2>/dev/null || _KEEP=""
    IFS= read -r _REPORT_OUT < "${TMPDIR:-/tmp}/topic-report-out-${CSID}" 2>/dev/null || _REPORT_OUT=".reports/research/topic-${_BRANCH}-${_DATE}.md"
    _KEEP_APPEND=""; [ -n "$_KEEP" ] && _KEEP_APPEND="; user-keep: $_KEEP"
    python "${CLAUDE_PLUGIN_ROOT:-plugins/cc_research}/bin/write_skill_contract.py" "research:topic" "synthesis (after Step 2 literature gathered)" "n/a" "agent-out=${_AGENT_OUT}, report-out=${_REPORT_OUT}, branch=${_BRANCH}${_KEEP_APPEND}" "Step 3 synthesize agent findings into report → follow-up gate"  # timeout: 5000
    ```
    
    ## Step 3: Report
    
    ```markdown
    ---
    Title:       Research — [topic]
    Date:        [YYYY-MM-DD]
    Scope:       [topic / research question]
    Focus:       SOTA literature research
    Agents:      [agents actually dispatched this run — e.g. foundry:web-explorer when it ran Step 2a; solution-architect only on plan-mode runs; never the full menu; web-explorer declined/redirected → `web-explorer (declined) + orchestrator (inline fallback)`, never just `orchestrator (inline)`]
    Outcome:     EXPLORATORY | PROMISING | CONSENSUS
    Best method: [recommended approach / architecture]
    Papers:      [N papers analyzed]
    Confidence:  [aggregate score] — [key gaps]
    Next steps:  /research:topic plan → /develop:feature (requires `develop` plugin)
    Path:        → .reports/research/topic-<branch>-<date>.md
    ---
    
    ## Research: $ARGUMENTS
    
    ### SOTA Overview
    [2-3 sentence summary of the current state of the field]
    
    ### Method Comparison
    | Method | Key Idea | SOTA Result | Compute | Code Available |
    |--------|----------|-------------|---------|----------------|
    | ...    | ...      | ...         | ...     | Yes/No + link  |
    
    ### Recommendation
    **Use [method]** because [specific reason matching the current codebase constraints].
    
    ### Implementation Plan
    1. [step with file/component to change]
    2. [step]
    3. [step]
    
    ### Key Hyperparameters
    - [param]: [typical range] — [what it controls]
    
    ### Gotchas
    - [common failure mode and how to avoid it]
    
    ### Integration with Current Codebase
    - Files to modify: [list with file:line references]
    - New dependencies needed: [package versions]
    - Estimated effort: [hours/days]
    - Risk assessment: [what could go wrong during integration]
    
    ### References
    - [Paper title] ([year]) — [link]
    
    ### Agent Confidence
    <!-- Rows come from the actual launch batch: one row per agent this run really spawned, named as dispatched. -->
    <!-- No agent spawned (orchestrator ran the search inline): single row, agent `orchestrator (inline)`. -->
    <!-- web-explorer declined/redirected: two rows — `foundry:web-explorer (declined)` with score `n/a`, then `orchestrator (inline fallback)`. -->
    <!-- The rows below are shape examples, never emitted verbatim — a fixed researcher-1/2/3 lineup reports agents that never ran. -->
    | Agent | Score | Gaps |
    |---|---|---|
    | [agent as dispatched, e.g. foundry:web-explorer] | [score] | [gaps] |
    ```
    
    ```bash
    mkdir -p .reports/research  # timeout: 3000
    export CSID="${CLAUDE_CODE_SESSION_ID:-$PPID}"
    # Reload from Step 2a bash block (Check 41: fresh shell per call)
    IFS= read -r BRANCH < "${TMPDIR:-/tmp}/topic-branch-${CSID}" 2>/dev/null || BRANCH=$(git branch --show-current 2>/dev/null | tr '/' '-' || echo 'main')
    IFS= read -r DATE < "${TMPDIR:-/tmp}/topic-date-${CSID}" 2>/dev/null || DATE=$(date +%Y-%m-%d)
    # report path (anti-overwrite suffix, quality-gates.md) resolved at Step 2a — reuse
    # verbatim; re-resolving here would drift from the path the hook gate is watching
    IFS= read -r REPORT_OUT < "${TMPDIR:-/tmp}/topic-report-out-${CSID}" 2>/dev/null || REPORT_OUT=""
    if [ -z "$REPORT_OUT" ]; then
        REPORT_OUT=$(python "${CLAUDE_PLUGIN_ROOT:-plugins/cc_research}/bin/resolve-anti-overwrite-path.py" .reports/research "topic-$BRANCH-$DATE")  # timeout: 5000
        echo "$REPORT_OUT" > "${TMPDIR:-/tmp}/topic-report-out-${CSID}"
        echo "$PWD/$REPORT_OUT" > "${TMPDIR:-/tmp}/research-topic-report-file-${CSID}"
    fi
    ```
    
    Write full report to `$REPORT_OUT` via Write tool (resolved by counter-suffix loop above) — **do not print full report to terminal**.
    
    TaskUpdate "Print report header" → `in_progress`.
    
    Read the saved report and render every `---` header field as a two-column `Field | Value` table in file order, in this same turn. Then print the compact summary below; TaskUpdate "Print report header" → `completed` only after the matching table appears in this response:
    
    ```text
    ---
    Research — [topic]
    SOTA:        [1–2 sentence summary of current landscape]
    Best method: [recommended approach / architecture]
    Key papers:  [top 2–3 papers with year]
    Gaps:        [what the research couldn't cover or needs runtime validation]
    Confidence:  [aggregate score] — [key gaps]
    → saved to .reports/research/topic-$BRANCH-$DATE.md
    ---
    ```
    
    **Hook-enforced**: `hooks/enforce-topic-header.js` blocks only this workflow's follow-up question until the current report exists and every `---` header field appears in one matching two-column table in the parent reply since the last human turn. Missing/unreadable transcript evidence blocks this transition; reprint the header, then retry. Diagnostic/recovery questions remain available; use their own question header, not `topic`. The existing sentinel lifetime still scopes this workflow guard; it does not prove UI rendering or report correctness.
    
    End response with `## Confidence` block per CLAUDE.md output standards.
    
    ## Team Mode — only when `--team` flag present and first non-flag word is not `plan`
    
    > loads: modes/team.md # also loads: modes/plan.md **Mode-file existence check** — verify before reading:
    
    ```bash
    _TEAM_MODE="${CLAUDE_PLUGIN_ROOT:-plugins/cc_research}/skills/topic/modes/team.md"
    [ -f "$_TEAM_MODE" ] || { echo "! MISSING — modes/team.md not found at $_TEAM_MODE. Plugin may not be fully installed. Falling back to single-agent mode."; exit 1; }
    [ -f "$HOME/.claude/TEAM_PROTOCOL.md" ] || { echo "! MISSING — ~/.claude/TEAM_PROTOCOL.md not found. Run /foundry:setup (requires foundry plugin) to install. Falling back to single-agent mode."; exit 1; }
    cat "$_TEAM_MODE"  # timeout: 5000
    ```
    
    Follow `modes/team.md` (loaded above) and execute its workflow.
    
    **Mandatory termination gate**: after `modes/team.md` returns (consolidation complete, report written, header printed per its own mandatory print step, "Print report header" task `completed`), continue to `## Follow-up gate` section below — do NOT exit early. `AskUserQuestion` call in `## Follow-up gate` is only authorized terminal action for team mode; reaching end of team workflow without invoking it is protocol violation.
    
    ## Plan Mode — only when first non-flag word of `$ARGUMENTS` is exactly `plan` (not a prefix match — "planning algorithms" must NOT trigger this mode)
    
    > Distinct from the standalone `/research:plan` skill: this mode turns prior SOTA research output into a phased implementation roadmap; `/research:plan` writes an ML experiment `program.md` run config from a goal or file. Same word, different artifact — see `/research:plan`'s own description.
    
    > loads: modes/plan.md **Mode-file existence check** — verify before reading:
    
    ```bash
    _PLAN_MODE="${CLAUDE_PLUGIN_ROOT:-plugins/cc_research}/skills/topic/modes/plan.md"
    [ -f "$_PLAN_MODE" ] || { echo "! MISSING — modes/plan.md not found at $_PLAN_MODE. Plugin may not be fully installed."; exit 1; }
    cat "$_PLAN_MODE"  # timeout: 5000
    ```
    
    Follow `modes/plan.md` (loaded above) and execute its workflow.
    
    **Mandatory termination gate**: after `modes/plan.md` returns (phased plan emitted, report written, compact terminal summary printed per its own `Print compact terminal summary` step, "Print report header" task `completed`), continue to `## Follow-up gate` section below — do NOT exit early. `AskUserQuestion` call in `## Follow-up gate` is only authorized terminal action for plan mode; reaching end of plan workflow without invoking it is protocol violation.
    
    ## Follow-up gate
    
    **Hard gate**: check "Print report header" task status before anything else here. Not `completed` → the report header has not actually been printed yet — go back and do it now (Step 3 / team.md / plan.md, whichever path ran), then mark the task `completed`, before calling `AskUserQuestion` below. `hooks/enforce-topic-header.js` backs this gate structurally — the `AskUserQuestion` below is denied outright while the run's report file is absent or empty on disk.
    
    ```bash
    rm -f .temp/state/skill-contract.md  # clear contract — topic research complete (compaction-contract.md §Lifecycle)  # timeout: 5000
    ```
    
    Call `AskUserQuestion` tool — do NOT write options as plain text first. Map options directly into tool call arguments:
    
    - header: `topic`
    - question: "What next?"
    - (a) label: `/research:plan` — description: design a research program from these findings
    - (b) label: `/develop:feature` — description: implement based on findings (requires `develop` plugin)
    - (c) label: `skip` — description: no action
    
    </workflow>
    
    <notes>
    
    - Skill orchestrates — owns broad SOTA literature search end-to-end via `foundry:web-explorer`, delegates codebase mapping to `foundry:solution-architect` (plan mode). For direct hypothesis/experiment work on named paper, use `research:scientist` directly.
    - **Team Mode dependency**: `--team` requires `~/.claude/TEAM_PROTOCOL.md` to exist — each teammate spawn prompt includes `Read $HOME/.claude/TEAM_PROTOCOL.md and use AgentSpeak v2`; verify file present before launching team mode.
    - **Link integrity**: all URLs cited in research report must be fetched and verified before inclusion. Use WebFetch to confirm each URL exists and says what claimed.
    - Follow-up chains:
      - Research recommends method → `/research:plan` for sequenced plan (auto-detects latest output), then `/develop:feature` (requires `develop` plugin) for TDD-first implementation
      - Research integrates into existing code → `/develop:refactor` (requires `develop` plugin) first to prepare module, then `/develop:feature` (requires `develop` plugin)
      - Research reveals security concerns with dependency → run `pip-audit` or `uv run pip-audit` for Common Vulnerabilities and Exposures (CVE) scan
      - Plan approved → create `.plans/active/todo_<method>.md` with phases as task groups; start with `/develop:feature <first task from Phase 1>` (requires `develop` plugin)
    
    </notes>
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related