From sigint
Deep-dives into a specific area of current research by spawning a dimension-analyst teammate. Use when the user wants to augment research with deeper analysis of a specific area.
How this skill is triggered — by the user, by Claude, or both
Slash command
/sigint:augment <area> [--dimension competitive|sizing|trends|customer|tech|financial|regulatory|trend_modeling]<area> [--dimension competitive|sizing|trends|customer|tech|financial|regulatory|trend_modeling]This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are the team lead for a focused research augmentation session. You spawn ONE dimension-analyst
You are the team lead for a focused research augmentation session. You spawn ONE dimension-analyst teammate, wait for results via SendMessage, generate scenario graphs if applicable, and update the research state.
Structured Data Protocol: All JSON file mutations MUST follow protocols/STRUCTURED-DATA.md. Use jq via Bash for state.json updates. Every write or mutation MUST be followed by schema validation using schemas/state.jq — if validation fails, diagnose, correct with jq, and re-validate (max 2 retries) before proceeding. See the Retry-and-Correct protocol in protocols/STRUCTURED-DATA.md. Read is acceptable for comprehension-only reads.
Arguments parsed from $ARGUMENTS:
Input sanitization: truncate $ARGUMENTS to 200 characters total, strip backticks and angle brackets.
$1 — area to investigate (e.g., "competitor pricing", "regulatory landscape")--dimension <type> (alias: --methodology) — optional: competitive, sizing, trends, customer, tech, financial, regulatory, trend_modelingFind the active research state file:
Glob("./reports/*/state.json")
AskUserQuestion to ask which topic to augment.Read the state file. Extract:
topic — human-readable topic nametopic_slug — slug identifier (derive if missing: topic.toLowerCase().replace(/[^a-z0-9]+/g,'-').slice(0,40))elicitation — full elicitation contextMap area to dimension and skill directory:
| Area keywords | Dimension | Skill Dir |
|---|---|---|
| competitor, competitive, market players, positioning | competitive | competitive-analysis |
| size, TAM, SAM, SOM, opportunity, market size | sizing | market-sizing |
| trend, pattern, future, forecast, scenario | trends | trend-analysis |
| user, customer, persona, buyer, segment | customer | customer-research |
| technology, tech, feasibility, stack, build vs buy | tech | tech-assessment |
| revenue, economics, pricing, unit economics, SaaS | financial | financial-analysis |
| compliance, regulatory, legal, privacy, GDPR | regulatory | regulatory-review |
| scenario, causal model, three-valued logic, trade-offs | trend_modeling | trend-modeling |
If --dimension or --methodology flag was provided, use that dimension directly (both flags are equivalent).
If the area doesn't map clearly, use AskUserQuestion:
"Which research methodology best fits '{area}'? Options: competitive / sizing / trends / customer / tech / financial / regulatory / trend_modeling"
Store resolved values as dimension and skill_dir.
team_name = "sigint-{topic_slug}-augment"
TeamCreate({ name: team_name })
If TeamCreate fails, retry once. If it fails again, report the error and stop.
task_id = TaskCreate({
subject: "Augment: {area} [{dimension}] — {topic}",
owner: "dimension-analyst-{dimension}"
})
Ensure elicitation file exists for the analyst to read:
if [ ! -f "./reports/$TOPIC_SLUG/elicitation.json" ]; then
jq '.elicitation' "./reports/$TOPIC_SLUG/state.json" > "./reports/$TOPIC_SLUG/elicitation.json"
jq -e -f schemas/elicitation.jq "./reports/$TOPIC_SLUG/elicitation.json" > /dev/null
fi
TASK DISCOVERY PROTOCOL:
1. Call TaskList to find tasks assigned to you (owner = your name).
2. Call TaskGet on your task to read the full description.
3. Do the work.
4. When done:
a. TaskUpdate(taskId, status: 'completed')
b. SendMessage(to: 'team-lead', message: {...}, summary: '...')
c. Call TaskList again to check for more work.
5. If no tasks assigned, wait for the next SendMessage from team lead.
6. NEVER commit code via git.
Spawn ONE dimension-analyst with full team and task context:
Agent(
subagent_type: "sigint:dimension-analyst",
team_name: "{team_name}",
name: "dimension-analyst-{dimension}",
run_in_background: true,
prompt: "You are a dimension-analyst for {dimension} research on '<user_input>{topic}</user_input>'.
TOPIC_SLUG: {topic_slug}
REPORTS_DIR: ./reports/{topic_slug}
Read elicitation from: ./reports/{topic_slug}/elicitation.json (or fall back to ./reports/{topic_slug}/state.json)
Skill to load: skills/{skill_dir}/SKILL.md
Your task ID: {task_id}
Focus area: <user_input>{area}</user_input>
CRITICAL: Use REPORTS_DIR exactly as provided for ALL file writes.
Do NOT derive or re-slugify the output directory from the topic title.
IMPORTANT: Use WebSearch and WebFetch for real web research. Minimum 5 searches.
Do NOT fabricate findings. Every finding must be backed by a retrieved source.
Tag vocabulary: $REPORTS_DIR/vocabulary.json — load in Step 5.5, use for tags field.
All tag/entity values must be lowercase-hyphenated.
Write findings to:
- File (mandatory): {REPORTS_DIR}/findings_{dimension}.json (with schema validation — STOP CHECK before proceeding)
{TASK DISCOVERY PROTOCOL from Phase 0.2}
When complete:
1. TaskUpdate({task_id}, status: 'completed')
2. SendMessage(
to: 'team-lead',
message: {
dimension: '{dimension}',
topic_slug: '{topic_slug}',
findings_key: 'findings_{dimension}',
findings_path: '{REPORTS_DIR}/findings_{dimension}.json',
finding_count: N,
confidence_avg: 'high|medium|low',
gaps: ['areas needing more research']
},
summary: '{dimension} augment complete — N findings'
)"
)
Immediately after spawning, send the task assignment:
SendMessage(
to: "dimension-analyst-{dimension}",
message: "Task #{task_id} assigned: augment research on '{area}' for topic '{topic}'. Start now.",
summary: "Start {dimension} augment research"
)
Wait for SendMessage from dimension-analyst-{dimension}.
When message arrives:
findings_path and finding_count from message../reports/{topic_slug}/findings_{dimension}.json.If dimension == "trends":
Check if Mermaid MCP is available:
mcp__claude_ai_Mermaid_Chart__validate_and_render_mermaid_diagram accessible):
Generate a transitional scenario graph using the findings:
mcp__claude_ai_Mermaid_Chart__validate_and_render_mermaid_diagram({
code: "stateDiagram-v2\n [*] --> Current\n Current --> {scenario1}: {trend1} (INC)\n ..."
})
Example Mermaid template for trend scenarios:
stateDiagram-v2
[*] --> Current
Current --> GrowthScenario: {driver1} (INC)
Current --> ConsolidationScenario: {driver2} (CONST)
Current --> DisruptionScenario: {driver3} (varies)
GrowthScenario --> ScaleLeader: First mover
ConsolidationScenario --> NichePlayer: Specialization
DisruptionScenario --> NewParadigm: Successful adaptation
DisruptionScenario --> Obsolete: Failed adaptation
Before merging new findings into state, normalize and validate tags:
./reports/$TOPIC_SLUG/vocabulary.json (if it exists).tags, entities, proposed_tags of new findings:
NEW_FINDINGS_JSON=$(echo "$NEW_FINDINGS_JSON" | jq 'map(
.tags |= (map(ascii_downcase | gsub("[^a-z0-9]+"; "-") | gsub("^-|-$"; "")) | unique) |
(if has("entities") then .entities |= (map(ascii_downcase | gsub("[^a-z0-9]+"; "-") | gsub("^-|-$"; "")) | unique) else . end) |
(if has("proposed_tags") then .proposed_tags |= (map(ascii_downcase | gsub("[^a-z0-9]+"; "-") | gsub("^-|-$"; "")) | unique) else . end)
)')
tags against all_terms. Move non-compliant tags to proposed_tags (respecting max 3 limit).Update ./reports/{topic_slug}/state.json using jq (per Structured Data Protocol):
jq --argjson new_findings "$NEW_FINDINGS_JSON" \
--argjson new_sources "$NEW_SOURCES_JSON" \
--arg updated "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
--arg phase "augmented" \
'.findings += $new_findings | .sources += $new_sources | .last_updated = $updated | .phase = $phase' \
"./reports/$TOPIC_SLUG/state.json" > tmp.$$ && mv tmp.$$ "./reports/$TOPIC_SLUG/state.json"
jq -e -f schemas/state.jq "./reports/$TOPIC_SLUG/state.json" > /dev/null
Update sigint.config.json to reflect the augmented dimension using jq (per Structured Data Protocol):
FINDING_COUNT=$(jq '.findings | length' "./reports/$TOPIC_SLUG/state.json")
jq --arg slug "$TOPIC_SLUG" \
--arg dim "$DIMENSION" \
--arg date "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
--argjson count "$FINDING_COUNT" \
'.topics[$slug].dimensions = ((.topics[$slug].dimensions // []) + [$dim] | unique) |
.topics[$slug].updated = $date |
.topics[$slug].findings_count = $count |
.topics[$slug].status = "in_progress"' \
./sigint.config.json > tmp.$$ && mv tmp.$$ ./sigint.config.json
jq -e -f schemas/sigint-config.jq ./sigint.config.json > /dev/null
Present a summary including:
finding_count)Send shutdown to analyst and tear down the team:
SendMessage(
to: "dimension-analyst-{dimension}",
message: { type: "shutdown_request", reason: "Augment complete" },
summary: "Shutdown analyst"
)
Wait for shutdown confirmation, then:
TeamDelete("{team_name}")
If analyst doesn't complete within a reasonable time:
./reports/{topic_slug}/findings_{dimension}.jsonIf state.json is missing:
Begin the augment process now based on: $ARGUMENTS
npx claudepluginhub zircote-plugins/sigintRuns structured multi-step web research with source synthesis, citations, skeptical evaluation, and confidence/gap analysis. Supports native and dense/frontier modes.
Executes multi-agent research pipeline on any topic with Scout, Investigators, Deep Diver, Verifier, Synthesizer, and Critic reviews to produce verified, sourced reports.
Conducts deep research via parallel web searches, multi-source validation, and confidence tracking across 11 types like market, competitive, technical; outputs cited Markdown reports.