From insight-blueprint
Records reasoning steps during hypothesis-driven analysis as an Insight Journal. Supports observation logging, evidence tracking, method decisions, question management, and hypothesis branching. Journal data is stored as YAML alongside design files. Triggers: "journal", "記録して", "ジャーナル", "推論を残す", "分析ログ", "分析の経緯", "なぜこの結論に至ったか記録", "evidence log".
npx claudepluginhub etoyama/insight-blueprint --plugin insight-blueprintThis skill uses the workspace's default tool permissions.
Records the reasoning process behind an analysis design as a structured
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
Records the reasoning process behind an analysis design as a structured event journal. Each event captures a discrete reasoning step — observation, hypothesis, evidence, question, decision, reflection, conclusion, or branch.
Based on Narrative Scaffolding (Huang+ IUI 2026) and Sensemaking Loop (Pirolli & Card) frameworks.
If $ARGUMENTS contains a design ID (e.g., "FP-H01"), use it directly.
Otherwise, call list_analysis_designs(status="analyzing") and ask user to select.
Validate with get_analysis_design(design_id).
Read .insight/designs/{design_id}_journal.yaml using the Read tool.
metadata:
design_id: "{design_id}"
created_at: "{now in ISO 8601 JST}"
updated_at: "{now in ISO 8601 JST}"
events: []
Listen to user input and classify into InsightType:
| User says... | InsightType | Example content |
|---|---|---|
| データを見たら〜 / 〜が見えた / 〜に気づいた | observe | "2026年1月以降、売上が前年比15%低下" |
| 〜だと思う / 仮説: / 〜が原因では | hypothesize | "価格改定(+8%)が売上低下の主因" |
| 〜で確認した / データが示す / 〜のエビデンス | evidence | "回帰分析でp<0.01の有意な負の相関" |
| 〜が気になる / 〜を調べたい / なぜ〜 | question | "季節要因を除外できているか?" |
| 〜を使う / 〜で分析する / 手法: | decide | "CausalImpact で因果効果を推定する" |
| 振り返ると / 見直すと / 反省点 | reflect | "初期の相関分析では交絡が未考慮だった" |
| 結論: / まとめると / 〜と言える | conclude | "価格改定は売上低下の主因と確認" |
| 別の仮説 / 分岐したい / fork | branch | → Step 4 (Branch Workflow) |
For each event, construct and append to the journal YAML:
- id: "{design_id}-E{nn:02d}" # Sequential within journal
type: "{insight_type}"
content: "{user's description}"
evidence_refs: [] # Ask: "関連するデータソースID or ナレッジIDはある?"
parent_event_id: null # Ask: "どのイベントから派生した?" (show recent events)
metadata: {} # Type-specific (see Metadata Convention below)
created_at: "{now in ISO 8601 JST}"
Update metadata.updated_at in journal file header.
Efficiency rule: Don't ask for evidence_refs and parent_event_id on every event.
Ask only when the user's statement implies a connection. Default to empty/null.
When user wants to branch to an alternative hypothesis:
title, new hypothesis_statement, optional hypothesis_backgroundcreate_analysis_design(
title=new_title,
hypothesis_statement=new_hypothesis,
hypothesis_background=source.hypothesis_background, # Inherit if not provided
parent_id=source_design_id,
theme_id=source.theme_id,
)
branch event in source journal:
- id: "{source_id}-E{nn}"
type: branch
content: "分岐: {new_design_id} — {new_title}"
metadata:
new_design_id: "{new_design_id}"
reason: "{why branching}"
hypothesize event:
metadata:
design_id: "{new_design_id}"
created_at: "{now}"
updated_at: "{now}"
events:
- id: "{new_id}-E01"
type: hypothesize
content: "{new_hypothesis_statement}"
metadata:
forked_from: "{source_design_id}"
created_at: "{now}"
When user is done recording, show:
── Journal Summary: {design_id} ──
Phase: {inferred_phase}
Events: {total} ({observe}obs / {hypothesize}hyp / {evidence}evi / {question}q / {decide}dec / {reflect}ref / {conclude}con)
Open questions: {count}
- {question_content} ({event_id})
Branches: {list of child design IDs}
Latest decision: {method} ({package})
Next: /analysis-reflection {design_id} で振り返りと結論導出
| type | When to use | metadata fields |
|---|---|---|
observe | Raw data observation, pattern noticed | — |
hypothesize | Hypothesis formed or refined | {forked_from?: design_id} |
evidence | Evidence found from data analysis | {direction: "supports" | "contradicts"} |
question | New question or uncertainty raised | {priority?: "high" | "medium" | "low"} |
decide | Method, tool, or approach chosen | {method: str, package?: str, reason?: str} |
methodology への昇格: decide イベントで記録した method/package は、analysis-design の methodology フィールドに昇格できる。
update_analysis_designのmethodologyパラメータで{method, package, reason}を渡す。
| reflect | Meta-level thinking about the analysis | — |
| conclude | Conclusion drawn from evidence | {resolves?: event_id} |
| branch | Fork to alternative hypothesis | {new_design_id: str, reason?: str} |
The current phase is inferred from the latest event type:
| Latest event type | Inferred phase |
|---|---|
observe, hypothesize | Narrative Development |
evidence, question, decide | Investigation |
reflect | Reflection |
conclude, branch | Integration |
.insight/designs/{design_id}_journal.yaml
This file is skill-managed data, not MCP-managed (see YAML Format Reference in analysis-design SKILL.md).
To find sibling hypotheses:
designs = list_analysis_designs(theme_id=target.theme_id)
siblings = [d for d in designs if d.parent_id == target.parent_id and d.id != target.id]
To build hypothesis tree:
designs = list_analysis_designs(theme_id=theme_id)
roots = [d for d in designs if d.parent_id is None]
# Recursively build children from parent_id references
A question event is considered open if no conclude event references it via
metadata.resolves. To list open questions:
questions = [e for e in events if e.type == "question"]
resolved_ids = {e.metadata.resolves for e in events if e.type == "conclude" and e.metadata.get("resolves")}
open_questions = [q for q in questions if q.id not in resolved_ids]
| Tool | Used for |
|---|---|
get_analysis_design(design_id) | Load target design |
list_analysis_designs(status?, theme_id?) | Find designs for tree/sibling queries |
create_analysis_design(...) | Branch workflow (create child design) |
| Situation | Action |
|---|---|
| Design not found | Show error, suggest list_analysis_designs() |
| Journal file corrupted | Backup corrupt file, reinitialize |
| Event ID conflict | Re-scan existing IDs and use max+1 |
| From | To | When |
|---|---|---|
| /analysis-design | → /analysis-journal | After design creation: "推論過程を記録するなら /analysis-journal {id}" |
| /analysis-journal | → /analysis-reflection | Evidence gathered: "振り返りと結論は /analysis-reflection {id}" |
| /analysis-journal | → /analysis-journal | After branch: "分岐先のジャーナル: /analysis-journal {new_id}" |
| /analysis-reflection | → /analysis-journal | Need more evidence: "追加調査は /analysis-journal {id}" |
| /data-lineage | → /analysis-journal | Lineage diagram generated: "リネージ結果を証拠として記録するなら /analysis-journal {id}" |
| /analysis-revision | → /analysis-journal | Need to investigate before fixing: "調査してから修正するなら /analysis-journal {id}" |