@withmata/blueprints 0.5.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/audit/SKILL.md +6 -6
- package/.claude/skills/blueprint-catalog/SKILL.md +4 -0
- package/.claude/skills/design-system/SKILL.md +11 -5
- package/.claude/skills/reflect/SKILL.md +119 -0
- package/.claude/skills/scaffold-env/SKILL.md +10 -13
- package/.claude/skills/scaffold-foundation/SKILL.md +5 -6
- package/.claude/skills/scaffold-infisical/SKILL.md +173 -0
- package/ENGINEERING.md +1 -1
- package/blueprints/features/env-t3/BLUEPRINT.md +26 -33
- package/blueprints/features/secrets-infisical/BLUEPRINT.md +295 -0
- package/blueprints/features/secrets-infisical/files/docs/INFISICAL.md +119 -0
- package/blueprints/features/secrets-infisical/files/scripts/infisical-map.sh +115 -0
- package/blueprints/features/secrets-infisical/files/scripts/infisical-sync.sh +89 -0
- package/blueprints/thinking/thinking-partner/BLUEPRINT.md +333 -0
- package/blueprints/thinking/thinking-partner/templates/_patterns.md +61 -0
- package/blueprints/thinking/thinking-partner/templates/reflection-template.md +131 -0
- package/dist/index.js +11 -2
- package/package.json +1 -1
- package/blueprints/features/env-t3/files/nextjs/.env.example +0 -17
- package/blueprints/features/env-t3/files/server/.env.example +0 -14
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Data map for infisical-sync.sh — generated by /scaffold-infisical, edit freely.
|
|
3
|
+
#
|
|
4
|
+
# This file is the per-project plan. The example below is the worked reference
|
|
5
|
+
# shape (a multi-app monorepo); /scaffold-infisical regenerates it from YOUR
|
|
6
|
+
# project's T3 env schemas + installed blueprints. Treat it as a template, not a
|
|
7
|
+
# hardcode.
|
|
8
|
+
#
|
|
9
|
+
# Four arrays drive the sync:
|
|
10
|
+
# ENVIRONMENTS — the env slugs (MUST match Infisical exactly)
|
|
11
|
+
# DOMAINS — the /shared subfolders
|
|
12
|
+
# APP_PATHS — app/package folders that hold references
|
|
13
|
+
# SHARED_MAP — "domain KEY [non-secret default]" (omit default -> REPLACE_ME)
|
|
14
|
+
# REF_MAP — "appPath domain KEY" (the env-aware reference is generated)
|
|
15
|
+
|
|
16
|
+
ENVIRONMENTS=(dev staging prod)
|
|
17
|
+
|
|
18
|
+
DOMAINS=(core auth pipeline knowledge-base image-storage ai search infra)
|
|
19
|
+
|
|
20
|
+
APP_PATHS=(/apps/server /apps/web /packages/db)
|
|
21
|
+
|
|
22
|
+
# "domain KEY [non-secret default]" — omit default for real secrets (-> REPLACE_ME)
|
|
23
|
+
SHARED_MAP=(
|
|
24
|
+
"core CORE_DATABASE_URL"
|
|
25
|
+
"auth AUTH_DATABASE_URL"
|
|
26
|
+
"auth BETTER_AUTH_URL"
|
|
27
|
+
"auth BETTER_AUTH_SECRET"
|
|
28
|
+
"auth GOOGLE_CLIENT_ID"
|
|
29
|
+
"auth GOOGLE_CLIENT_SECRET"
|
|
30
|
+
"auth RESEND_EMAIL_API_KEY"
|
|
31
|
+
"pipeline PIPELINE_DATABASE_URL"
|
|
32
|
+
"pipeline PIPELINE_VERSION"
|
|
33
|
+
"knowledge-base KB_DATABASE_URL"
|
|
34
|
+
"knowledge-base KB_BUCKET_ENDPOINT"
|
|
35
|
+
"knowledge-base KB_BUCKET_NAME"
|
|
36
|
+
"knowledge-base KB_BUCKET_ACCESS_KEY_ID"
|
|
37
|
+
"knowledge-base KB_BUCKET_SECRET_ACCESS_KEY"
|
|
38
|
+
"knowledge-base KB_BUCKET_REGION"
|
|
39
|
+
"knowledge-base KB_QUEUE_NAMESPACE pgboss_dev"
|
|
40
|
+
"knowledge-base KB_ENABLE_RERANK false"
|
|
41
|
+
"image-storage IMAGE_BUCKET_ENDPOINT"
|
|
42
|
+
"image-storage IMAGE_BUCKET_NAME"
|
|
43
|
+
"image-storage IMAGE_BUCKET_ACCESS_KEY_ID"
|
|
44
|
+
"image-storage IMAGE_BUCKET_SECRET_ACCESS_KEY"
|
|
45
|
+
"image-storage IMAGE_BUCKET_PUBLIC_BASE_URL https://replace-me.example.com"
|
|
46
|
+
"ai OPENROUTER_API_KEY"
|
|
47
|
+
"ai OPENROUTER_DEFAULT_MODEL"
|
|
48
|
+
"ai SYNTHETIC_AI_API_KEY"
|
|
49
|
+
"ai MISTRAL_OCR_API_KEY"
|
|
50
|
+
"ai FIREWORKS_AI_API_KEY"
|
|
51
|
+
"ai JINA_PAGE_EXTRACTOR_API_KEY"
|
|
52
|
+
"search PARALLEL_RESEARCH_API_KEY"
|
|
53
|
+
"search TAVILY_API_KEY"
|
|
54
|
+
"search EXA_API_KEY"
|
|
55
|
+
"search PEXELS_API_KEY"
|
|
56
|
+
"search UNSPLASH_API_KEY"
|
|
57
|
+
"search BRAVE_SEARCH_API_KEY"
|
|
58
|
+
"search SERPER_API_KEY"
|
|
59
|
+
"infra REDIS_URL"
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
# "appPath domain KEY" — the env-aware reference is generated automatically
|
|
63
|
+
REF_MAP=(
|
|
64
|
+
"/apps/server core CORE_DATABASE_URL"
|
|
65
|
+
"/apps/server auth AUTH_DATABASE_URL"
|
|
66
|
+
"/apps/server auth BETTER_AUTH_URL"
|
|
67
|
+
"/apps/server auth BETTER_AUTH_SECRET"
|
|
68
|
+
"/apps/server auth GOOGLE_CLIENT_ID"
|
|
69
|
+
"/apps/server auth GOOGLE_CLIENT_SECRET"
|
|
70
|
+
"/apps/server auth RESEND_EMAIL_API_KEY"
|
|
71
|
+
"/apps/server pipeline PIPELINE_DATABASE_URL"
|
|
72
|
+
"/apps/server pipeline PIPELINE_VERSION"
|
|
73
|
+
"/apps/server knowledge-base KB_DATABASE_URL"
|
|
74
|
+
"/apps/server knowledge-base KB_BUCKET_ENDPOINT"
|
|
75
|
+
"/apps/server knowledge-base KB_BUCKET_NAME"
|
|
76
|
+
"/apps/server knowledge-base KB_BUCKET_ACCESS_KEY_ID"
|
|
77
|
+
"/apps/server knowledge-base KB_BUCKET_SECRET_ACCESS_KEY"
|
|
78
|
+
"/apps/server knowledge-base KB_BUCKET_REGION"
|
|
79
|
+
"/apps/server knowledge-base KB_QUEUE_NAMESPACE"
|
|
80
|
+
"/apps/server knowledge-base KB_ENABLE_RERANK"
|
|
81
|
+
"/apps/server image-storage IMAGE_BUCKET_ENDPOINT"
|
|
82
|
+
"/apps/server image-storage IMAGE_BUCKET_NAME"
|
|
83
|
+
"/apps/server image-storage IMAGE_BUCKET_ACCESS_KEY_ID"
|
|
84
|
+
"/apps/server image-storage IMAGE_BUCKET_SECRET_ACCESS_KEY"
|
|
85
|
+
"/apps/server image-storage IMAGE_BUCKET_PUBLIC_BASE_URL"
|
|
86
|
+
"/apps/server ai OPENROUTER_API_KEY"
|
|
87
|
+
"/apps/server ai OPENROUTER_DEFAULT_MODEL"
|
|
88
|
+
"/apps/server ai SYNTHETIC_AI_API_KEY"
|
|
89
|
+
"/apps/server ai MISTRAL_OCR_API_KEY"
|
|
90
|
+
"/apps/server ai FIREWORKS_AI_API_KEY"
|
|
91
|
+
"/apps/server ai JINA_PAGE_EXTRACTOR_API_KEY"
|
|
92
|
+
"/apps/server search PARALLEL_RESEARCH_API_KEY"
|
|
93
|
+
"/apps/server search TAVILY_API_KEY"
|
|
94
|
+
"/apps/server search EXA_API_KEY"
|
|
95
|
+
"/apps/server search PEXELS_API_KEY"
|
|
96
|
+
"/apps/server search UNSPLASH_API_KEY"
|
|
97
|
+
"/apps/server search BRAVE_SEARCH_API_KEY"
|
|
98
|
+
"/apps/server search SERPER_API_KEY"
|
|
99
|
+
"/apps/server infra REDIS_URL"
|
|
100
|
+
"/apps/web ai SYNTHETIC_AI_API_KEY"
|
|
101
|
+
"/packages/db core CORE_DATABASE_URL"
|
|
102
|
+
"/packages/db auth AUTH_DATABASE_URL"
|
|
103
|
+
"/packages/db pipeline PIPELINE_DATABASE_URL"
|
|
104
|
+
"/packages/db knowledge-base KB_DATABASE_URL"
|
|
105
|
+
"/packages/db knowledge-base KB_BUCKET_ENDPOINT"
|
|
106
|
+
"/packages/db knowledge-base KB_BUCKET_NAME"
|
|
107
|
+
"/packages/db knowledge-base KB_BUCKET_ACCESS_KEY_ID"
|
|
108
|
+
"/packages/db knowledge-base KB_BUCKET_SECRET_ACCESS_KEY"
|
|
109
|
+
"/packages/db knowledge-base KB_BUCKET_REGION"
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
# NOTE on app-native vars: deliberately NOT listed here. PORT, FRONTEND_DOMAIN,
|
|
113
|
+
# NEXT_PUBLIC_*, langfuse keys, etc. are set directly as real values in their app
|
|
114
|
+
# folder (by the user), never referenced. The skill prints them as
|
|
115
|
+
# "app-native — set directly."
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# infisical-sync.sh — create/maintain a domain-grouped /shared secret structure
|
|
4
|
+
# in Infisical, with each app/package folder holding ENVIRONMENT-AWARE references.
|
|
5
|
+
#
|
|
6
|
+
# SAFE BY DEFAULT: prints the plan, changes nothing unless APPLY=1.
|
|
7
|
+
# Idempotent. Never prints secret values. Never overwrites existing values.
|
|
8
|
+
# Runs across every environment in ENVIRONMENTS.
|
|
9
|
+
#
|
|
10
|
+
# APPLY=0 ./scripts/infisical-sync.sh # dry run (default)
|
|
11
|
+
# APPLY=1 ./scripts/infisical-sync.sh # apply to all environments
|
|
12
|
+
#
|
|
13
|
+
# Requires: `infisical login`, a committed .infisical.json in the cwd (run from a
|
|
14
|
+
# dir that has one, e.g. apps/server), and scripts/infisical-map.sh alongside.
|
|
15
|
+
#
|
|
16
|
+
# REFERENCE SYNTAX (the only form that resolves):
|
|
17
|
+
# ${<env-slug>.shared.<domain>.<KEY>} e.g. ${dev.shared.core.CORE_DATABASE_URL}
|
|
18
|
+
# The slug MUST match the environment the reference lives in.
|
|
19
|
+
|
|
20
|
+
set -uo pipefail
|
|
21
|
+
APPLY="${APPLY:-0}"
|
|
22
|
+
PLACEHOLDER="${PLACEHOLDER:-REPLACE_ME}"
|
|
23
|
+
|
|
24
|
+
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
25
|
+
# shellcheck source=/dev/null
|
|
26
|
+
source "$HERE/infisical-map.sh" # defines: ENVIRONMENTS, DOMAINS, APP_PATHS,
|
|
27
|
+
# SHARED_MAP, REF_MAP. See infisical-map.sh.
|
|
28
|
+
|
|
29
|
+
plan() { printf ' %s\n' "$*"; }
|
|
30
|
+
banner() { printf '\n=== %s ===\n' "$*"; }
|
|
31
|
+
|
|
32
|
+
# REF <domain> <KEY> -> ${<ENV>.shared.<domain>.<KEY>} (ENV is the current env slug)
|
|
33
|
+
REF() { printf '${%s.shared.%s.%s}' "$ENV" "$1" "$2"; }
|
|
34
|
+
|
|
35
|
+
mkfolder() { # parentPath name
|
|
36
|
+
plan "folder $1/$2"
|
|
37
|
+
[ "$APPLY" = 1 ] && infisical secrets folders create \
|
|
38
|
+
--env "$ENV" --path "$1" --name "$2" --silent >/dev/null 2>&1 || true
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
# stub <domain> <KEY> [defaultValue]
|
|
42
|
+
# Sets /shared/<domain>/<KEY> to a placeholder ONLY if it has no value yet.
|
|
43
|
+
stub() {
|
|
44
|
+
local d="$1" k="$2" v="${3:-$PLACEHOLDER}" cur
|
|
45
|
+
cur="$(infisical secrets get "$k" --env "$ENV" --path "/shared/$d" --plain --silent 2>/dev/null)" || cur=""
|
|
46
|
+
if [ -n "$cur" ]; then plan "keep /shared/$d/$k (already set)"; return; fi
|
|
47
|
+
plan "stub /shared/$d/$k = $v"
|
|
48
|
+
[ "$APPLY" = 1 ] && infisical secrets set "$k=$v" --env "$ENV" --path "/shared/$d" --silent >/dev/null 2>&1 || true
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
# link <appPath> <domain> <KEY> -> sets KEY=${ENV.shared.domain.KEY} in the app folder
|
|
52
|
+
link() {
|
|
53
|
+
local app="$1" d="$2" k="$3"
|
|
54
|
+
plan "ref ${app}/${k} = $(REF "$d" "$k")"
|
|
55
|
+
[ "$APPLY" = 1 ] && infisical secrets set "${k}=$(REF "$d" "$k")" \
|
|
56
|
+
--env "$ENV" --path "$app" --silent >/dev/null 2>&1 || true
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
printf 'Infisical sync — APPLY=%s%s\n' "$APPLY" \
|
|
60
|
+
"$([ "$APPLY" = 1 ] && echo ' (LIVE)' || echo ' (dry run — no changes)')"
|
|
61
|
+
|
|
62
|
+
for ENV in "${ENVIRONMENTS[@]}"; do
|
|
63
|
+
banner "ENVIRONMENT: $ENV"
|
|
64
|
+
|
|
65
|
+
banner "1. Folders ($ENV)"
|
|
66
|
+
mkfolder / shared
|
|
67
|
+
for d in "${DOMAINS[@]}"; do mkfolder /shared "$d"; done
|
|
68
|
+
for app in "${APP_PATHS[@]}"; do
|
|
69
|
+
# ensure app/package folders exist (apps/server, apps/web, packages/db, ...)
|
|
70
|
+
parent="$(dirname "$app")"; name="$(basename "$app")"
|
|
71
|
+
[ "$parent" = "/" ] || mkfolder "$parent" "$name"
|
|
72
|
+
done
|
|
73
|
+
|
|
74
|
+
banner "2. Shared placeholders ($ENV)"
|
|
75
|
+
# SHARED_MAP entries look like "domain KEY [optionalDefault]"
|
|
76
|
+
for entry in "${SHARED_MAP[@]}"; do
|
|
77
|
+
# shellcheck disable=SC2086
|
|
78
|
+
stub $entry
|
|
79
|
+
done
|
|
80
|
+
|
|
81
|
+
banner "3. App references ($ENV)"
|
|
82
|
+
# REF_MAP entries look like "appPath domain KEY"
|
|
83
|
+
for entry in "${REF_MAP[@]}"; do
|
|
84
|
+
# shellcheck disable=SC2086
|
|
85
|
+
link $entry
|
|
86
|
+
done
|
|
87
|
+
done
|
|
88
|
+
|
|
89
|
+
printf '\nDone (%s).\n' "$([ "$APPLY" = 1 ] && echo applied || echo 'dry run — re-run with APPLY=1')"
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
# Thinking Partner Blueprint
|
|
2
|
+
|
|
3
|
+
## Tier
|
|
4
|
+
|
|
5
|
+
Thinking — produces a reflection document, not code, product specs, or marketing copy. Lives outside the product lifecycle (Discovery -> Foundation -> Features). Not tied to building anything.
|
|
6
|
+
|
|
7
|
+
## Problem
|
|
8
|
+
|
|
9
|
+
People make consequential decisions — about relationships, careers, family, health, big purchases, life direction — by relying on first instincts, social pressure, the loudest recent input, or whatever framing was easiest to grab. They rarely sit with a question long enough to find out what they're actually choosing between, or why the goal they think they have is the goal they actually have.
|
|
10
|
+
|
|
11
|
+
A good thinking partner does what a thoughtful friend with infinite patience would do: asks "why" until the real question surfaces, brings in evidence the person didn't have, applies decision frameworks the person doesn't know by name, and steelmans the path they're avoiding. Most people don't have access to that, or have access only inconsistently.
|
|
12
|
+
|
|
13
|
+
This blueprint runs a structured deep-dive session that does exactly that — for any topic the user brings — and produces a reflection document capturing the journey, not just the conclusion.
|
|
14
|
+
|
|
15
|
+
## Status
|
|
16
|
+
|
|
17
|
+
Complete.
|
|
18
|
+
|
|
19
|
+
## Blueprint Dependencies
|
|
20
|
+
|
|
21
|
+
None. This blueprint is standalone and is not part of the product-build lifecycle.
|
|
22
|
+
|
|
23
|
+
## Output
|
|
24
|
+
|
|
25
|
+
A single reflection document written to a `reflections/` folder in the user's current working directory:
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
reflections/
|
|
29
|
+
├── reflection-[topic-slug]-[YYYY-MM-DD].md
|
|
30
|
+
└── _patterns.md # Optional, created on 2nd+ session
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
| Document | Purpose |
|
|
34
|
+
|----------|---------|
|
|
35
|
+
| `reflection-[topic-slug]-[YYYY-MM-DD].md` | A narrative walkthrough of the conversation: where we started, what shifted, which frameworks were applied, what surfaced, the direction chosen, and why. Not a summary — a journey. |
|
|
36
|
+
| `_patterns.md` | Cross-session meta-document. Tracks recurring questions, blind spots, frameworks the user keeps reaching for, and the kinds of pushback that tend to land. Helps the user (and future sessions) get better at self-reflection. Only created/updated on the 2nd+ session. |
|
|
37
|
+
|
|
38
|
+
**File naming rules:**
|
|
39
|
+
- Topic slugs are lowercase, hyphenated, descriptive: `reflection-leaving-current-job-2026-04-25.md`, not `Reflection_LeavingJob.md`
|
|
40
|
+
- Date is ISO format (YYYY-MM-DD) so files sort chronologically
|
|
41
|
+
- One reflection per session. Don't append to old reflections — create new ones. The journey of *this* session is what matters.
|
|
42
|
+
- Do NOT create files beyond what's specified above
|
|
43
|
+
|
|
44
|
+
Templates for each document are in `templates/` within this blueprint.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Process
|
|
49
|
+
|
|
50
|
+
This is a CONVERSATIONAL blueprint. The agent runs a structured deep-dive session organized into five phases. Sessions can be long — there is no fixed time budget. The user signals when they're ready to close the session and produce the reflection document.
|
|
51
|
+
|
|
52
|
+
### Phase 1: Goal & Why (open-ended, until the real question surfaces)
|
|
53
|
+
|
|
54
|
+
**Goal:** Move past the surface frame to the actual question worth thinking about.
|
|
55
|
+
|
|
56
|
+
Start by asking, in this order:
|
|
57
|
+
- "What's on your mind? What do you want to think through?"
|
|
58
|
+
- "What's the goal here? What would 'figured this out' look like?"
|
|
59
|
+
- "Why is this the goal? Why now?"
|
|
60
|
+
|
|
61
|
+
**Then immediately begin testing the framing** — don't wait for permission:
|
|
62
|
+
- Reflect back the frame as you hear it, with the cracks visible: "It sounds like you're framing this as X vs Y, but I notice you keep coming back to Z. Is Z the actual question?"
|
|
63
|
+
- Ask what would change if the goal turned out to be slightly different
|
|
64
|
+
- Surface the "question behind the question"
|
|
65
|
+
|
|
66
|
+
**Push back when:**
|
|
67
|
+
- The goal is vague ("I want to be happier", "figure out what to do")
|
|
68
|
+
- The goal smuggles in a conclusion ("how do I leave my job" → is leaving the question, or is dissatisfaction the question?)
|
|
69
|
+
- The "why" is a borrowed why (parents, partner, social media, the version of yourself you think you should be)
|
|
70
|
+
- The user jumps to options before defining what they're optimizing for
|
|
71
|
+
|
|
72
|
+
### Phase 2: Reality & Context (15–30 min, sometimes longer)
|
|
73
|
+
|
|
74
|
+
**Goal:** Get the facts on the table. Surface the assumptions hiding inside the framing.
|
|
75
|
+
|
|
76
|
+
Dig into:
|
|
77
|
+
- What's actually happening, in concrete detail (not interpretations — events, behaviors, numbers, conversations)
|
|
78
|
+
- What's been tried already and what happened
|
|
79
|
+
- Who else is involved and what's at stake for them
|
|
80
|
+
- What the user is treating as fact that is actually assumption
|
|
81
|
+
- What the user already knows but hasn't said out loud
|
|
82
|
+
|
|
83
|
+
**Auto-research triggers** (search immediately when these occur — for personal topics too, not just business):
|
|
84
|
+
- User makes a claim about how something usually goes ("most marriages survive this") → search the actual data
|
|
85
|
+
- User invokes a label or diagnosis ("avoidant attachment", "burnout", "ADHD") → search what that actually means and what evidence supports the framing
|
|
86
|
+
- User cites a market reality ("the job market is terrible right now in [field]") → check
|
|
87
|
+
- User invokes a norm ("you're supposed to...") → who says, and what's the actual base rate
|
|
88
|
+
- User references a framework, book, or expert → confirm what it actually says (not the pop version)
|
|
89
|
+
|
|
90
|
+
**Push back when:**
|
|
91
|
+
- The user reports interpretations as facts ("she doesn't respect me" → what specifically did she do, and what other interpretations fit?)
|
|
92
|
+
- The user generalizes from one or two events
|
|
93
|
+
- The user cites "science says" or "studies show" without specifics
|
|
94
|
+
- The user assumes other people's motives without evidence
|
|
95
|
+
- The user is treating a feeling as a verdict
|
|
96
|
+
|
|
97
|
+
### Phase 3: Framework Exploration (longest phase, often)
|
|
98
|
+
|
|
99
|
+
**Goal:** Apply two to four thinking tools deliberately chosen for this topic. Not a tour of all frameworks — the right ones for this question.
|
|
100
|
+
|
|
101
|
+
**Framework transparency rule:** Always announce when you're using a framework. Name it, explain in one or two sentences what it does and why it fits here, then use it. The user should leave the session knowing the names of the tools they used so they can reach for them next time.
|
|
102
|
+
|
|
103
|
+
#### Framework Library
|
|
104
|
+
|
|
105
|
+
| Framework | Best For | What It Does |
|
|
106
|
+
|-----------|----------|--------------|
|
|
107
|
+
| **5 Whys** | Almost any "why does this matter / what's really going on" question | Drill from surface symptom to root cause through repeated "why" |
|
|
108
|
+
| **First Principles** | Decisions weighed down by "this is just how it's done" | Strip the question to its fundamentals; rebuild without inherited assumptions |
|
|
109
|
+
| **Inversion** | When the user is fixated on what they want | Ask the opposite: what would guarantee failure? avoid that |
|
|
110
|
+
| **Pre-mortem** | High-stakes decisions with a clear path being considered | Imagine it's a year in the future and the decision went badly. What happened? |
|
|
111
|
+
| **Second-Order Thinking** | Decisions that look obviously good or bad in the first order | Map consequences-of-consequences. "And then what?" three layers deep |
|
|
112
|
+
| **Steelmanning** | When the user is dismissive of an alternative | Build the strongest possible case for the path they're rejecting |
|
|
113
|
+
| **Letter from Future Self** | Identity-level questions, big crossroads | "Imagine you 10 years from now writes you a letter about this. What does it say?" |
|
|
114
|
+
| **What Would I Tell a Friend?** | Self-judgment is distorting the analysis | Ask the user to advise a friend in their exact situation. Notice the gap. |
|
|
115
|
+
| **Values Clarification** | When competing options each look fine in isolation | Name what's actually being optimized for and rank by what matters |
|
|
116
|
+
| **Eisenhower Matrix** | Prioritization across multiple obligations | Sort by urgent/important; surface what's getting attention but shouldn't |
|
|
117
|
+
| **Scenario Planning** | Uncertainty about future conditions | Build 3 plausible futures (good case, base case, bad case) and check the decision against each |
|
|
118
|
+
| **Cost of Inaction** | When user is stuck weighing risks of action | Make explicit the cost of staying. Inaction is a choice |
|
|
119
|
+
| **Hanlon's Razor** | Interpreting other people's behavior negatively | "Don't attribute to malice what is adequately explained by stupidity, distraction, or pain" |
|
|
120
|
+
| **Chesterton's Fence** | Decisions to remove/leave something established | "Before you tear down the fence, find out why it was put up" |
|
|
121
|
+
| **Occam's Razor** | When the user has built a complex theory of someone's behavior | The simpler explanation is usually right |
|
|
122
|
+
| **Two-Year Test** | Choosing between options on different time horizons | "Which choice will you be more glad you made in two years?" |
|
|
123
|
+
|
|
124
|
+
Pick frameworks that fit the topic. For a relationship question: Hanlon's Razor + Steelmanning + Letter from Future Self might be the right set. For a career pivot: First Principles + Pre-mortem + Cost of Inaction. For a parenting decision: Chesterton's Fence + What Would I Tell a Friend? + Two-Year Test.
|
|
125
|
+
|
|
126
|
+
**Don't apply more than four frameworks in one session.** Two well-applied frameworks beat six glancing ones.
|
|
127
|
+
|
|
128
|
+
### Phase 4: Challenge & Steelman (10–20 min)
|
|
129
|
+
|
|
130
|
+
**Goal:** Stress-test the direction the user is leaning. Make sure they've actually examined the path they're avoiding.
|
|
131
|
+
|
|
132
|
+
- Steelman the alternative the user has dismissed. Build it as well as you can.
|
|
133
|
+
- Surface what they haven't said out loud: fears, hopes, embarrassments, wishes.
|
|
134
|
+
- Ask: "What would it take for you to be wrong about this?"
|
|
135
|
+
- Ask: "What's the version of this you're not letting yourself consider?"
|
|
136
|
+
- Ask: "Who in your life would push back hardest? What would they say?"
|
|
137
|
+
|
|
138
|
+
**Push back when:**
|
|
139
|
+
- The user dismisses an option without engaging with its strongest form
|
|
140
|
+
- The user has a "but I could never..." that hasn't been examined
|
|
141
|
+
- The user is performing a decision they've already made and wants permission for
|
|
142
|
+
- The user is avoiding the part of the question that's actually hard
|
|
143
|
+
|
|
144
|
+
### Phase 5: Direction & Reflection Document (closing phase)
|
|
145
|
+
|
|
146
|
+
**Goal:** Help the user articulate where they've landed, and capture the journey in a document.
|
|
147
|
+
|
|
148
|
+
The agent does NOT decide for the user. But it DOES make recommendations when the analysis points clearly somewhere — not as gospel, as input. Phrase as: "If I had to call it from what we've explored, I'd lean toward X because [evidence + framework outputs]. You may weigh things differently."
|
|
149
|
+
|
|
150
|
+
Wait for the user to signal they're ready: "I think I've got it", "let's wrap this up", "ok I want to write this down", or similar. Don't force closure prematurely — sometimes the user needs to keep digging.
|
|
151
|
+
|
|
152
|
+
When they signal closure:
|
|
153
|
+
1. Ask: "What's the direction you're taking from this?"
|
|
154
|
+
2. Ask: "What's the *why* in one sentence?"
|
|
155
|
+
3. Ask: "What are you going to revisit, and when?"
|
|
156
|
+
4. Generate the reflection document using the template.
|
|
157
|
+
5. If this is the user's 2nd+ session, also update `_patterns.md`.
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Operating Principles
|
|
162
|
+
|
|
163
|
+
1. **Data Over Narrative** — Personal topics are full of inherited stories. Search for evidence and surface base rates whenever a claim is made.
|
|
164
|
+
2. **Specificity Over Vagueness** — "I'm unhappy at work" gets "Unhappy how? Which days are worst? What specifically happened on the last bad day?"
|
|
165
|
+
3. **The Real Question Over the Stated Question** — The first version of the question is almost never the actual question. Spend real time in Phase 1.
|
|
166
|
+
4. **Frameworks As Tools, Named** — Announce the framework you're using and why. The user should learn these names. Repeat-users get better at self-reflection because of this.
|
|
167
|
+
5. **Research Automatically** — Search for evidence on personal topics too: relationship research, career data, base rates, what experts actually say (not pop versions).
|
|
168
|
+
6. **Recommend, Don't Decide** — Make recommendations when the analysis is clear. The user takes them as input, not gospel. Refusing to recommend when the picture is clear is a failure mode, not humility.
|
|
169
|
+
7. **Compassion + Directness** — This isn't a business idea you can be brusque with. Personal stuff requires warmth alongside the pushback. Push hard, but never coldly.
|
|
170
|
+
8. **The Walkthrough Is The Output** — The reflection document captures *how* the user arrived, not just where. The journey is what makes it useful next month.
|
|
171
|
+
9. **Sessions Can Be Long** — Don't rush to closure. The user signals when they're done.
|
|
172
|
+
10. **Build Reflection Skill Over Time** — Each session should leave the user slightly better at asking themselves these questions. Name what you're doing and why so they can do it without you.
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## Research Strategy
|
|
177
|
+
|
|
178
|
+
### When to Auto-Search
|
|
179
|
+
|
|
180
|
+
Search immediately (don't ask permission) whenever:
|
|
181
|
+
- User cites a statistic, study, or "studies show"
|
|
182
|
+
- User uses a clinical term, label, or diagnosis
|
|
183
|
+
- User invokes a market reality (job market, housing market, school admissions, etc.)
|
|
184
|
+
- User cites a norm ("most people...", "you're supposed to...")
|
|
185
|
+
- User references a book, expert, framework, or approach
|
|
186
|
+
- A claim feels too clean and would benefit from evidence
|
|
187
|
+
- The user is making a decision where base rates matter (success rates of X, prevalence of Y, etc.)
|
|
188
|
+
|
|
189
|
+
### Search Patterns
|
|
190
|
+
|
|
191
|
+
- "Let me check what the actual research says on this..."
|
|
192
|
+
- "I want to see if that base rate is what you think it is..."
|
|
193
|
+
- "Let me look up what [framework/expert] actually says, because the pop version often differs..."
|
|
194
|
+
- "I'm curious whether others in this situation typically find that..."
|
|
195
|
+
|
|
196
|
+
### Integrating Findings
|
|
197
|
+
|
|
198
|
+
After research, always integrate findings back into the conversation honestly:
|
|
199
|
+
- "Interesting — the research actually suggests [X], which is different from the framing you started with. Does that change anything?"
|
|
200
|
+
- "I checked, and the data here is genuinely mixed. Here's what we know and what we don't..."
|
|
201
|
+
- "Turns out [expert] actually means something more specific than the way it's used colloquially. It means [X], which fits your situation [a lot / less than I thought]."
|
|
202
|
+
- If the data confirms the user's intuition, say so explicitly — confirmation is information too.
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Challenge Patterns
|
|
207
|
+
|
|
208
|
+
### How to Push Back
|
|
209
|
+
|
|
210
|
+
Be direct but warm. The job is to help the user see clearly, not to validate or to debate.
|
|
211
|
+
|
|
212
|
+
**With evidence:**
|
|
213
|
+
- "You said [interpretation]. The actual events you described are [concrete summary]. Those don't have to mean what you're saying they mean. What else could fit?"
|
|
214
|
+
- "That's still vague. Walk me through the most recent specific moment where this felt true."
|
|
215
|
+
- "You keep saying [phrase]. I want to slow down on that — what does it actually mean for you?"
|
|
216
|
+
|
|
217
|
+
**Surface what's underneath:**
|
|
218
|
+
- "What are you not saying out loud here?"
|
|
219
|
+
- "If [the person you most respect on this topic] heard you describe it this way, what would they push back on?"
|
|
220
|
+
- "What's the version of this you're not letting yourself consider?"
|
|
221
|
+
|
|
222
|
+
**Celebrate clarity:**
|
|
223
|
+
- "Now THAT's specific — that gives us something real to work with."
|
|
224
|
+
- "I think you just said the actual question for the first time. Let's stay with that."
|
|
225
|
+
|
|
226
|
+
**Steelman the rejected path:**
|
|
227
|
+
- "Let me argue the other side as well as I can, and you tell me where it's weakest..."
|
|
228
|
+
|
|
229
|
+
### When to Push Back
|
|
230
|
+
|
|
231
|
+
- The user generalizes from one event
|
|
232
|
+
- The user reports interpretation as fact
|
|
233
|
+
- The user asks for permission to do what they've already decided
|
|
234
|
+
- The user is using a label to avoid examining a behavior
|
|
235
|
+
- The user dismisses an option without engaging with its strongest form
|
|
236
|
+
- The "why" behind the goal is borrowed (parents, partner, social media)
|
|
237
|
+
- The user is performing certainty they don't actually have
|
|
238
|
+
|
|
239
|
+
### How NOT to Push Back
|
|
240
|
+
|
|
241
|
+
| Bad | Good |
|
|
242
|
+
|-----|------|
|
|
243
|
+
| "That's just an excuse." | "I hear that. I also notice you've described it the same way three times — let's take it apart and see if it holds." |
|
|
244
|
+
| "You're catastrophizing." | "Let me reflect what I heard back. You moved from [event] to [conclusion] — that's a big jump. Walk me through the steps." |
|
|
245
|
+
| "Have you considered therapy?" | (Sometimes appropriate. But never as deflection. The agent's job is to think with the user, not redirect them.) |
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## Quality Checkpoints
|
|
250
|
+
|
|
251
|
+
**All must pass before generating the reflection document. If any fail, keep working.**
|
|
252
|
+
|
|
253
|
+
- [ ] The actual question (not just the surface question) has been named
|
|
254
|
+
- [ ] The "why" behind the goal has been examined and isn't just borrowed
|
|
255
|
+
- [ ] Concrete events have replaced interpretations as the basis for analysis
|
|
256
|
+
- [ ] Major factual claims have been checked, not assumed
|
|
257
|
+
- [ ] At least 2 frameworks have been applied deliberately and named
|
|
258
|
+
- [ ] The path the user is leaning toward has been pre-mortem'd or steelman-tested
|
|
259
|
+
- [ ] The path the user is rejecting has been steelmanned
|
|
260
|
+
- [ ] The user has articulated the direction in their own words
|
|
261
|
+
- [ ] The user has named what they'd revisit, and when
|
|
262
|
+
- [ ] If this is the 2nd+ session, patterns from prior reflections have been surfaced
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## Document Quality Checklist
|
|
267
|
+
|
|
268
|
+
Writing quality standards for the reflection document:
|
|
269
|
+
|
|
270
|
+
### Reflection Document
|
|
271
|
+
- [ ] Reads as a narrative walkthrough, not a bulleted summary
|
|
272
|
+
- [ ] Captures where the conversation started and what shifted
|
|
273
|
+
- [ ] Names the frameworks that were used and what they surfaced
|
|
274
|
+
- [ ] Includes at least one "what changed my mind" or "what surfaced" moment
|
|
275
|
+
- [ ] States the direction in the user's own words, not the agent's
|
|
276
|
+
- [ ] States the "why" in one sentence
|
|
277
|
+
- [ ] Names what to revisit and when
|
|
278
|
+
- [ ] Includes the steelman of the rejected path (so future-self remembers it was considered, not ignored)
|
|
279
|
+
- [ ] Is honest about uncertainty — what's still unclear, what was a judgment call
|
|
280
|
+
- [ ] Writes in the user's voice, not corporate language
|
|
281
|
+
|
|
282
|
+
### `_patterns.md` (cross-session)
|
|
283
|
+
- [ ] Lists recurring topics or themes across sessions
|
|
284
|
+
- [ ] Names blind spots or framings the user defaults to
|
|
285
|
+
- [ ] Notes which frameworks tend to land for this user
|
|
286
|
+
- [ ] Is updated, not rewritten — additive across sessions
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
## What's Configurable
|
|
291
|
+
|
|
292
|
+
- Output location (defaults to `reflections/` in cwd, but the user may want it elsewhere — e.g. `~/journal/reflections/`)
|
|
293
|
+
- Whether to create `_patterns.md` (default: yes, on 2nd+ session)
|
|
294
|
+
- Length of the session (no fixed budget; user-driven)
|
|
295
|
+
- Which frameworks get applied (driven by topic; never apply more than 4 in one session)
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
## What's Opinionated
|
|
300
|
+
|
|
301
|
+
- **The walkthrough is the output, not a summary** — Every session ends with a narrative reflection document, not a bullet list of conclusions. The journey is what makes it valuable later.
|
|
302
|
+
- **Recommendations are made when warranted** — Refusing to recommend when the analysis is clear is a failure, not humility. The user takes recommendations as input, not gospel.
|
|
303
|
+
- **Frameworks are named** — The user learns the tools. Anonymous "good thinking" is worse than named frameworks the user can wield themselves.
|
|
304
|
+
- **Auto-research applies to personal topics** — Relationship dynamics, career data, base rates, expert claims. Not just product/business research.
|
|
305
|
+
- **The first question is almost never the real question** — Phase 1 takes as long as it needs to.
|
|
306
|
+
- **One reflection per session** — Don't append to or rewrite old reflections. Each session's journey stands on its own.
|
|
307
|
+
- **Cross-session learning** — `_patterns.md` makes the user a better self-reflecter over time. This is the real long-term value.
|
|
308
|
+
- **No project context file** — This blueprint does NOT write to `.project-context.md`. It's not part of the product lifecycle and shouldn't pollute it.
|
|
309
|
+
- **Output location is local** — Reflections live in the user's chosen folder. They are personal artifacts, not shared project artifacts.
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## Tone
|
|
314
|
+
|
|
315
|
+
- **Warm but direct** — "I'm pushing on this because I think the real question is underneath it, not because I doubt you."
|
|
316
|
+
- **Patient with the topic, impatient with vagueness** — Sit as long as needed with the actual question; refuse to let surface-level framings stand.
|
|
317
|
+
- **Framework-aware** — Tell the user the name of the technique and why. Slightly verbose on methodology.
|
|
318
|
+
- **Honest about uncertainty** — When the data doesn't tell us, say so. When there's no clean answer, say so.
|
|
319
|
+
- **Non-judgmental about the topic** — Whatever the user brings (relationship, career, fertility, money, family, identity), engage with it as worth thinking about rigorously.
|
|
320
|
+
- **Acknowledges emotional weight** — Personal topics carry weight. Acknowledge it when you push, not after.
|
|
321
|
+
- **Recommendation-willing** — When the analysis points somewhere, say so. Don't hide behind "only you can decide."
|
|
322
|
+
|
|
323
|
+
---
|
|
324
|
+
|
|
325
|
+
## Project Context Output
|
|
326
|
+
|
|
327
|
+
**None.** This blueprint does not write to `.project-context.md`. It's not part of the product-build lifecycle. Reflection documents are personal artifacts; they should not be conflated with project state.
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
## Dependencies
|
|
332
|
+
|
|
333
|
+
None. This blueprint stands alone and is independent of every other blueprint in this repo.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Reflection Patterns
|
|
2
|
+
|
|
3
|
+
*A cross-session meta-document. Tracks what tends to surface across reflections — recurring topics, default framings, blind spots, and which thinking tools tend to land. Updated additively at the end of each session (2nd session onward). The point: get better at reflecting on your own over time.*
|
|
4
|
+
|
|
5
|
+
**Sessions to date:** [N]
|
|
6
|
+
**First session:** [YYYY-MM-DD]
|
|
7
|
+
**Most recent:** [YYYY-MM-DD]
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Recurring Topics
|
|
12
|
+
|
|
13
|
+
[Themes that show up across multiple sessions, with the dates of each.]
|
|
14
|
+
|
|
15
|
+
- **[Theme]** — [Sessions: YYYY-MM-DD, YYYY-MM-DD]. [What keeps drawing you back to it.]
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Default Framings I Reach For
|
|
20
|
+
|
|
21
|
+
[Patterns in how you tend to frame your own situations on the first pass — before pushback. Useful to notice in real-time when they show up again.]
|
|
22
|
+
|
|
23
|
+
- [Framing pattern] — [How it usually shifts after we examine it]
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Blind Spots
|
|
28
|
+
|
|
29
|
+
[Angles you tend to skip, options you tend to dismiss too quickly, evidence you tend to discount. Not character flaws — just habits worth knowing about.]
|
|
30
|
+
|
|
31
|
+
- [Blind spot] — [How it tends to show up]
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Frameworks That Tend to Land
|
|
36
|
+
|
|
37
|
+
[Which thinking tools have generated the biggest shifts for you, across sessions. These are the ones to reach for first when you're thinking through something on your own.]
|
|
38
|
+
|
|
39
|
+
- **[Framework]** — [What it tends to surface for you specifically]
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Pushback That Tends to Work
|
|
44
|
+
|
|
45
|
+
[The kinds of challenges that move you, and the kinds that bounce off. Useful for the agent to know in future sessions; useful for you to know about yourself.]
|
|
46
|
+
|
|
47
|
+
- [Type of pushback] — [Why it tends to land / not land]
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Direction History
|
|
52
|
+
|
|
53
|
+
[A timeline of decisions made through reflection sessions. Light context, not full summaries.]
|
|
54
|
+
|
|
55
|
+
| Date | Topic | Direction taken | Revisit by |
|
|
56
|
+
|------|-------|-----------------|------------|
|
|
57
|
+
| [YYYY-MM-DD] | [Topic] | [One-line direction] | [Date or trigger] |
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
*Last updated: [YYYY-MM-DD] after session on "[topic]"*
|