Octocode Research Skill
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
Required Action
Run from the skill's base directory (provided in system message as "Base directory for this skill: ..."):
cd
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-init command
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
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
Phase 2: Load Context
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 curl commands to localhost:1987 Text output to user Reading tool schemas Understanding Tool Schemas
The initContext response contains everything you need:
System prompt - Overall guidance and constraints Tool schemas - Required params, types, constraints, descriptions 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
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.
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
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:
Tell user: "This is a simple lookup. Proceeding directly to research." SKIP Phase 3 (Planning) GO TO Phase 4 (Research) - skip research_gate pre-conditions
IF ANY criterion is FALSE:
Tell user: "This requires planning. Creating research plan..." PROCEED to Phase 3 (Planning) Examples Qualifies for Fast-Path (ALL criteria TRUE) "Where is formatDate defined in this repo?" → Search → LSP goto → Done "What does the validateEmail function 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
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
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
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? TodoWrite completed? 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
Execute Tool with required research params (see Global Constraints) Read Response - check hints FIRST 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
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
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
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
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
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
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