pi-crew 0.5.2 → 0.5.5
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/CHANGELOG.md +67 -0
- package/docs/bugs/cross-session-notification-leakage.md +82 -0
- package/docs/coding-agent-optimization.md +268 -0
- package/docs/deep-review-report.md +384 -0
- package/docs/distillation/cybersecurity-patterns.md +294 -0
- package/docs/migration-v0.4-v0.5.md +191 -0
- package/docs/optimization-plan.md +642 -0
- package/docs/pi-mono-opportunities.md +969 -0
- package/docs/pi-mono-review.md +291 -0
- package/docs/skills/REFERENCE.md +144 -0
- package/package.json +7 -6
- package/skills/artifact-analysis-loop/SKILL.md +302 -0
- package/skills/async-worker-recovery/SKILL.md +19 -1
- package/skills/child-pi-spawning/SKILL.md +19 -6
- package/skills/context-artifact-hygiene/SKILL.md +19 -2
- package/skills/delegation-patterns/SKILL.md +68 -3
- package/skills/detection-pipeline-design/SKILL.md +285 -0
- package/skills/event-log-tracing/SKILL.md +20 -6
- package/skills/git-master/SKILL.md +20 -6
- package/skills/hunting-investigation-loop/SKILL.md +401 -0
- package/skills/incident-playbook-construction/SKILL.md +383 -0
- package/skills/live-agent-lifecycle/SKILL.md +20 -6
- package/skills/mailbox-interactive/SKILL.md +19 -6
- package/skills/model-routing-context/SKILL.md +19 -1
- package/skills/multi-perspective-review/SKILL.md +19 -4
- package/skills/observability-reliability/SKILL.md +19 -2
- package/skills/orchestration/SKILL.md +20 -2
- package/skills/ownership-session-security/SKILL.md +20 -2
- package/skills/pi-extension-lifecycle/SKILL.md +20 -2
- package/skills/post-mortem/SKILL.md +7 -2
- package/skills/read-only-explorer/SKILL.md +20 -6
- package/skills/requirements-to-task-packet/SKILL.md +23 -3
- package/skills/resource-discovery-config/SKILL.md +20 -2
- package/skills/runtime-state-reader/SKILL.md +20 -2
- package/skills/safe-bash/SKILL.md +21 -6
- package/skills/scrutinize/SKILL.md +20 -2
- package/skills/secure-agent-orchestration-review/SKILL.md +29 -2
- package/skills/security-review/SKILL.md +560 -0
- package/skills/state-mutation-locking/SKILL.md +22 -2
- package/skills/systematic-debugging/SKILL.md +8 -6
- package/skills/threat-hypothesis-framework/SKILL.md +175 -0
- package/skills/ui-render-performance/SKILL.md +20 -2
- package/skills/verification-before-done/SKILL.md +17 -2
- package/skills/widget-rendering/SKILL.md +21 -6
- package/skills/workspace-isolation/SKILL.md +20 -6
- package/skills/worktree-isolation/SKILL.md +20 -6
- package/src/agents/agent-config.ts +40 -1
- package/src/config/config.ts +22 -5
- package/src/config/role-tools.ts +82 -0
- package/src/config/types.ts +4 -0
- package/src/extension/crew-cleanup.ts +114 -0
- package/src/extension/register.ts +15 -3
- package/src/extension/team-tool/run.ts +7 -7
- package/src/observability/event-bus.ts +60 -0
- package/src/runtime/background-runner.ts +8 -2
- package/src/runtime/child-pi.ts +122 -34
- package/src/runtime/crew-agent-runtime.ts +1 -0
- package/src/runtime/foreground-control.ts +87 -17
- package/src/runtime/pi-args.ts +11 -1
- package/src/runtime/pi-json-output.ts +31 -0
- package/src/runtime/progress-tracker.ts +124 -0
- package/src/runtime/skill-effectiveness.ts +473 -0
- package/src/runtime/skill-instructions.ts +37 -3
- package/src/runtime/task-runner.ts +91 -17
- package/src/runtime/team-runner.ts +11 -11
- package/src/runtime/tool-progress.ts +10 -3
- package/src/runtime/verification-gates.ts +367 -0
- package/src/schema/team-tool-schema.ts +7 -0
- package/src/state/decision-ledger.ts +92 -43
- package/src/state/event-log.ts +136 -10
- package/src/state/hook-instinct-bridge.ts +5 -5
- package/src/state/state-store.ts +3 -1
- package/src/state/types.ts +4 -0
- package/src/types/new-api-types.ts +34 -0
- package/src/ui/agent-management-overlay.ts +5 -1
- package/src/ui/crew-widget.ts +29 -15
- package/src/ui/powerbar-publisher.ts +100 -7
- package/src/ui/tool-render.ts +15 -15
- package/src/utils/session-utils.ts +52 -0
- package/src/worktree/worktree-manager.ts +32 -13
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
# pi-mono Review: Full May 2026 Analysis
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-05-28
|
|
4
|
+
**Reviewed:** Direct source reading of `packages/agent/`, `packages/ai/`, `packages/coding-agent/`
|
|
5
|
+
**Source:** `origin/main` (up to date)
|
|
6
|
+
|
|
7
|
+
> **Focused coding-agent analysis:** See [`docs/coding-agent-optimization.md`](./coding-agent-optimization.md) for actionable optimization opportunities for pi-crew.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Executive Summary
|
|
12
|
+
|
|
13
|
+
**No breaking changes found.** The entire May refactor is additive or internal. Both `Agent` (legacy harness) and `AgentHarness` (new harness) coexist. pi-crew's usage of the `Agent` class via `child-pi.ts` spawning is **fully compatible**.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 1. Architecture: Two Harnesses Coexist
|
|
18
|
+
|
|
19
|
+
### Legacy Harness: `Agent` class (`packages/agent/src/agent.ts`)
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
// Still the primary harness used by coding-agent
|
|
23
|
+
export class Agent {
|
|
24
|
+
async prompt(input: string | AgentMessage | AgentMessage[], images?: ImageContent[]): Promise<void>
|
|
25
|
+
async abort(): void
|
|
26
|
+
subscribe(listener: (event: AgentEvent, signal: AbortSignal) => void): () => void
|
|
27
|
+
// ... existing API unchanged
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
This is what pi-crew's `child-pi.ts` spawns — **no breaking changes**.
|
|
32
|
+
|
|
33
|
+
### New Harness: `AgentHarness` class (`packages/agent/src/harness/agent-harness.ts`)
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
// New harness, built on top of runAgentLoop, with richer APIs
|
|
37
|
+
export class AgentHarness {
|
|
38
|
+
async prompt(text: string, options?: AgentHarnessPromptOptions): Promise<AssistantMessage>
|
|
39
|
+
async steer(text: string): Promise<void>
|
|
40
|
+
async setModel(model: Model<any>): Promise<void>
|
|
41
|
+
async setThinkingLevel(level: ThinkingLevel): Promise<void>
|
|
42
|
+
async setResources(resources: AgentHarnessResources): Promise<void>
|
|
43
|
+
async navigateTree(options: NavigateTreeOptions): Promise<NavigateTreeResult>
|
|
44
|
+
async abort(): Promise<AbortResult>
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Both use the same `runAgentLoop`** internally. `AgentHarness` wraps it with richer state management, resource loading, and session persistence.
|
|
49
|
+
|
|
50
|
+
### Session System (`packages/agent/src/harness/session/`)
|
|
51
|
+
|
|
52
|
+
New formal session infrastructure (1,008 lines across 7 files):
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
// Session storage with JSONL backend
|
|
56
|
+
SessionStorage<TMetadata> {
|
|
57
|
+
getMetadata(), setLeafId(), createEntryId(), appendEntry(),
|
|
58
|
+
getEntry(), findEntries(), getLabel(), getPathToRoot(), getEntries()
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Session repo with fork/list/delete
|
|
62
|
+
SessionRepo<TMetadata, TCreateOptions, TListOptions> {
|
|
63
|
+
create(), open(), list(), delete(), fork()
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**pi-crew's event log** (`src/state/event-log.ts`) uses its own JSONL format — no conflict.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 2. New Hooks (AgentHarness)
|
|
72
|
+
|
|
73
|
+
### `context` hook
|
|
74
|
+
|
|
75
|
+
Fires before each LLM call to allow context transformation:
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
// agent-harness.ts line ~413
|
|
79
|
+
const result = await this.emitHook({ type: "context", messages: [...messages] });
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**pi-crew relevance:** Currently pi-crew uses `before_agent_start` only. The `context` hook would allow per-turn context injection (e.g., pruning, external context injection).
|
|
83
|
+
|
|
84
|
+
### `resources_update` hook
|
|
85
|
+
|
|
86
|
+
Fires when resources (skills/prompt templates) change mid-run:
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
type: "resources_update";
|
|
90
|
+
resources: AgentHarnessResources;
|
|
91
|
+
previousResources: AgentHarnessResources;
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**pi-crew relevance:** Useful for dynamic skill loading during task execution.
|
|
95
|
+
|
|
96
|
+
### `model_select` / `thinking_level_select` hooks
|
|
97
|
+
|
|
98
|
+
Fire when the model or thinking level changes mid-run.
|
|
99
|
+
|
|
100
|
+
**pi-crew relevance:** Supports the `prepareNextTurn` dynamic model switching pattern.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## 3. New `prepareNextTurn` API
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
// packages/agent/src/types.ts
|
|
108
|
+
prepareNextTurn?: (
|
|
109
|
+
context: PrepareNextTurnContext,
|
|
110
|
+
) => AgentLoopTurnUpdate | undefined | Promise<AgentLoopTurnUpdate | undefined>;
|
|
111
|
+
|
|
112
|
+
interface AgentLoopTurnUpdate {
|
|
113
|
+
context?: AgentContext; // replacement context
|
|
114
|
+
model?: Model<any>; // new model for next turn
|
|
115
|
+
thinkingLevel?: ThinkingLevel; // new thinking level
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Called after each `turn_end` and before deciding whether to start another LLM call. Enables **dynamic model routing** mid-run without restarting.
|
|
120
|
+
|
|
121
|
+
**pi-crew relevance:** Process-per-task model means each task is already isolated. No use for `prepareNextTurn`. However, this could enable a future single-process execution mode.
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## 4. New `shouldStopAfterTurn` API
|
|
126
|
+
|
|
127
|
+
```typescript
|
|
128
|
+
shouldStopAfterTurn?: (context: ShouldStopAfterTurnContext) => boolean | Promise<boolean>;
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Called after each turn completes. Return `true` to gracefully stop after the current turn (without starting another LLM call).
|
|
132
|
+
|
|
133
|
+
**pi-crew relevance:** Could be used to implement turn-count-based task completion (instead of relying on `maxTurns` in child-pi).
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## 5. New `transformContext` API
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
transformContext?: (messages: AgentMessage[], signal?: AbortSignal) => Promise<AgentMessage[]>;
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Applied to context before `convertToLlm` at each turn. For context window management or external context injection.
|
|
144
|
+
|
|
145
|
+
**pi-crew relevance:** Could replace the current approach of rewriting prompts in `before_agent_start` — instead, transform the full context between turns.
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## 6. Result Type System
|
|
150
|
+
|
|
151
|
+
```typescript
|
|
152
|
+
// packages/agent/src/harness/types.ts
|
|
153
|
+
export type Result<TValue, TError> =
|
|
154
|
+
| { ok: true; value: TValue }
|
|
155
|
+
| { ok: false; error: TError };
|
|
156
|
+
|
|
157
|
+
export function ok<TValue, TError>(value: TValue): Result<TValue, TError>
|
|
158
|
+
export function err<TValue, TError>(error: TError): Result<TValue, TError>
|
|
159
|
+
export function getOrThrow<TValue, TError>(result: Result<TValue, TError>): TValue
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Formal result type for all harness filesystem and execution operations. Prevents thrown exceptions for expected failures.
|
|
163
|
+
|
|
164
|
+
**pi-crew relevance:** No current use. If pi-crew ever uses `AgentHarness` directly, this would be the expected error-handling pattern.
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## 7. Image Generation API (`@earendil-works/pi-ai`)
|
|
169
|
+
|
|
170
|
+
```typescript
|
|
171
|
+
// packages/ai/src/images.ts
|
|
172
|
+
export async function generateImages<TApi extends ImagesApi>(
|
|
173
|
+
model: ImagesModel<TApi>,
|
|
174
|
+
context: ImagesGenerationContext,
|
|
175
|
+
options?: ImagesGenerationOptions
|
|
176
|
+
): Promise<ImageResult[]>
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
New image generation capability. Providers: OpenRouter images, Flux, DALL-E, etc.
|
|
180
|
+
|
|
181
|
+
**pi-crew relevance:** Tasks can now use image generation. No API change needed — pi handles it.
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## 8. Explicit Session ID Naming
|
|
186
|
+
|
|
187
|
+
```typescript
|
|
188
|
+
// packages/coding-agent/src/core/session-manager.ts
|
|
189
|
+
this.sessionId = options?.id ?? createSessionId();
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Users can now specify a custom session ID on startup.
|
|
193
|
+
|
|
194
|
+
**pi-crew relevance:** Could enhance `inheritContext` feature — pass a named session instead of raw JSON.
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## 9. Stream Options Patch System
|
|
199
|
+
|
|
200
|
+
```typescript
|
|
201
|
+
// AgentHarnessStreamOptionsPatch — returned by before_provider_request hooks
|
|
202
|
+
export interface AgentHarnessStreamOptionsPatch {
|
|
203
|
+
transport?: Transport;
|
|
204
|
+
timeoutMs?: number;
|
|
205
|
+
maxRetries?: number;
|
|
206
|
+
headers?: Record<string, string | undefined>; // undefined = delete
|
|
207
|
+
metadata?: Record<string, unknown | undefined>;
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
Hooks can now **modify stream options** before each LLM call (per-turn patching).
|
|
212
|
+
|
|
213
|
+
**pi-crew relevance:** Could enable per-task timeout/retries via hooks instead of process-level limits.
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## 10. Bug Fixes Affecting pi-crew
|
|
218
|
+
|
|
219
|
+
### Tool Preflight Abort (`b9448276`)
|
|
220
|
+
|
|
221
|
+
**Before:** When a run was aborted, sibling tool calls kept preparing in parallel.
|
|
222
|
+
|
|
223
|
+
**After:** `signal?.aborted` check breaks the tool execution loop immediately.
|
|
224
|
+
|
|
225
|
+
```typescript
|
|
226
|
+
// agent-loop.ts
|
|
227
|
+
if (signal?.aborted) {
|
|
228
|
+
break; // Stop preparing sibling tool calls
|
|
229
|
+
}
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
**pi-crew relevance:** When pi-crew calls `cancel` on a running task, pi now correctly stops tool preflight immediately. Previously, pending tool calls could continue executing even after cancellation.
|
|
233
|
+
|
|
234
|
+
### RPC Child Process Exit (`e007fcd0`)
|
|
235
|
+
|
|
236
|
+
RPC now rejects pending requests when child process exits. Affects `child-pi.ts` communication.
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## 11. AgentHarness Key Source Files
|
|
241
|
+
|
|
242
|
+
| File | Lines | Purpose |
|
|
243
|
+
|------|-------|---------|
|
|
244
|
+
| `harness/agent-harness.ts` | ~950 | Main orchestrator |
|
|
245
|
+
| `harness/types.ts` | ~817 | All types, hooks, error codes |
|
|
246
|
+
| `harness/session/session.ts` | 252 | Session abstraction |
|
|
247
|
+
| `harness/session/jsonl-storage.ts` | 293 | JSONL persistence |
|
|
248
|
+
| `harness/session/session-repo.ts` | 231 | Session CRUD |
|
|
249
|
+
| `harness/skills.ts` | 375 | Skill loading + formatting |
|
|
250
|
+
| `harness/prompt-templates.ts` | 267 | Prompt template processing |
|
|
251
|
+
| `harness/compaction/compaction.ts` | 842 | Transcript compaction |
|
|
252
|
+
| `harness/compaction/branch-summarization.ts` | 355 | Branch summarization |
|
|
253
|
+
| `harness/env/nodejs.ts` | 370+ | Node.js execution environment |
|
|
254
|
+
| `harness/execution-env.ts` | Abstract | FS + shell abstraction |
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## 12. Opportunities for pi-crew Enhancement
|
|
259
|
+
|
|
260
|
+
> **Full plans:** [`docs/pi-mono-opportunities.md`](./pi-mono-opportunities.md)
|
|
261
|
+
|
|
262
|
+
### High Priority
|
|
263
|
+
|
|
264
|
+
**BM25 Semantic Reranking** — Fix `recommendTeam()` keyword failures by integrating existing BM25 search.
|
|
265
|
+
|
|
266
|
+
### Medium Priority
|
|
267
|
+
|
|
268
|
+
**Extended Hook Phases** — `before_turn`/`after_turn` hooks using existing `turn_end` tracking in `child-pi.ts`.
|
|
269
|
+
|
|
270
|
+
**Hook Lifecycle Tests** — Cover untested hooks: `task_result`, `before_retry`, `before_publish`, `session_before_switch`, `run_recovery`.
|
|
271
|
+
|
|
272
|
+
### Future (6+ months)
|
|
273
|
+
|
|
274
|
+
**AgentHarness Migration** — When `AgentHarness` stabilizes (removes `Agent` dependency), pi-crew could replace `child-pi.ts` spawning with harness-based in-process execution. **Not a current concern.**
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## 13. Summary
|
|
279
|
+
|
|
280
|
+
| Check | Result |
|
|
281
|
+
|-------|--------|
|
|
282
|
+
| Breaking API changes | **None** |
|
|
283
|
+
| `Agent` class API | **Unchanged** — pi-crew compatible |
|
|
284
|
+
| `AgentHarness` class | **New** — additive, not used by pi-crew |
|
|
285
|
+
| New hooks | `context`, `resources_update`, `model_select`, `thinking_level_select` |
|
|
286
|
+
| New lifecycle APIs | `prepareNextTurn`, `shouldStopAfterTurn`, `transformContext` |
|
|
287
|
+
| New providers/features | Together AI, Xiaomi MiMo, Image generation, Codex websocket |
|
|
288
|
+
| Bug fixes affecting pi-crew | Tool preflight abort, RPC child exit |
|
|
289
|
+
| Migration path | AgentHarness (6+ months out, not urgent) |
|
|
290
|
+
|
|
291
|
+
**Conclusion:** pi-crew is fully compatible with the latest pi source. The `AgentHarness` refactor is substantial but additive — it coexists with the legacy `Agent` class that pi-crew uses. Focus on pi-crew-specific enhancements. Monitor `AgentHarness` stabilization for future migration.
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# pi-crew Skills Reference
|
|
2
|
+
|
|
3
|
+
## Skill Chains
|
|
4
|
+
|
|
5
|
+
### Bug Investigation
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
systematic-debugging (4 phases with refuse gate)
|
|
9
|
+
↓
|
|
10
|
+
verification-before-done (evidence before claim)
|
|
11
|
+
↓
|
|
12
|
+
post-mortem (RCA documentation)
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### Multi-phase Work
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
orchestration (phase coordination)
|
|
19
|
+
↓
|
|
20
|
+
delegation-patterns (task splitting)
|
|
21
|
+
↓
|
|
22
|
+
verification-before-done (after each phase)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Code Review (Quick)
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
scrutinize (outsider perspective + simpler alternative)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Code Review (Deep)
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
scrutinize (outsider perspective)
|
|
35
|
+
↓
|
|
36
|
+
multi-perspective-review (8-pass deep review)
|
|
37
|
+
↓
|
|
38
|
+
secure-agent-orchestration-review (security focus)
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## When to Invoke
|
|
44
|
+
|
|
45
|
+
| Situation | Skill |
|
|
46
|
+
|-----------|-------|
|
|
47
|
+
| Bug / test failure / crash | `systematic-debugging` |
|
|
48
|
+
| Before claiming done | `verification-before-done` |
|
|
49
|
+
| Code review (quick) | `scrutinize` |
|
|
50
|
+
| Code review (deep) | `multi-perspective-review` |
|
|
51
|
+
| Task delegation | `delegation-patterns` |
|
|
52
|
+
| Complex multi-phase work | `orchestration` |
|
|
53
|
+
| After bug is fixed | `post-mortem` |
|
|
54
|
+
| Security review | `security-review` |
|
|
55
|
+
| Workspace safety | `workspace-isolation` |
|
|
56
|
+
| Bash safety | `safe-bash` |
|
|
57
|
+
| Hypothesis-driven investigation | `threat-hypothesis-framework` |
|
|
58
|
+
| Active threat hunting | `hunting-investigation-loop` |
|
|
59
|
+
| Artifact examination | `artifact-analysis-loop` |
|
|
60
|
+
| Building response procedures | `incident-playbook-construction` |
|
|
61
|
+
| Designing detection pipelines | `detection-pipeline-design` |
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Skills Inventory
|
|
66
|
+
|
|
67
|
+
### Core Discipline
|
|
68
|
+
|
|
69
|
+
| Skill | Description |
|
|
70
|
+
|-------|-------------|
|
|
71
|
+
| `systematic-debugging` | Four-phase debugging with refuse gates, falsify-first discipline |
|
|
72
|
+
| `verification-before-done` | Evidence before claims |
|
|
73
|
+
| `orchestration` | Multi-phase coordination, 8 rules including "respawn not absorb" |
|
|
74
|
+
|
|
75
|
+
### Security
|
|
76
|
+
|
|
77
|
+
| Skill | Description |
|
|
78
|
+
|-------|-------------|
|
|
79
|
+
| `security-review` | Security review with audit and detection authoring |
|
|
80
|
+
| `threat-hypothesis-framework` | Hypothesis-driven investigation |
|
|
81
|
+
| `hunting-investigation-loop` | Active threat hunting with validation |
|
|
82
|
+
| `artifact-analysis-loop` | Artifact analysis with IOC extraction |
|
|
83
|
+
| `incident-playbook-construction` | Playbook building with steps, decisions, SLAs |
|
|
84
|
+
| `detection-pipeline-design` | Data pipeline design for security monitoring |
|
|
85
|
+
|
|
86
|
+
### Documentation
|
|
87
|
+
|
|
88
|
+
| Skill | Description |
|
|
89
|
+
|-------|-------------|
|
|
90
|
+
| `post-mortem` | Engineering RCA record |
|
|
91
|
+
|
|
92
|
+
### Delegation
|
|
93
|
+
|
|
94
|
+
| Skill | Description |
|
|
95
|
+
|-------|-------------|
|
|
96
|
+
| `delegation-patterns` | Task splitting patterns |
|
|
97
|
+
| `requirements-to-task-packet` | Task packet creation |
|
|
98
|
+
|
|
99
|
+
### Runtime/Safety
|
|
100
|
+
|
|
101
|
+
| Skill | Description |
|
|
102
|
+
|-------|-------------|
|
|
103
|
+
| `workspace-isolation` | Security boundary enforcement |
|
|
104
|
+
| `worktree-isolation` | Git worktree safety |
|
|
105
|
+
| `safe-bash` | Bash command safety |
|
|
106
|
+
| `state-mutation-locking` | State mutation protection |
|
|
107
|
+
|
|
108
|
+
### Observability
|
|
109
|
+
|
|
110
|
+
| Skill | Description |
|
|
111
|
+
|-------|-------------|
|
|
112
|
+
| `event-log-tracing` | JSONL event log analysis |
|
|
113
|
+
| `runtime-state-reader` | Runtime state inspection |
|
|
114
|
+
| `observability-reliability` | Reliability patterns |
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Anti-patterns
|
|
119
|
+
|
|
120
|
+
| Anti-pattern | Skill | Rule |
|
|
121
|
+
|--------------|-------|------|
|
|
122
|
+
| Proposing fix before reproducing | `systematic-debugging` | Refuse Gate |
|
|
123
|
+
| Running proof before disproof | `systematic-debugging` | Phase 3 |
|
|
124
|
+
| Claiming "tests pass" without fresh run | `verification-before-done` | Gate Function |
|
|
125
|
+
| Reviewing diff-local without tracing path | `scrutinize` | Trace step |
|
|
126
|
+
| Skipping simpler-alternative pass | `multi-perspective-review` | Pre-review |
|
|
127
|
+
| Editing files yourself as orchestrator | `orchestration` | Rule 1 |
|
|
128
|
+
| Dispatching serially when parallel possible | `orchestration` | Rule 3 |
|
|
129
|
+
| Committing a red tree | `orchestration` | Rule 6 |
|
|
130
|
+
| Absorbing subagent's broken work | `orchestration` | Rule 7 |
|
|
131
|
+
| Rubber-stamp review | `multi-perspective-review` | Rules |
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Key Enforcement Patterns (from 9arm)
|
|
136
|
+
|
|
137
|
+
| Pattern | Implemented In |
|
|
138
|
+
|---------|---------------|
|
|
139
|
+
| **Refuse Gate** | `systematic-debugging` |
|
|
140
|
+
| **Recite Ritual** | `systematic-debugging` (Invocation) |
|
|
141
|
+
| **Falsify Before Proof** | `systematic-debugging` (Phase 3) |
|
|
142
|
+
| **Simpler Alternative Pass** | `scrutinize`, `multi-perspective-review` |
|
|
143
|
+
| **Required Inputs Gate** | `post-mortem` |
|
|
144
|
+
| **Respawn Not Absorb** | `orchestration` (Rule 7) |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-crew",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.5",
|
|
4
4
|
"description": "Pi extension for coordinated AI teams, workflows, worktrees, and async task orchestration",
|
|
5
5
|
"author": "baphuongna",
|
|
6
6
|
"license": "MIT",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"check:lazy-imports": "node scripts/check-lazy-imports.mjs",
|
|
49
49
|
"typecheck": "tsc --noEmit && node --experimental-strip-types -e \"await import('./index.ts'); console.log('strip-types import ok')\"",
|
|
50
50
|
"test": "npm run test:unit && npm run test:integration",
|
|
51
|
-
"test:unit": "node --experimental-strip-types --test --test-concurrency=4 --test-timeout=
|
|
51
|
+
"test:unit": "node --experimental-strip-types --test --test-concurrency=4 --test-timeout=180000 --test-force-exit test/unit/*.test.ts",
|
|
52
52
|
"test:watch": "node --experimental-strip-types --watch --test --test-concurrency=4 --test-timeout=30000 --test-force-exit test/unit/*.test.ts",
|
|
53
53
|
"test:integration": "node --experimental-strip-types --test --test-concurrency=1 --test-timeout=120000 test/integration/*.test.ts",
|
|
54
54
|
"build:bundle": "node scripts/build-bundle.mjs",
|
|
@@ -80,6 +80,7 @@
|
|
|
80
80
|
},
|
|
81
81
|
"dependencies": {
|
|
82
82
|
"@sinclair/typebox": "^0.34.49",
|
|
83
|
+
"ajv": "^8.20.0",
|
|
83
84
|
"cli-highlight": "^2.1.11",
|
|
84
85
|
"diff": "^5.2.0",
|
|
85
86
|
"jiti": "^2.6.1",
|
|
@@ -87,10 +88,10 @@
|
|
|
87
88
|
},
|
|
88
89
|
"devDependencies": {
|
|
89
90
|
"@biomejs/biome": "^2.4.15",
|
|
90
|
-
"@earendil-works/pi-agent-core": "^0.
|
|
91
|
-
"@earendil-works/pi-ai": "^0.
|
|
92
|
-
"@earendil-works/pi-coding-agent": "^0.
|
|
93
|
-
"@earendil-works/pi-tui": "^0.
|
|
91
|
+
"@earendil-works/pi-agent-core": "^0.77.0",
|
|
92
|
+
"@earendil-works/pi-ai": "^0.77.0",
|
|
93
|
+
"@earendil-works/pi-coding-agent": "^0.77.0",
|
|
94
|
+
"@earendil-works/pi-tui": "^0.77.0",
|
|
94
95
|
"esbuild": "^0.28.0",
|
|
95
96
|
"typescript": "^5.9.3"
|
|
96
97
|
},
|