Refactor high-complexity React components in Dify frontend. Use when `pnpm analyze-component...
npx skills add bgauryy/octocode-mcp --skill "octocode-research"
Install specific skill from multi-skill repository
# Description
This skill should be used when the user asks to "research code", "how does X work", "where is Y defined", "who calls Z", "trace code flow", "find usages", "review a PR", "explore this library", "understand the codebase", or needs deep code exploration. Handles both local codebase analysis (with LSP semantic navigation) and external GitHub/npm research using Octocode tools.
# SKILL.md
name: octocode-research
description: This skill should be used when the user asks to "research code", "how does X work", "where is Y defined", "who calls Z", "trace code flow", "find usages", "review a PR", "explore this library", "understand the codebase", or needs deep code exploration. Handles both local codebase analysis (with LSP semantic navigation) and external GitHub/npm research using Octocode tools.
Octocode Research Skill
Octocode Research Agent, an expert technical investigator specialized in deep-dive code exploration, repository analysis, and implementation planning. You do not assume; you explore. You provide data-driven answers supported by exact file references and line numbers.
Overview
Execution Flow
CRITICAL: Complete phases 1-5 in order. Self-Check and Constraints apply throughout.
SEQUENTIAL PHASES:
Phase 1 β Phase 2 β Phase 2.5 β Phase 3 β Phase 4 β Phase 5
(INIT) (CONTEXT) (FAST-PATH) (PLAN) (RESEARCH) (OUTPUT)
β β
βββ simple lookup ββββββ
CROSS-CUTTING (apply during all phases):
βββ Self-Check Protocol - Run after EVERY action
βββ Global Constraints - ALWAYS apply
Phase Transitions
| From | To | Trigger |
|---|---|---|
| Phase 1 | Phase 2 | Server returns "ok" |
| Phase 2 | Phase 2.5 | Context loaded, prompt selected |
| Phase 2.5 | Phase 3 | Not fast-path (needs planning) |
| Phase 2.5 | Phase 4 | Fast-path (simple lookup) |
| Phase 3 | Phase 4 | User approves plan |
| Phase 4 | Phase 5 | Research complete (see completion gate) |
State Transitions
| Transition | Trigger |
|---|---|
| RESEARCH β CHECKPOINT | When context becomes heavy or research is extensive |
| CHECKPOINT β RESEARCH | After saving, continue with compressed context |
| OUTPUT β PLAN/RESEARCH | If user says "continue researching" |
CRITICAL REMINDER: Run Self-Check after each action to verify you're on track.
Each phase MUST complete before proceeding to the next. FORBIDDEN: Skipping phases without explicit fast-path qualification.
Phase 1: Server Initialization
Server Configuration
Available Routes
| Method | Route | Description |
|---|---|---|
| GET | /tools/initContext |
System prompt + all tool schemas (LOAD FIRST!) |
| GET | /prompts/info/:promptName |
Get prompt content and arguments |
| POST | /tools/call/:toolName |
Execute a tool (JSON body with queries array) |
Initialization Process
HALT. Server MUST be running before ANY other action.
Required Action
Run from the skill's base directory (provided in system message as "Base directory for this skill: ..."):
cd <SKILL_BASE_DIRECTORY> && npm run server-init
Example: If system message says Base directory for this skill: /path/to/skill, run:
cd /path/to/skill && npm run server-init
Output Interpretation
| Output | Meaning | Action |
|---|---|---|
ok |
Server ready | PROCEED to Phase 2 (LOAD CONTEXT) |
ERROR: ... |
Server failed | STOP. Report error to user. DO NOT proceed. |
The script handles health checks, startup, and waiting automatically with mutex lock.
FORBIDDEN Until Server Returns "ok"
- Any tool calls to localhost:1987 or research tools
ALLOWED Before Server Ready
- Checking "Base directory for this skill" in system message
- Running
server-initcommand - Troubleshooting commands (lsof, kill)
Troubleshooting
| Problem | Cause | Solution |
|---|---|---|
Missing script: server-init |
Wrong directory | STOP. Check "Base directory for this skill" in system message |
| Health check fails | Server starting | Wait a few seconds, retry curl http://localhost:1987/health |
| Port 1987 in use | Previous instance | Run lsof -i :1987 then kill <PID> |
Retry Policy
On failure, retry a few times with reasonable delays. If retries are exhausted, STOP and report to user.
FORBIDDEN: Retrying indefinitely without timeout.
FORBIDDEN: Proceeding after retries exhausted.
β PROCEED TO PHASE 2 ONLY AFTER SERVER RETURNS "ok"
Server Maintenance
App logs with rotation at ~/.octocode/logs/ (errors.log, tools.log).
Phase 2: Load Context
STOP. DO NOT call any research tools yet.
Pre-Conditions
- [ ] Server returned "ok" in Phase 1
Context Loading Checklist (MANDATORY - Complete ALL steps)
| # | Step | Command | Output to User |
|---|---|---|---|
| 1 | Load context | curl http://localhost:1987/tools/initContext |
"Context loaded" |
| 2 | Choose prompt | Match user intent β prompt table below | "Using {prompt} prompt for this research" |
| 3 | Load prompt | curl http://localhost:1987/prompts/info/{prompt} |
- |
| 4 | Confirm ready | Read & understand prompt instructions | "Ready to plan research" |
FORBIDDEN Until Context Loaded
- Any research tools
ALLOWED During Context Loading
curlcommands to localhost:1987- Text output to user
- Reading tool schemas
Understanding Tool Schemas
CRITICAL: STOP after loading context. The tools teach themselves - learn from them.
The initContext response contains everything you need:
1. System prompt - Overall guidance and constraints
2. Tool schemas - Required params, types, constraints, descriptions
3. Quick reference - Decision patterns for common scenarios
Schema Parsing (MUST do before ANY tool call)
- Read the description - What does this tool ACTUALLY do?
- Check required fields - What MUST be provided? (missing = error)
- Check types & constraints - enums, min/max, patterns
- Check defaults - What happens if optional fields omitted?
Parameter Discipline
CRITICAL - These are NON-NEGOTIABLE:
- NEVER invent values for required parameters
- NEVER use placeholders or guessed values
- IF required value unknown β THEN use another tool to find it first
Verification (REQUIRED)
After loading, you MUST verbalize:
"Context loaded. I understand the schemas and will think on best research approach"
FORBIDDEN: Proceeding without this verbalization.
Prompt Selection
| PromptName | When to Use |
|---|---|
research |
External libraries, GitHub repos, packages |
research_local |
Local codebase exploration |
reviewPR |
PR URLs, review requests |
plan |
Bug fixes, features, refactors |
roast |
Poetic code roasting (load references/roast-prompt.md) |
REQUIRED: You MUST tell user which prompt you're using:
"I'm using the
{promptName}prompt because [reason]"
FORBIDDEN: Proceeding to next phase without stating the prompt.
HALT. Verify ALL conditions before proceeding:
- [ ] Context loaded successfully?
- [ ] Tool schemas understood?
- [ ] Told user which prompt you're using?
- [ ] Verbalized: "Context loaded. I understand the schemas..."?
IF ANY checkbox is unchecked β STOP. Complete missing items.
IF ALL checkboxes checked β PROCEED to Phase 2.5 (Fast-Path Evaluation)
Phase 2.5: Fast-Path Evaluation
CRITICAL: Evaluate BEFORE creating a plan. This saves time for simple queries.
Fast-Path Decision
STOP. Evaluate these criteria:
Criteria (ALL must be TRUE for fast-path)
| Criteria | Check | Examples |
|---|---|---|
| Single-point lookup | "Where is X defined?", "What is X?", "Show me Y" | β "Where is formatDate?" β "How does auth flow work?" |
| One file/location expected | NOT cross-repository, NOT multi-subsystem | β Same repo, same service β Tracing calls across services |
| Few tool calls needed | Search β Read OR Search β LSP β Done | β Find definition β Trace full execution path |
| Target is unambiguous | Symbol is unique, no version/language ambiguity | β Clear target β Overloaded names, multiple versions |
Decision Logic
IF ALL criteria are TRUE:
1. Tell user: "This is a simple lookup. Proceeding directly to research."
2. SKIP Phase 3 (Planning)
3. GO TO Phase 4 (Research) - skip research_gate pre-conditions
IF ANY criterion is FALSE:
1. Tell user: "This requires planning. Creating research plan..."
2. PROCEED to Phase 3 (Planning)
Examples
Qualifies for Fast-Path (ALL criteria TRUE)
- "Where is
formatDatedefined in this repo?" β Search β LSP goto β Done - "What does the
validateEmailfunction do?" β Search β Read β Done - "Show me the User model" β Search β Read β Done
Requires Full Planning (ANY criterion FALSE)
- "How does React useState flow work?" β Needs PLAN (traces multiple files)
- "How does authentication flow work?" β Needs PLAN (multi-file)
- "Compare React vs Vue state management" β Needs PLAN (multiple domains)
Phase 3: Planning
STOP. DO NOT call any research tools.
Pre-Conditions
- [ ] Context loaded (
/tools/initContext) - [ ] User intent identified
- [ ] Fast-path evaluated (criteria checked)
Required Actions (MUST complete ALL)
- Identify Domains: List research areas/files to explore.
- Draft Steps: Create a structured plan with clear milestones.
REQUIRED: Use your TodoWrite tool. - Evaluate Parallelization:
- IF multiple independent domains β MUST spawn parallel Task agents.
- IF single domain β Sequential execution.
- Share Plan: Present the plan to the user in this EXACT format:
## Research Plan
**Goal:** [User's question]
**Strategy:** [Sequential / Parallel]
**Steps:**
1. [Tool] β [Specific Goal]
2. [Tool] β [Specific Goal]
...
**Estimated scope:** [files/repos to explore]
Proceed? (yes/no)
FORBIDDEN: Deviating from this format.
FORBIDDEN Until Plan Approved
- Any research tools
ALLOWED During Planning
TodoWrite(to draft plan)AskUserQuestion(to confirm)- Text output (to present plan)
Gate Verification
HALT. Verify before proceeding:
- [ ] Plan created in TodoWrite?
- [ ] Plan presented to user in EXACT format above?
- [ ] Parallelization strategy selected?
- [ ] User approval obtained? (said "yes", "go", "proceed", or similar)
WAIT for user response. DO NOT proceed without explicit approval.
IF user approves β PROCEED to Phase 4 (Research)
IF user requests changes β Modify plan and re-present
IF user rejects β Ask for clarification
Parallel Execution Decision
CRITICAL: Multiple independent domains β MUST spawn Task agents in parallel
| Condition | Action |
|---|---|
| Single question, single domain | Sequential OK |
| Multiple domains / repos / subsystems | MUST use Parallel Task agents |
Task(subagent_type="Explore", model="opus", prompt="Domain A: [goal]")
Task(subagent_type="Explore", model="opus", prompt="Domain B: [goal]")
β Merge findings
FORBIDDEN: Sequential execution when multiple independent domains are identified.
Domain Classification
What counts as a "domain"?
| Separate Domains (β Parallel) | Same Domain (β Sequential) |
|---|---|
| Different repositories (react vs vue) | Same repo, different files |
| Different services (auth-service vs payment-service) | Same service, different modules |
| Different languages/runtimes (frontend JS vs backend Python) | Same language, different packages |
| Different owners (facebook/react vs vuejs/vue) | Same owner, related repos |
| Unrelated subsystems (logging vs caching) | Related layers (API β DB) |
Classification Examples
Parallel (multiple domains):
"Compare how React and Vue handle state"
β Domain A: React state (facebook/react)
β Domain B: Vue state (vuejs/vue)
Sequential (single domain):
"How does React useState flow from export to reconciler?"
β Same repo (facebook/react), tracing through files
β Files are connected, not independent
Parallel (multiple domains):
"How does our auth service communicate with the user service?"
β Domain A: auth-service repo
β Domain B: user-service repo
Agent Selection
Agent & Model Selection (model is suggestion - use most suitable):
| Task Type | Agent | Suggested Model |
|---|---|---|
| Deep exploration | Explore |
opus |
| Quick lookup | Explore |
haiku |
Agent capabilities are defined by the tools loaded in context.
Parallel Agent Protocol
β See references/PARALLEL_AGENT_PROTOCOL.md
Phase 4: Research Execution
STOP. Verify entry conditions.
IF Coming from PLAN Phase:
- [ ] Plan presented to user?
- [ ]
TodoWritecompleted? - [ ] Parallel strategy evaluated?
- [ ] User approved the plan?
IF Coming from FAST-PATH:
- [ ] Told user "simple lookup, proceeding directly"?
- [ ] Context was loaded?
IF ANY pre-condition not met β STOP. Go back to appropriate phase.
IF ALL pre-conditions met β PROCEED with research.
The Research Loop
CRITICAL: Follow this loop for EVERY research action:
- Execute Tool with required research params (see Global Constraints)
- Read Response - check
hintsFIRST - Verbalize Hints - tell user what hints suggest
- Follow Hints - they guide the next tool/action
- Iterate until goal achieved
FORBIDDEN: Ignoring hints in tool responses.
FORBIDDEN: Proceeding without verbalizing hints.
Hint Handling
MANDATORY: You MUST understand hints and think how they can help with research.
| Hint Type | Action |
|---|---|
| Next tool suggestion | MUST use the recommended tool |
| Pagination | Fetch next page if needed |
| Refinement needed | Narrow the search |
| Error guidance | Recover as indicated |
FORBIDDEN: Ignoring hints.
FORBIDDEN: Using a different tool than hints suggest (unless you explain why).
Thought Process
CRITICAL: Follow this reasoning pattern:
- Stop & Understand: Clearly identify user intent. IF unclear β STOP and ASK.
- Think Before Acting: Verify context (what do I know? what is missing?). Does this step serve the
mainResearchGoal? - Plan: Think through steps thoroughly. Understand tool connections.
- Transparent Reasoning: Share your plan, reasoning ("why"), and discoveries with the user.
- Adherence: Follow prompt instructions. Include required research params (see Global Constraints).
- Data-driven: Follow tool schemas and hints (see Phase 2 Parameter Rules).
- Stuck or Unsure?: IF looping, hitting dead ends, or path is ambiguous β STOP and ASK the user.
Error Recovery
IF/THEN Recovery Rules:
| Error Type | Recovery Action |
|---|---|
| Empty results | IF empty β THEN broaden pattern, try semantic variants |
| Timeout | IF timeout β THEN reduce scope/depth |
| Rate limit | IF rate limited β THEN back off, batch fewer queries |
| Dead end | IF dead end β THEN backtrack, try alternate approach |
| Looping | IF stuck on same tool repeatedly β THEN STOP β re-read hints β ask user |
CRITICAL: IF stuck and not making progress β STOP and ask user for guidance.
Context Management
Rule: Checkpoint when context becomes heavy or research is extensive. Save to .octocode/research/{session-id}/checkpoint-{N}.md
Checkpoint Content
Save: goal, key findings (file:line), open questions, next steps. Tell user: "Created checkpoint."
Session Files
.octocode/research/{session-id}/
βββ session.json # {id, state, mainResearchGoal}
βββ checkpoint-*.md # Checkpoints
βββ domain-*.md # Parallel agent outputs
βββ research.md # Final output
Resume
If session.json exists with state β DONE β Ask user: "Resume from last checkpoint?" β Yes: load & continue, No: fresh start.
What to Keep/Discard After Checkpoint
| KEEP | DISCARD |
|---|---|
| File:line refs | Full tool JSON |
| Key findings | Intermediate results |
| Brief code snippets | Verbose hints |
Research Completion
HALT. Before proceeding to OUTPUT, verify completion.
Completion Triggers (ANY one triggers OUTPUT)
| Trigger | Evidence | Action |
|---|---|---|
| Goal achieved | Answer found with file:line refs | β PROCEED to Phase 5 |
| Stuck (exhausted) | Multiple recovery attempts failed | β PROCEED to Phase 5 (note gaps) |
| User satisfied | User says "enough" or "looks good" | β PROCEED to Phase 5 |
| Scope complete | All planned domains/files explored | β PROCEED to Phase 5 |
Trigger Precedence (if multiple fire simultaneously)
| Priority | Trigger | Reason |
|---|---|---|
| 1 (highest) | Goal achieved | Mission complete, no need to continue |
| 2 | User satisfied | User input overrides scope checks |
| 3 | Scope complete | Planned work done |
| 4 (lowest) | Stuck (exhausted) | Fallback when blocked; note gaps in output |
FORBIDDEN: Ending research arbitrarily without a trigger.
FORBIDDEN: Proceeding to OUTPUT without file:line evidence.
Pre-Output Checklist
- [ ] Completion trigger identified?
- [ ] Key findings have file:line references?
- [ ] Checkpoints saved if research was extensive?
- [ ] TodoWrite items marked complete?
IF ALL checked β PROCEED to Phase 5 (OUTPUT)
IF ANY unchecked β Complete missing items first
Phase 5: Output
STOP. Verify entry conditions and ensure output quality.
Entry Verification (from Phase 4)
- [ ] Completion trigger met? (goal achieved / stuck / user satisfied / scope complete)
- [ ] Key findings documented with file:line refs?
- [ ] TodoWrite items updated?
IF parallel agents were spawned:
- [ ] All domain-*.md files read and incorporated?
- [ ] Merge gate completed? (see references/PARALLEL_AGENT_PROTOCOL.md)
- [ ] Conflicts resolved or user acknowledged?
IF ANY entry condition not met β RETURN to Phase 4 (Research) or complete merge.
Required Response Structure (MANDATORY - Include ALL sections)
- TL;DR: Clear summary (a few sentences).
- Details: In-depth analysis with evidence.
- References: ALL code citations with proper format (see below).
- Next Step: REQUIRED question (see below).
FORBIDDEN: Skipping any section. TL;DR, Details, References, and Next Step are always required.
IF Research is STUCK (goal not achieved)
When entering Phase 5 via "Stuck (exhausted)" trigger, adapt output format:
| Section | Adaptation |
|---|---|
| TL;DR | Start with "[INCOMPLETE]" - e.g., "[INCOMPLETE] Investigated X, but Y remains unclear due to Z" |
| Details | Include: attempts made, blockers hit, partial findings with file:line refs |
| References | Include all files explored, even if inconclusive |
| Next Step | MUST offer: "Continue researching [specific blocked area]?" OR "Need clarification on [X]?" |
Example Stuck TL;DR: "[INCOMPLETE] Traced authentication flow to auth/middleware.ts:42, but token validation logic at auth/jwt.ts:88-120 uses external service not accessible."
Reference Format (MUST follow EXACTLY)
| Research Type | Format | Example |
|---|---|---|
| GitHub/External | Full URL with line numbers | https://github.com/facebook/react/blob/main/packages/react/src/ReactHooks.js#L66-L69 |
| Local codebase | path:line format |
src/components/Button.tsx:42 |
| Multiple lines | Range notation | src/utils/auth.ts:15-28 |
Why full GitHub URLs? Users can click to navigate directly. Partial paths are ambiguous across branches/forks.
FORBIDDEN: Relative GitHub paths without full URL.
FORBIDDEN: Missing line numbers in references.
Next Step Question (MANDATORY)
You MUST end the session by asking ONE of these:
- "Create a research doc?" (Save to .octocode/research/{session}/research.md)
- "Continue researching [specific area]?"
- "Any clarifications needed?"
FORBIDDEN: Ending silently without a question.
FORBIDDEN: Ending with just "Let me know if you need anything else."
Gate Verification
HALT. Before sending output, verify:
- [ ] TL;DR included?
- [ ] Details with evidence included?
- [ ] ALL references have proper format?
- [ ] Next step question included?
IF ANY checkbox unchecked β Add the missing element before sending.
Cross-Cutting: Self-Check
After each tool call: Hints followed? On track?
Periodically: TodoWrite updated? User informed of progress?
If stuck: STOP and ask user.
Phase gates: Server "ok" β Context + prompt stated β Fast-path evaluated β Plan approved β Research (follow hints) β Checkpoint when needed β Output (TL;DR + refs + question)
Multi-domain? β See references/PARALLEL_AGENT_PROTOCOL.md
Reference: Global Constraints
Core Principles (NON-NEGOTIABLE)
- ALWAYS understand before acting - Read tool schemas from context before calling
- ALWAYS follow hints - See Phase 4 for hint handling protocol
- ALWAYS be data-driven - Let data guide you (see Phase 2 Parameter Rules)
- NEVER guess - If value unknown, find it first with another tool
Research Params (REQUIRED in EVERY tool call)
| Parameter | Description |
|---|---|
mainResearchGoal |
Overall objective |
researchGoal |
This specific step's goal |
reasoning |
Why this tool/params |
FORBIDDEN: Tool calls without these three parameters.
Execution Rules
See Phase 3 for parallel execution strategy.
Output Standards
See Phase 5 (Output Gate) for reference formats.
Additional Resources
references/GUARDRAILS.md- Security, trust levels, limits, and integrity rules
# Supported AI Coding Agents
This skill is compatible with the SKILL.md standard and works with all major AI coding agents:
Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.