@polderlabs/bizar 10.6.0 → 10.7.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/bizar-dash/tests/memory-protocol-drift.test.mjs +18 -11
- package/cli/__tests__/feature-list-bridge.test.mjs +42 -42
- package/cli/agent-browser-up.sh +35 -35
- package/cli/agent-browser-update.mjs +42 -42
- package/cli/agent-browser-update.test.mjs +7 -7
- package/cli/audit.mjs +3 -3
- package/cli/bin.mjs +10 -10
- package/cli/bootstrap.mjs +1 -1
- package/cli/cli-commands-validation.test.mjs +2 -2
- package/cli/commands/claim.mjs +3 -3
- package/cli/commands/claude-cmd.mjs +3 -3
- package/cli/commands/eval.mjs +6 -6
- package/cli/commands/util.mjs +18 -18
- package/cli/commands/validate.mjs +10 -10
- package/cli/init.mjs +1 -1
- package/cli/install/postinstall.mjs +4 -4
- package/cli/plow-through.test.mjs +7 -6
- package/cli/prompts.mjs +11 -11
- package/cli/provision.mjs +4 -16
- package/config/skills/bizar/SKILL.md +1 -1
- package/config/skills/skillopt/SKILL.md +129 -0
- package/config/skills/thinking-archetypes/SKILL.md +90 -0
- package/config/skills/thinking-bayesian/SKILL.md +267 -0
- package/config/skills/thinking-bounded-rationality/SKILL.md +406 -0
- package/config/skills/thinking-circle-of-competence/SKILL.md +216 -0
- package/config/skills/thinking-cynefin/SKILL.md +70 -0
- package/config/skills/thinking-debiasing/SKILL.md +192 -0
- package/config/skills/thinking-dual-process/SKILL.md +282 -0
- package/config/skills/thinking-effectuation/SKILL.md +366 -0
- package/config/skills/thinking-feedback-loops/SKILL.md +464 -0
- package/config/skills/thinking-fermi-estimation/SKILL.md +263 -0
- package/config/skills/thinking-first-principles/SKILL.md +167 -0
- package/config/skills/thinking-five-whys-plus/SKILL.md +139 -0
- package/config/skills/thinking-inversion/SKILL.md +195 -0
- package/config/skills/thinking-jobs-to-be-done/SKILL.md +363 -0
- package/config/skills/thinking-kepner-tregoe/SKILL.md +154 -0
- package/config/skills/thinking-leverage-points/SKILL.md +390 -0
- package/config/skills/thinking-lindy-effect/SKILL.md +331 -0
- package/config/skills/thinking-map-territory/SKILL.md +111 -0
- package/config/skills/thinking-margin-of-safety/SKILL.md +330 -0
- package/config/skills/thinking-model-combination/SKILL.md +406 -0
- package/config/skills/thinking-model-router/SKILL.md +360 -0
- package/config/skills/thinking-model-selection/SKILL.md +341 -0
- package/config/skills/thinking-occams-razor/SKILL.md +129 -0
- package/config/skills/thinking-ooda/SKILL.md +127 -0
- package/config/skills/thinking-opportunity-cost/SKILL.md +360 -0
- package/config/skills/thinking-pre-mortem/SKILL.md +170 -0
- package/config/skills/thinking-probabilistic/SKILL.md +324 -0
- package/config/skills/thinking-red-team/SKILL.md +142 -0
- package/config/skills/thinking-regret-minimization/SKILL.md +335 -0
- package/config/skills/thinking-reversibility/SKILL.md +326 -0
- package/config/skills/thinking-scientific-method/SKILL.md +162 -0
- package/config/skills/thinking-second-order/SKILL.md +184 -0
- package/config/skills/thinking-socratic/SKILL.md +198 -0
- package/config/skills/thinking-steel-manning/SKILL.md +332 -0
- package/config/skills/thinking-systems/SKILL.md +238 -0
- package/config/skills/thinking-theory-of-constraints/SKILL.md +338 -0
- package/config/skills/thinking-thought-experiment/SKILL.md +354 -0
- package/config/skills/thinking-triz/SKILL.md +171 -0
- package/config/skills/thinking-via-negativa/SKILL.md +358 -0
- package/package.json +2 -3
- package/packages/sdk/dist/consensus/index.js +4 -4
- package/packages/sdk/dist/router/agent-model-registry.js +2 -2
- package/packages/sdk/dist/router/index.d.ts +3 -3
- package/packages/sdk/dist/router/index.js +4 -4
- package/packages/sdk/dist/router/q-learning-router.d.ts +2 -2
- package/packages/sdk/dist/router/q-learning-router.js +18 -18
- package/scripts/bh-full-e2e.mjs +10 -8
- package/scripts/check-agents.mjs +27 -24
- package/scripts/mirror-claude-md.sh +0 -0
- package/scripts/sync-skills-mirror.mjs +113 -0
- package/scripts/verify-thinking-skills.mjs +135 -0
- package/config/agents/_shared/AGENT_BASELINE.md +0 -155
- package/config/agents/_shared/CLINE_TOOLS.md +0 -398
- package/config/agents/_shared/SKILLS.md +0 -109
- package/config/agents/agent-browser.md +0 -90
- package/config/agents/baldr.md +0 -60
- package/config/agents/forseti.md +0 -60
- package/config/agents/frigg.md +0 -52
- package/config/agents/heimdall.md +0 -44
- package/config/agents/hermod.md +0 -64
- package/config/agents/mimir.md +0 -60
- package/config/agents/odin.md +0 -310
- package/config/agents/quick.md +0 -47
- package/config/agents/semble-search.md +0 -59
- package/config/agents/thor.md +0 -64
- package/config/agents/tyr.md +0 -67
- package/config/agents/vidarr.md +0 -65
- package/config/agents/vor.md +0 -62
- package/config/commands/audit.md +0 -5
- package/config/commands/bizar.md +0 -22
- package/config/commands/explain.md +0 -5
- package/config/commands/init.md +0 -26
- package/config/commands/learn.md +0 -5
- package/config/commands/plan.md +0 -30
- package/config/commands/plow-through.md +0 -47
- package/config/commands/pr-review.md +0 -5
- package/config/commands/setup-provider.md +0 -95
- package/config/commands/tailscale-serve.md +0 -97
- package/config/commands/team.md +0 -124
- package/config/commands/test.md +0 -60
- package/config/commands/validate.md +0 -66
- package/config/commands/visual-plan.md +0 -19
- package/config/hooks/PostToolUse +0 -66
- package/config/hooks/PreToolUse +0 -82
- package/config/hooks/README.md +0 -68
- package/config/hooks/TaskResume +0 -48
- package/config/hooks/TaskStart +0 -47
- package/config/hooks/UserPromptSubmit +0 -55
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: thinking-bounded-rationality
|
|
3
|
+
description: Use when a search or investigation could run indefinitely and you need a stopping rule. Set an explicit "good enough" threshold and stop at the first option that clears it.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Bounded Rationality and Satisficing
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Herbert Simon's Bounded Rationality recognizes that any agent operating under finite resources cannot exhaustively optimize: the search space is too large, information is incomplete, and acting has a cost. Rather than pursuing the optimal solution, Simon proposed "satisficing"—a portmanteau of satisfy + suffice—choosing the first solution good enough to meet an explicit threshold, then stopping.
|
|
11
|
+
|
|
12
|
+
For an autonomous coding agent the binding constraint is a **budget**: tool calls, search/read operations, context window, and wall-clock time per turn. A grep that could keep matching, a file tree you could keep traversing, a doc set you could keep reading — each has steeply diminishing returns. Satisficing converts "search until certain" (which never terminates) into "search until the threshold is met, then act."
|
|
13
|
+
|
|
14
|
+
**Core Principle:** Define "good enough" *before* you search, and stop at the first option that clears the bar. Optimizing is correct only when the gap between good and best is worth more than the budget it costs to close it.
|
|
15
|
+
|
|
16
|
+
## When to Use
|
|
17
|
+
|
|
18
|
+
- An investigation or search has no natural endpoint (greps, file reads, doc crawls, candidate solutions) and could consume the whole budget.
|
|
19
|
+
- Multiple options would all clear the requirement and you're tempted to keep comparing.
|
|
20
|
+
- You're gathering more context than the decision actually needs.
|
|
21
|
+
- A reversible, low-stakes choice is consuming optimization-level effort.
|
|
22
|
+
- You need to commit and ship before the turn/budget runs out.
|
|
23
|
+
|
|
24
|
+
Decision flow:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
Search/investigation that could run indefinitely? → yes → Is closing the gap to "best" worth the budget? → no → SATISFICE (threshold + stop)
|
|
28
|
+
↘ yes → Optimize (and cap the budget)
|
|
29
|
+
↘ no → just answer
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## When NOT to Use
|
|
33
|
+
|
|
34
|
+
- **Irreversible or high-stakes choices** (data deletion, security boundaries, schema/migration decisions, public commitments) — the gap between good and best is worth the budget; optimize and verify.
|
|
35
|
+
- **Correctness gates** — tests, security checks, and "did the fix actually work?" are not satisficeable; you need the right answer, not a sufficient-looking one.
|
|
36
|
+
- **The answer is cheaply knowable** — if one more grep or a single file read would settle it definitively, just do it; don't satisfice your way past a quick fact.
|
|
37
|
+
- **The threshold can't be stated** — if you can't articulate what "good enough" means, you can't satisfice responsibly; clarify the requirement first.
|
|
38
|
+
|
|
39
|
+
## Trigger Card
|
|
40
|
+
|
|
41
|
+
When a search or investigation could run indefinitely and you need to ship:
|
|
42
|
+
|
|
43
|
+
1. **Set an explicit aspiration level** — what does "good enough" look like? Define a concrete, measurable threshold.
|
|
44
|
+
2. **Search sequentially** — evaluate options one at a time in the order you encounter them. Do not enumerate exhaustively.
|
|
45
|
+
3. **Stop at the first option that clears the threshold.** Commit and move on.
|
|
46
|
+
|
|
47
|
+
If the threshold can't be articulated or the cost of a wrong choice is catastrophic, don't satisfice — run the full procedure. For a single cheaply-knowable fact, just look it up.
|
|
48
|
+
|
|
49
|
+
## The Three Constraints
|
|
50
|
+
|
|
51
|
+
### 1. Information Bounds
|
|
52
|
+
|
|
53
|
+
**What you can know is limited**
|
|
54
|
+
|
|
55
|
+
- Complete information rarely exists
|
|
56
|
+
- Gathering more information has costs
|
|
57
|
+
- Information has diminishing returns
|
|
58
|
+
- Future states are inherently uncertain
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
Example: Choosing a technology stack
|
|
62
|
+
Reality: You can't test every option in production
|
|
63
|
+
You can't predict 5-year industry shifts
|
|
64
|
+
You can't know your future team composition
|
|
65
|
+
Satisfice: Pick a well-supported option that meets current needs
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 2. Processing Bounds (the budget)
|
|
69
|
+
|
|
70
|
+
**What you can compute and attend to is limited**
|
|
71
|
+
|
|
72
|
+
- Each turn has a finite budget of tool calls, reads, and context-window tokens
|
|
73
|
+
- Adding more options/criteria to a comparison degrades signal, not improves it — past ~3-5 criteria, marginal context rarely flips the decision
|
|
74
|
+
- Long, sprawling investigations crowd out the context needed to act on what you found
|
|
75
|
+
- More search reduces uncertainty with sharply diminishing returns
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
Example: Choosing among architecture options
|
|
79
|
+
Reality: Reading every doc and modeling every interaction effect
|
|
80
|
+
burns the budget before you produce an answer
|
|
81
|
+
Satisfice: Fix the 3-5 criteria that actually decide it, evaluate
|
|
82
|
+
against those, and stop at the first option that clears them
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 3. Action-Cost Bounds
|
|
86
|
+
|
|
87
|
+
**Deciding and re-deciding both cost budget and time**
|
|
88
|
+
|
|
89
|
+
- Every additional search/read consumes budget that can't be spent elsewhere
|
|
90
|
+
- The user is waiting; an answer now usually beats a marginally better answer later
|
|
91
|
+
- Re-opening a settled, reversible decision is rarely worth the cost
|
|
92
|
+
- Perfect is the enemy of shipped
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
Example: Picking a library for a reversible internal task
|
|
96
|
+
Reality: You could compare ten options across a dozen dimensions
|
|
97
|
+
Reversibility means a wrong-but-adequate pick is cheap to swap
|
|
98
|
+
Satisfice: Pick the first well-supported option that meets the requirement, move on
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Satisficing vs. Optimizing
|
|
102
|
+
|
|
103
|
+
### When to Satisfice
|
|
104
|
+
|
|
105
|
+
| Signal | Why Satisfice |
|
|
106
|
+
|--------|---------------|
|
|
107
|
+
| Reversible decision | Can adjust later with more information |
|
|
108
|
+
| Time pressure | Cost of delay exceeds value of more analysis |
|
|
109
|
+
| Diminishing returns | 80% solution found, 100% would take 10x effort |
|
|
110
|
+
| High uncertainty | More analysis won't reduce uncertainty meaningfully |
|
|
111
|
+
| Many acceptable options | Several solutions meet requirements adequately |
|
|
112
|
+
| Low stakes | Consequences of suboptimal choice are minor |
|
|
113
|
+
|
|
114
|
+
### When to Optimize
|
|
115
|
+
|
|
116
|
+
| Signal | Why Optimize |
|
|
117
|
+
|--------|--------------|
|
|
118
|
+
| Irreversible decision | Mistakes are permanent or very costly to undo |
|
|
119
|
+
| High stakes | Wrong choice has severe consequences |
|
|
120
|
+
| Clear criteria | You know exactly what "best" means |
|
|
121
|
+
| Bounded search space | All options can actually be evaluated |
|
|
122
|
+
| Available time | Deadline allows for thorough analysis |
|
|
123
|
+
| Clear value of optimal | Difference between good and best is significant |
|
|
124
|
+
|
|
125
|
+
## The Satisficing Process
|
|
126
|
+
|
|
127
|
+
### Step 1: Define Aspiration Level
|
|
128
|
+
|
|
129
|
+
Set the minimum acceptable threshold for each criterion:
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
Example: Hiring a senior engineer
|
|
133
|
+
Optimizing: Find the absolute best candidate
|
|
134
|
+
Satisficing: Find a candidate who:
|
|
135
|
+
- Has 5+ years relevant experience ✓
|
|
136
|
+
- Can pass technical interview ✓
|
|
137
|
+
- Salary expectations fit budget ✓
|
|
138
|
+
- Available to start within 4 weeks ✓
|
|
139
|
+
- Culture fit (team confirms) ✓
|
|
140
|
+
|
|
141
|
+
First candidate who meets all criteria → Hire
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Step 2: Search Sequentially
|
|
145
|
+
|
|
146
|
+
Evaluate options one at a time against aspiration level:
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
Option A: Meets 4/5 criteria → Continue search
|
|
150
|
+
Option B: Meets 3/5 criteria → Continue search
|
|
151
|
+
Option C: Meets 5/5 criteria → STOP, choose this one
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Key insight: You don't compare options against each other, you compare each option against your threshold.
|
|
155
|
+
|
|
156
|
+
### Step 3: Adjust Aspiration If Needed
|
|
157
|
+
|
|
158
|
+
If search is too long or too short, recalibrate:
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
Too many options qualify → Raise aspiration level
|
|
162
|
+
Nothing qualifies after reasonable search → Lower aspiration level
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Step 4: Commit and Move On
|
|
166
|
+
|
|
167
|
+
Once threshold is met:
|
|
168
|
+
|
|
169
|
+
- Stop searching
|
|
170
|
+
- Accept the decision
|
|
171
|
+
- Resist second-guessing
|
|
172
|
+
- Redirect energy to execution
|
|
173
|
+
|
|
174
|
+
## Application Patterns
|
|
175
|
+
|
|
176
|
+
### For Technical Design
|
|
177
|
+
|
|
178
|
+
```
|
|
179
|
+
Scenario: Choose a message queue for new service
|
|
180
|
+
|
|
181
|
+
Satisficing approach:
|
|
182
|
+
1. Define requirements (aspiration level):
|
|
183
|
+
- At-least-once delivery ✓
|
|
184
|
+
- Handles 10k msg/sec ✓
|
|
185
|
+
- Team familiarity or fast learning curve ✓
|
|
186
|
+
- Managed option available ✓
|
|
187
|
+
- Within cost budget ✓
|
|
188
|
+
|
|
189
|
+
2. Evaluate sequentially:
|
|
190
|
+
- RabbitMQ: Meets all → STOP, use RabbitMQ
|
|
191
|
+
|
|
192
|
+
3. Don't continue researching Kafka, SQS, etc.
|
|
193
|
+
unless RabbitMQ fails threshold
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### For Code Review
|
|
197
|
+
|
|
198
|
+
```
|
|
199
|
+
Scenario: Reviewing a PR under time pressure
|
|
200
|
+
|
|
201
|
+
Satisficing approach:
|
|
202
|
+
1. Define "good enough" criteria:
|
|
203
|
+
- No security vulnerabilities ✓
|
|
204
|
+
- Tests pass ✓
|
|
205
|
+
- No obvious performance issues ✓
|
|
206
|
+
- Code is readable ✓
|
|
207
|
+
- Follows project conventions ✓
|
|
208
|
+
|
|
209
|
+
2. Stop when criteria met
|
|
210
|
+
Don't perfect every line if shipping matters
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### For Research/Investigation
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
Scenario: Debugging production issue
|
|
217
|
+
|
|
218
|
+
Satisficing approach:
|
|
219
|
+
1. Define stopping criteria:
|
|
220
|
+
- Root cause identified ✓
|
|
221
|
+
- Fix verified in staging ✓
|
|
222
|
+
- Rollback plan exists ✓
|
|
223
|
+
|
|
224
|
+
2. Stop investigating once you can fix
|
|
225
|
+
Don't exhaustively trace every code path
|
|
226
|
+
if you have a working solution
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### For Feature Scope
|
|
230
|
+
|
|
231
|
+
```
|
|
232
|
+
Scenario: MVP feature set decisions
|
|
233
|
+
|
|
234
|
+
Satisficing approach:
|
|
235
|
+
1. Define "enough to learn":
|
|
236
|
+
- Core user job addressed ✓
|
|
237
|
+
- Measurable success metric exists ✓
|
|
238
|
+
- Usable enough for feedback ✓
|
|
239
|
+
- Can ship within sprint ✓
|
|
240
|
+
|
|
241
|
+
2. First scope that meets criteria → Ship it
|
|
242
|
+
Don't polish what you might throw away
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
## Setting Appropriate Aspiration Levels
|
|
246
|
+
|
|
247
|
+
### Too High → Analysis Paralysis
|
|
248
|
+
|
|
249
|
+
Symptoms:
|
|
250
|
+
|
|
251
|
+
- Nothing ever meets the bar
|
|
252
|
+
- Endless research and comparison
|
|
253
|
+
- Decisions perpetually delayed
|
|
254
|
+
- Perfect becomes enemy of good
|
|
255
|
+
|
|
256
|
+
Fix: Ask "What's the minimum that would be acceptable?"
|
|
257
|
+
|
|
258
|
+
### Too Low → Poor Outcomes
|
|
259
|
+
|
|
260
|
+
Symptoms:
|
|
261
|
+
|
|
262
|
+
- Frequent rework required
|
|
263
|
+
- Quality issues in production
|
|
264
|
+
- Technical debt accumulation
|
|
265
|
+
- Stakeholder dissatisfaction
|
|
266
|
+
|
|
267
|
+
Fix: Ask "What past decisions do I regret? What threshold would have prevented them?"
|
|
268
|
+
|
|
269
|
+
### Calibration Heuristics
|
|
270
|
+
|
|
271
|
+
```
|
|
272
|
+
Reversibility Check:
|
|
273
|
+
- Easily reversible → Lower aspiration OK
|
|
274
|
+
- Hard to reverse → Raise aspiration
|
|
275
|
+
|
|
276
|
+
Consequence Check:
|
|
277
|
+
- Minor consequences → Lower aspiration OK
|
|
278
|
+
- Major consequences → Raise aspiration
|
|
279
|
+
|
|
280
|
+
Time Check:
|
|
281
|
+
- Tight deadline → Accept lower aspiration
|
|
282
|
+
- Ample time → Can afford higher aspiration
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
## Common Traps
|
|
286
|
+
|
|
287
|
+
### Trap 1: Satisficing Feels Like Settling
|
|
288
|
+
|
|
289
|
+
**Reality:** Satisficing is rational under constraints, not lazy.
|
|
290
|
+
|
|
291
|
+
```
|
|
292
|
+
Optimizing with infinite time = mathematically correct
|
|
293
|
+
Optimizing with real constraints = often irrational
|
|
294
|
+
Satisficing = adapted to actual world
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### Trap 2: Post-Decision Regret
|
|
298
|
+
|
|
299
|
+
**Reality:** Finding a better option later doesn't mean the decision was wrong.
|
|
300
|
+
|
|
301
|
+
```
|
|
302
|
+
You chose Option B (met threshold)
|
|
303
|
+
Later discovered Option D was "better"
|
|
304
|
+
This is expected—you stopped searching at B
|
|
305
|
+
Regret is only valid if B didn't meet your threshold
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### Trap 3: Creeping Aspiration
|
|
309
|
+
|
|
310
|
+
**Reality:** Moving goalposts prevent closure.
|
|
311
|
+
|
|
312
|
+
```
|
|
313
|
+
Original: "Need 100ms response time"
|
|
314
|
+
After meeting it: "Actually, 50ms would be better"
|
|
315
|
+
After that: "Hmm, 25ms would be ideal..."
|
|
316
|
+
|
|
317
|
+
Fix: Lock aspiration level before search begins
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### Trap 4: Satisficing the Wrong Things
|
|
321
|
+
|
|
322
|
+
**Reality:** Some decisions warrant optimization.
|
|
323
|
+
|
|
324
|
+
```
|
|
325
|
+
Wrong to satisfice:
|
|
326
|
+
- Security critical systems
|
|
327
|
+
- Legal compliance
|
|
328
|
+
- Safety-critical code
|
|
329
|
+
- Irreversible architectural choices
|
|
330
|
+
|
|
331
|
+
Right to satisfice:
|
|
332
|
+
- Internal tooling
|
|
333
|
+
- Reversible experiments
|
|
334
|
+
- Style preferences
|
|
335
|
+
- Low-stakes choices
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
## Integration with Other Thinking Models
|
|
339
|
+
|
|
340
|
+
### With First Principles
|
|
341
|
+
|
|
342
|
+
```
|
|
343
|
+
Use First Principles to determine:
|
|
344
|
+
- What constraints are real vs assumed?
|
|
345
|
+
- What is the fundamental requirement?
|
|
346
|
+
Then satisfice against those fundamentals
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
### With Inversion
|
|
350
|
+
|
|
351
|
+
```
|
|
352
|
+
Use Inversion to set aspiration level:
|
|
353
|
+
- "What would make this solution unacceptable?"
|
|
354
|
+
- Avoid those failure modes
|
|
355
|
+
- Any option avoiding them satisfices
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
### With Circle of Competence
|
|
359
|
+
|
|
360
|
+
```
|
|
361
|
+
Outside your circle:
|
|
362
|
+
- You can't evaluate "optimal" anyway
|
|
363
|
+
- Satisficing is your only realistic option
|
|
364
|
+
- Set thresholds based on expert input
|
|
365
|
+
|
|
366
|
+
Inside your circle:
|
|
367
|
+
- You can choose when to optimize vs satisfice
|
|
368
|
+
- Trust your calibrated aspiration levels
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
### With Pre-Mortem
|
|
372
|
+
|
|
373
|
+
```
|
|
374
|
+
Run pre-mortem to validate aspiration level:
|
|
375
|
+
- "If this satisficed solution fails, why?"
|
|
376
|
+
- Adjust thresholds to prevent likely failures
|
|
377
|
+
- Don't over-engineer against unlikely failures
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
## Verification Checklist
|
|
381
|
+
|
|
382
|
+
- [ ] Identified whether this decision warrants optimizing or satisficing
|
|
383
|
+
- [ ] Set clear aspiration level before searching
|
|
384
|
+
- [ ] Defined explicit stopping criteria
|
|
385
|
+
- [ ] Evaluated options against threshold, not against each other
|
|
386
|
+
- [ ] Stopped when threshold was met (or adjusted threshold rationally)
|
|
387
|
+
- [ ] Committed to decision without continued comparison shopping
|
|
388
|
+
- [ ] Documented reasoning for future reference
|
|
389
|
+
|
|
390
|
+
## Key Questions
|
|
391
|
+
|
|
392
|
+
- "What's the minimum acceptable solution here?"
|
|
393
|
+
- "What would 'good enough' look like for this decision?"
|
|
394
|
+
- "Is more research likely to change my decision?"
|
|
395
|
+
- "What's the cost of continued analysis vs acting now?"
|
|
396
|
+
- "Can I reverse this decision if I learn more later?"
|
|
397
|
+
- "Am I searching for best, or searching to avoid deciding?"
|
|
398
|
+
- "What threshold would I set for someone else in my position?"
|
|
399
|
+
|
|
400
|
+
## Simon's Insight
|
|
401
|
+
|
|
402
|
+
"A wealth of information creates a poverty of attention."
|
|
403
|
+
|
|
404
|
+
In a world of infinite information and finite attention, satisficing isn't settling—it's adapting to reality. The goal isn't to make perfect decisions, but to make good decisions efficiently, preserving cognitive resources for the problems that truly require optimization.
|
|
405
|
+
|
|
406
|
+
The satisficer who ships beats the optimizer who's still researching.
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: thinking-circle-of-competence
|
|
3
|
+
description: Use when you're unsure whether you actually know the answer. If you lack the evidence or context to answer reliably, abstain, ask, or fetch it — don't confabulate a confident reply.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Circle of Competence
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
The Circle of Competence, articulated by Warren Buffett and Charlie Munger, is about knowing precisely where reliable knowledge ends. For an autonomous agent the operative version is **abstention**: the failure mode isn't being wrong about a hard problem — it's producing a fluent, confident answer when the grounding for it isn't there. The most damaging output a model can give is a plausible fabrication: an invented API, a hallucinated file path, a made-up statistic, a guessed config value, delivered with the same tone as a verified fact.
|
|
10
|
+
|
|
11
|
+
**Core Principle:** Knowing what you can't reliably answer is more valuable than the answer. When the evidence or context to answer correctly is missing, the right move is to abstain, ask, or go fetch it — not to confabulate. "I don't know, let me check" beats a confident guess.
|
|
12
|
+
|
|
13
|
+
## When to Use
|
|
14
|
+
- A question demands a specific fact you're not certain of (an exact API signature, a config value, a version behavior, a number)
|
|
15
|
+
- You're about to assert something about *this* codebase/system without having read it
|
|
16
|
+
- The request is in an unfamiliar domain and your answer would be reconstructed from vague pattern rather than grounded knowledge
|
|
17
|
+
- You notice you're filling a gap with the most plausible-sounding value rather than a checked one
|
|
18
|
+
- A confident answer would be expensive to be wrong about
|
|
19
|
+
|
|
20
|
+
Decision flow:
|
|
21
|
+
```
|
|
22
|
+
About to give a specific/high-stakes answer?
|
|
23
|
+
→ Is it grounded in something I've read/run/can cite? → yes → answer
|
|
24
|
+
↘ no → CAN I cheaply fetch/check it? → yes → FETCH, then answer
|
|
25
|
+
↘ no → ABSTAIN or ASK; flag the uncertainty
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## When NOT to Use
|
|
29
|
+
- **The answer is grounded and verifiable** — you've read the file, run the command, or it's stable common knowledge. Don't perform false humility on things you actually know; needless hedging is its own failure.
|
|
30
|
+
- **The cost of being wrong is trivial and reversible** — a quick reversible attempt with a caveat can beat stalling, as long as you flag it as unverified.
|
|
31
|
+
- **You can just look it up right now** — then the move is *fetch*, not abstain. Abstention is the fallback when grounding is genuinely unavailable, not an excuse to skip a cheap check.
|
|
32
|
+
- **Brainstorming / clearly-hypothetical framing** — when the user has signalled they want options or speculation, labeled informed guesses are appropriate.
|
|
33
|
+
|
|
34
|
+
## The Three Zones (by grounding, not by ego)
|
|
35
|
+
|
|
36
|
+
### Zone 1: Grounded — answer
|
|
37
|
+
**The answer is anchored in something checkable**
|
|
38
|
+
|
|
39
|
+
- You read it in the actual code/file/doc this session, or ran it
|
|
40
|
+
- It's stable, common knowledge unlikely to be version- or context-specific
|
|
41
|
+
- You could cite *where* the answer comes from
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
Examples (grounded):
|
|
45
|
+
- "This function returns null on miss" — after reading the function
|
|
46
|
+
- HTTP 404 means not found — stable, universal
|
|
47
|
+
- "The config sets timeout to 30s" — after opening the config
|
|
48
|
+
→ Answer directly.
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Zone 2: Partial — verify before asserting
|
|
52
|
+
**Plausible but reconstructed, not confirmed**
|
|
53
|
+
|
|
54
|
+
- You have the general shape but not the specific
|
|
55
|
+
- It's version-, environment-, or repo-specific and you haven't checked this one
|
|
56
|
+
- You'd be inferring from a pattern, which is usually right but sometimes wrong
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
Examples (partial):
|
|
60
|
+
- "The library probably has a `retry` option" — likely, unchecked
|
|
61
|
+
- "This API usually returns ISO timestamps" — depends on the version here
|
|
62
|
+
→ Fetch/read to confirm, OR answer with an explicit "I believe X, verify with Y."
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Zone 3: Ungrounded — abstain or ask
|
|
66
|
+
**A confident answer here would be a fabrication**
|
|
67
|
+
|
|
68
|
+
- You'd be inventing a specific value (signature, path, number, flag)
|
|
69
|
+
- The domain is unfamiliar and the answer reconstructed from vague pattern
|
|
70
|
+
- You can't point to any source for it
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
Examples (ungrounded):
|
|
74
|
+
- Exact signature of an API you haven't seen in this codebase
|
|
75
|
+
- A precise statistic with no source
|
|
76
|
+
- "What does our internal service X do?" with no access to it
|
|
77
|
+
→ Say so, ask, or fetch — do NOT confabulate.
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Telling the Zones Apart
|
|
81
|
+
|
|
82
|
+
The honest test before a specific or high-stakes claim:
|
|
83
|
+
|
|
84
|
+
| Question | Grounded | Partial | Ungrounded |
|
|
85
|
+
|----------|---------|---------|-----------|
|
|
86
|
+
| Can I point to where this answer comes from? | ✓ | sort of | ✗ |
|
|
87
|
+
| Have I read/run the relevant thing this session? | ✓ | | ✗ |
|
|
88
|
+
| Is it version-/repo-/config-specific and unconfirmed? | | ✓ | ✓ |
|
|
89
|
+
| Am I filling a gap with the *most plausible-sounding* value? | | ✓ | ✓ |
|
|
90
|
+
|
|
91
|
+
Watch for the confabulation tells:
|
|
92
|
+
- An exact name, number, or path arrives with no memory of *where* it came from
|
|
93
|
+
- The answer is suspiciously convenient and complete for something you never looked at
|
|
94
|
+
- You're hedging the framing ("typically", "should be") around a claim the user will treat as fact
|
|
95
|
+
- "I'm capable in general, so I can answer this specific" — capability is not grounding
|
|
96
|
+
|
|
97
|
+
## What to Do in Each Zone
|
|
98
|
+
|
|
99
|
+
### Grounded: answer directly
|
|
100
|
+
```
|
|
101
|
+
✓ Give the answer
|
|
102
|
+
✓ Cite the source if it helps the user trust it
|
|
103
|
+
✓ Don't hedge a verified fact into mush
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Partial: confirm, then answer
|
|
107
|
+
```
|
|
108
|
+
→ Cheap to check? FETCH first — read the file, run the command, grep the symbol
|
|
109
|
+
→ Can't check right now? Answer with the uncertainty marked:
|
|
110
|
+
"I believe X — confirm against Y before relying on it."
|
|
111
|
+
→ Never round a "probably" up to a flat assertion
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Ungrounded: abstain, ask, or fetch — never confabulate
|
|
115
|
+
```
|
|
116
|
+
Option A: Fetch
|
|
117
|
+
- Get the grounding (read the code, search the docs, call the tool), then answer
|
|
118
|
+
|
|
119
|
+
Option B: Ask
|
|
120
|
+
- "I don't have access to X — can you share it / point me to it?"
|
|
121
|
+
- A precise question beats a confident guess
|
|
122
|
+
|
|
123
|
+
Option C: Abstain explicitly
|
|
124
|
+
- "I don't know this reliably and can't verify it here."
|
|
125
|
+
- State what *would* let you answer
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Common Traps
|
|
129
|
+
|
|
130
|
+
### Trap 1: Competence creep
|
|
131
|
+
Being grounded in one area doesn't transfer to the adjacent one:
|
|
132
|
+
```
|
|
133
|
+
Read service A's code → grounded on service A
|
|
134
|
+
Does NOT mean grounded on service B, the infra, or the client
|
|
135
|
+
Check the thing you're actually being asked about.
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Trap 2: Stale or version-specific recall
|
|
139
|
+
General knowledge of a tool ≠ knowledge of *this* version/config:
|
|
140
|
+
```
|
|
141
|
+
"I know how this library usually works" — but the repo pins an old major version
|
|
142
|
+
with a different API. Recall is partial here; verify against the installed version.
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Trap 3: Fluency misread as grounding
|
|
146
|
+
A smooth, complete answer *feels* authoritative regardless of whether it's checked:
|
|
147
|
+
```
|
|
148
|
+
The trap: the more confidently a specific value comes out, the less it gets questioned
|
|
149
|
+
The fix: before a specific claim, ask "where did this come from?" — if there's no source, it's ungrounded
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Trap 4: Capability-implies-knowledge
|
|
153
|
+
Being a strong general reasoner does not mean you know this specific fact:
|
|
154
|
+
```
|
|
155
|
+
"I can reason about anything" → still can't know an unread file's contents,
|
|
156
|
+
a private API's signature, or a number with no source. Capability is not grounding.
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Application Examples
|
|
160
|
+
|
|
161
|
+
### Reporting an API or library detail
|
|
162
|
+
```
|
|
163
|
+
Question: "What are the arguments to this client's `query` method?"
|
|
164
|
+
|
|
165
|
+
Self-assessment:
|
|
166
|
+
- Have I read this client's source in the repo? No → Partial/Ungrounded
|
|
167
|
+
- Am I about to reconstruct a plausible signature? Yes → confabulation risk
|
|
168
|
+
|
|
169
|
+
Action: grep/read the actual definition, THEN answer. If unavailable,
|
|
170
|
+
say "I haven't seen this client's source — let me read it" rather than inventing args.
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Answering about this specific system
|
|
174
|
+
```
|
|
175
|
+
Question: "What does our internal billing service do on a failed charge?"
|
|
176
|
+
|
|
177
|
+
Self-assessment:
|
|
178
|
+
- Do I have access to that service's code/docs? No → Ungrounded
|
|
179
|
+
- Can I infer a "typical" behavior? Yes, but it'd be a guess about a specific system
|
|
180
|
+
|
|
181
|
+
Action: Abstain or ask: "I don't have that service's code here — can you point me to it,
|
|
182
|
+
or should I search the repo?" Do not describe behavior you haven't seen.
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Adopting an unfamiliar technology
|
|
186
|
+
```
|
|
187
|
+
Question: "Should we use GraphQL here?"
|
|
188
|
+
|
|
189
|
+
Self-assessment:
|
|
190
|
+
- Do I have grounded knowledge of GraphQL's general tradeoffs? Yes → can speak to them
|
|
191
|
+
- Do I know THIS system's query patterns and constraints? Only what I've read → check
|
|
192
|
+
|
|
193
|
+
Action: Give the well-grounded general tradeoffs; for the fit to *this* system,
|
|
194
|
+
verify the actual access patterns before recommending.
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## Verification Checklist
|
|
198
|
+
- [ ] Identified which zone the answer falls in (grounded / partial / ungrounded)
|
|
199
|
+
- [ ] For specific claims: can point to where the answer comes from
|
|
200
|
+
- [ ] If partial/ungrounded and cheap to check: fetched/read before asserting
|
|
201
|
+
- [ ] If ungrounded and uncheckable: abstained or asked, did not confabulate
|
|
202
|
+
- [ ] Marked any unverified claim as unverified, not as fact
|
|
203
|
+
- [ ] Did not hedge a genuinely-grounded answer into needless mush
|
|
204
|
+
|
|
205
|
+
## Key Questions
|
|
206
|
+
- "Where does this specific answer come from — can I cite it?"
|
|
207
|
+
- "Have I actually read/run the thing I'm about to describe?"
|
|
208
|
+
- "Am I filling this gap with a checked value or the most plausible-sounding one?"
|
|
209
|
+
- "Could I cheaply fetch the grounding instead of guessing?"
|
|
210
|
+
- "If I'm wrong here, how would anyone find out — and how costly is it?"
|
|
211
|
+
- "Is this version-/repo-/config-specific in a way I haven't confirmed?"
|
|
212
|
+
|
|
213
|
+
## Buffett's Reminder
|
|
214
|
+
"What counts is not how much they know, but rather how realistically they define what they don't know."
|
|
215
|
+
|
|
216
|
+
The advantage isn't a bigger circle — it's refusing to answer outside it as if you were inside it. For an agent, the highest-value words are often "I don't know that reliably; let me check" — because a confident fabrication costs far more than an honest gap.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: thinking-cynefin
|
|
3
|
+
description: Use when unsure how to approach a problem—plan, analyze, experiment, or stabilize first. Classify it by cause-effect (clear/complicated/complex/chaotic) and match the approach to the domain.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Cynefin Framework
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Cynefin (Dave Snowden) classifies a problem by the relationship between cause and effect, then prescribes the matching approach. Using the wrong approach for the domain is the failure mode: detailed planning is useless in chaos, and experimentation is reckless when a best practice already exists.
|
|
11
|
+
|
|
12
|
+
**Core Principle:** The nature of the problem determines the approach. Classify first, then act.
|
|
13
|
+
|
|
14
|
+
## The Classifier
|
|
15
|
+
|
|
16
|
+
| Cause–effect is… | Domain | Approach | Do this |
|
|
17
|
+
|------------------|--------|----------|---------|
|
|
18
|
+
| Obvious to anyone | **Clear** | Sense → Categorize → Respond | Apply the known best practice / runbook; don't over-engineer |
|
|
19
|
+
| Knowable with expertise/analysis | **Complicated** | Sense → Analyze → Respond | Investigate, profile, design; multiple valid solutions exist |
|
|
20
|
+
| Only visible in retrospect (emergent) | **Complex** | Probe → Sense → Respond | Run small safe-to-fail probes, amplify what works |
|
|
21
|
+
| Not perceivable; turbulent | **Chaotic** | Act → Sense → Respond | Act now to stabilize (rollback/failover), understand later |
|
|
22
|
+
| Unsure which domain | **Disorder** | Decompose | Split into parts and classify each part |
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
Can you see clear cause→effect?
|
|
26
|
+
obvious to everyone → CLEAR
|
|
27
|
+
knowable with analysis → COMPLICATED
|
|
28
|
+
only clear in hindsight → COMPLEX
|
|
29
|
+
totally turbulent, no time → CHAOTIC
|
|
30
|
+
can't tell → DISORDER (decompose)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## When to Use
|
|
34
|
+
|
|
35
|
+
- You're unsure whether to plan, analyze, experiment, or just act
|
|
36
|
+
- An approach isn't working and you suspect it's mismatched to the problem
|
|
37
|
+
- Triaging an incident (is this stabilize-first chaos, or analyzable?)
|
|
38
|
+
|
|
39
|
+
## When NOT to Use
|
|
40
|
+
|
|
41
|
+
- The domain is already obvious and the approach is uncontested → skip the ceremony and just do it.
|
|
42
|
+
- You've already classified and now need to execute → switch to the domain's actual method (debugging, a hypothesis differential, experiment design); Cynefin only routes, it doesn't solve.
|
|
43
|
+
- The question is "what is the cause," not "how should I approach this" → classification won't find the bug.
|
|
44
|
+
|
|
45
|
+
## The Common Mismatches (the whole point)
|
|
46
|
+
|
|
47
|
+
- **Complex treated as Complicated:** extensive planning, but outcomes keep surprising you. You can't analyze your way through emergence—probe instead.
|
|
48
|
+
- **Complicated treated as Clear:** "just do it like Company X" without understanding why. Context matters; analyze the specific case.
|
|
49
|
+
- **Chaotic treated as Complex:** running experiments during an active outage. Chaos needs immediate stability, not learning.
|
|
50
|
+
- **Clear treated as Complicated:** over-engineering a trivial problem. Apply the best practice and move on.
|
|
51
|
+
|
|
52
|
+
## Confidence Check
|
|
53
|
+
|
|
54
|
+
Before committing, test the classification:
|
|
55
|
+
- Clear? Do best practices reliably work here? If not → probably Complicated.
|
|
56
|
+
- Complicated? Can analysis predict the outcome? If not → probably Complex.
|
|
57
|
+
- Complex? Can you run a safe-to-fail probe? If it's too turbulent to probe → Chaotic.
|
|
58
|
+
- Re-check as the situation evolves; domains shift (chaos stabilizes into complex/complicated).
|
|
59
|
+
|
|
60
|
+
## Key Questions
|
|
61
|
+
|
|
62
|
+
- "What's the relationship between cause and effect here?"
|
|
63
|
+
- "Can experts reliably predict the outcome, or is it only clear in hindsight?"
|
|
64
|
+
- "Is this actually complex, or am I avoiding the analysis?"
|
|
65
|
+
- "Is this actually complicated, or am I over-planning a simple thing?"
|
|
66
|
+
- "Has the situation moved to a different domain since I last looked?"
|
|
67
|
+
|
|
68
|
+
## Snowden's Wisdom
|
|
69
|
+
|
|
70
|
+
"Complex systems are dispositional, not causal—you can't predict what will happen, only influence what might." The failure is rarely the methodology itself; it's applying the wrong methodology to the wrong domain.
|