pi-skill-search 0.1.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/CHANGELOG.md +20 -0
- package/LICENSE +21 -0
- package/README.md +97 -0
- package/index.ts +163 -0
- package/package.json +48 -0
- package/skills/adaptyv/SKILL.md +92 -0
- package/skills/add-community-extension/SKILL.md +85 -0
- package/skills/aeon/SKILL.md +111 -0
- package/skills/ai-slop-cleaner/SKILL.md +118 -0
- package/skills/anndata/SKILL.md +83 -0
- package/skills/arboreto/SKILL.md +107 -0
- package/skills/ask/SKILL.md +55 -0
- package/skills/astropy/SKILL.md +30 -0
- package/skills/async-worker-recovery/SKILL.md +44 -0
- package/skills/autopilot/SKILL.md +63 -0
- package/skills/autoresearch/SKILL.md +64 -0
- package/skills/autoskill/SKILL.md +116 -0
- package/skills/babysit/SKILL.md +43 -0
- package/skills/benchling-integration/SKILL.md +106 -0
- package/skills/bgpt-paper-search/SKILL.md +67 -0
- package/skills/biopython/SKILL.md +29 -0
- package/skills/bioservices/SKILL.md +96 -0
- package/skills/brainstorming/SKILL.md +104 -0
- package/skills/cancel/SKILL.md +85 -0
- package/skills/ccg/SKILL.md +87 -0
- package/skills/celery-pipeline/SKILL.md +30 -0
- package/skills/cellxgene-census/SKILL.md +104 -0
- package/skills/child-pi-spawning/SKILL.md +85 -0
- package/skills/cirq/SKILL.md +113 -0
- package/skills/citation-management/SKILL.md +91 -0
- package/skills/clinical-decision-support/SKILL.md +117 -0
- package/skills/clinical-reports/SKILL.md +118 -0
- package/skills/clinical-trial/SKILL.md +28 -0
- package/skills/cobrapy/SKILL.md +116 -0
- package/skills/configure-notifications/SKILL.md +85 -0
- package/skills/consciousness-council/SKILL.md +120 -0
- package/skills/context-artifact-hygiene/SKILL.md +85 -0
- package/skills/context-mode-ops/SKILL.md +87 -0
- package/skills/dask/SKILL.md +85 -0
- package/skills/database-lookup/SKILL.md +118 -0
- package/skills/datamol/SKILL.md +108 -0
- package/skills/debug/SKILL.md +32 -0
- package/skills/deep-dive/SKILL.md +114 -0
- package/skills/deep-interview/SKILL.md +90 -0
- package/skills/deepchem/SKILL.md +117 -0
- package/skills/deepinit/SKILL.md +100 -0
- package/skills/deeptools/SKILL.md +118 -0
- package/skills/delegation-patterns/SKILL.md +56 -0
- package/skills/depmap/SKILL.md +94 -0
- package/skills/dhdna-profiler/SKILL.md +86 -0
- package/skills/diffdock/SKILL.md +101 -0
- package/skills/dispatching-parallel-agents/SKILL.md +119 -0
- package/skills/dnanexus-integration/SKILL.md +118 -0
- package/skills/do/SKILL.md +48 -0
- package/skills/docker-sandbox/SKILL.md +29 -0
- package/skills/docx/SKILL.md +119 -0
- package/skills/esm/SKILL.md +116 -0
- package/skills/etetoolkit/SKILL.md +103 -0
- package/skills/event-log-tracing/SKILL.md +85 -0
- package/skills/exa-search/SKILL.md +72 -0
- package/skills/executing-plans/SKILL.md +69 -0
- package/skills/exploratory-data-analysis/SKILL.md +118 -0
- package/skills/external-context/SKILL.md +80 -0
- package/skills/fastapi/SKILL.md +30 -0
- package/skills/finishing-a-development-branch/SKILL.md +106 -0
- package/skills/flowio/SKILL.md +114 -0
- package/skills/fluidsim/SKILL.md +108 -0
- package/skills/generate-image/SKILL.md +108 -0
- package/skills/geniml/SKILL.md +117 -0
- package/skills/geomaster/SKILL.md +109 -0
- package/skills/geopandas/SKILL.md +114 -0
- package/skills/get-available-resources/SKILL.md +100 -0
- package/skills/gget/SKILL.md +111 -0
- package/skills/ginkgo-cloud-lab/SKILL.md +52 -0
- package/skills/git-master/SKILL.md +85 -0
- package/skills/glycoengineering/SKILL.md +104 -0
- package/skills/gtars/SKILL.md +104 -0
- package/skills/hackernews-frontpage/SKILL.md +46 -0
- package/skills/histolab/SKILL.md +98 -0
- package/skills/how-it-works/SKILL.md +25 -0
- package/skills/hud/SKILL.md +86 -0
- package/skills/hugging-science/SKILL.md +93 -0
- package/skills/huggingface/SKILL.md +30 -0
- package/skills/hypogenic/SKILL.md +107 -0
- package/skills/hypothesis-generation/SKILL.md +118 -0
- package/skills/imaging-data-commons/SKILL.md +119 -0
- package/skills/infographics/SKILL.md +102 -0
- package/skills/iso-13485-certification/SKILL.md +114 -0
- package/skills/knowledge-agent/SKILL.md +83 -0
- package/skills/labarchive-integration/SKILL.md +98 -0
- package/skills/lamindb/SKILL.md +119 -0
- package/skills/landsat/SKILL.md +29 -0
- package/skills/latchbio-integration/SKILL.md +118 -0
- package/skills/latex-posters/SKILL.md +112 -0
- package/skills/learn-codebase/SKILL.md +24 -0
- package/skills/learner/SKILL.md +118 -0
- package/skills/literature-review/SKILL.md +118 -0
- package/skills/live-agent-lifecycle/SKILL.md +85 -0
- package/skills/mailbox-interactive/SKILL.md +85 -0
- package/skills/make-plan/SKILL.md +59 -0
- package/skills/markdown-mermaid-writing/SKILL.md +118 -0
- package/skills/market-research-reports/SKILL.md +119 -0
- package/skills/markitdown/SKILL.md +111 -0
- package/skills/markitdown-docs/SKILL.md +28 -0
- package/skills/matchms/SKILL.md +91 -0
- package/skills/matlab/SKILL.md +118 -0
- package/skills/matplotlib/SKILL.md +30 -0
- package/skills/mcp-setup/SKILL.md +84 -0
- package/skills/medchem/SKILL.md +109 -0
- package/skills/mem-search/SKILL.md +96 -0
- package/skills/modal/SKILL.md +104 -0
- package/skills/model-routing-context/SKILL.md +85 -0
- package/skills/molecular-dynamics/SKILL.md +116 -0
- package/skills/molfeat/SKILL.md +110 -0
- package/skills/multi-perspective-review/SKILL.md +85 -0
- package/skills/networkx/SKILL.md +111 -0
- package/skills/neurokit2/SKILL.md +114 -0
- package/skills/neuropixels-analysis/SKILL.md +112 -0
- package/skills/nilearn/SKILL.md +29 -0
- package/skills/observability-reliability/SKILL.md +43 -0
- package/skills/omc-doctor/SKILL.md +86 -0
- package/skills/omc-reference/SKILL.md +119 -0
- package/skills/omc-setup/SKILL.md +82 -0
- package/skills/omc-teams/SKILL.md +81 -0
- package/skills/omero-integration/SKILL.md +111 -0
- package/skills/open-notebook/SKILL.md +100 -0
- package/skills/openephys/SKILL.md +28 -0
- package/skills/opentrons-integration/SKILL.md +110 -0
- package/skills/optimize-for-gpu/SKILL.md +119 -0
- package/skills/orchestration/SKILL.md +85 -0
- package/skills/ownership-session-security/SKILL.md +43 -0
- package/skills/paper-lookup/SKILL.md +119 -0
- package/skills/paperzilla/SKILL.md +114 -0
- package/skills/parallel-web/SKILL.md +64 -0
- package/skills/pathfinder/SKILL.md +114 -0
- package/skills/pathml/SKILL.md +98 -0
- package/skills/pdf/SKILL.md +113 -0
- package/skills/peer-review/SKILL.md +119 -0
- package/skills/pennylane/SKILL.md +119 -0
- package/skills/phylogenetics/SKILL.md +102 -0
- package/skills/pi-extension-lifecycle/SKILL.md +41 -0
- package/skills/plan/SKILL.md +66 -0
- package/skills/polars/SKILL.md +114 -0
- package/skills/polars-bio/SKILL.md +84 -0
- package/skills/pptx/SKILL.md +118 -0
- package/skills/pptx-posters/SKILL.md +112 -0
- package/skills/primekg/SKILL.md +97 -0
- package/skills/project-session-manager/SKILL.md +85 -0
- package/skills/protocolsio-integration/SKILL.md +119 -0
- package/skills/pubmed-search/SKILL.md +29 -0
- package/skills/pufferlib/SKILL.md +103 -0
- package/skills/pydeseq2/SKILL.md +106 -0
- package/skills/pydicom/SKILL.md +115 -0
- package/skills/pyhealth/SKILL.md +117 -0
- package/skills/pylabrobot/SKILL.md +100 -0
- package/skills/pymatgen/SKILL.md +28 -0
- package/skills/pymc/SKILL.md +108 -0
- package/skills/pymoo/SKILL.md +90 -0
- package/skills/pyopenms/SKILL.md +119 -0
- package/skills/pysam/SKILL.md +118 -0
- package/skills/pyspark/SKILL.md +30 -0
- package/skills/pytdc/SKILL.md +102 -0
- package/skills/pytorch/SKILL.md +31 -0
- package/skills/pytorch-lightning/SKILL.md +119 -0
- package/skills/pyzotero/SKILL.md +104 -0
- package/skills/qiskit/SKILL.md +119 -0
- package/skills/qutip/SKILL.md +111 -0
- package/skills/ralph/SKILL.md +23 -0
- package/skills/ralplan/SKILL.md +105 -0
- package/skills/rdflib/SKILL.md +29 -0
- package/skills/rdkit/SKILL.md +30 -0
- package/skills/read-only-explorer/SKILL.md +85 -0
- package/skills/receiving-code-review/SKILL.md +103 -0
- package/skills/release/SKILL.md +117 -0
- package/skills/remember/SKILL.md +39 -0
- package/skills/requesting-code-review/SKILL.md +85 -0
- package/skills/requirements-to-task-packet/SKILL.md +65 -0
- package/skills/research-grants/SKILL.md +118 -0
- package/skills/research-lookup/SKILL.md +117 -0
- package/skills/research-reproducibility/SKILL.md +28 -0
- package/skills/resource-discovery-config/SKILL.md +43 -0
- package/skills/rowan/SKILL.md +100 -0
- package/skills/runtime-state-reader/SKILL.md +46 -0
- package/skills/safe-bash/SKILL.md +85 -0
- package/skills/scanpy/SKILL.md +32 -0
- package/skills/scholar-evaluation/SKILL.md +115 -0
- package/skills/scientific-brainstorming/SKILL.md +118 -0
- package/skills/scientific-critical-thinking/SKILL.md +119 -0
- package/skills/scientific-schematics/SKILL.md +116 -0
- package/skills/scientific-slides/SKILL.md +117 -0
- package/skills/scientific-visualization/SKILL.md +109 -0
- package/skills/scientific-writing/SKILL.md +119 -0
- package/skills/scikit-bio/SKILL.md +92 -0
- package/skills/scikit-learn/SKILL.md +99 -0
- package/skills/scikit-survival/SKILL.md +110 -0
- package/skills/sciomc/SKILL.md +86 -0
- package/skills/scvelo/SKILL.md +106 -0
- package/skills/scvi-tools/SKILL.md +114 -0
- package/skills/seaborn/SKILL.md +97 -0
- package/skills/secure-agent-orchestration-review/SKILL.md +47 -0
- package/skills/self-improve/SKILL.md +119 -0
- package/skills/semantic-compression/SKILL.md +62 -0
- package/skills/setup/SKILL.md +42 -0
- package/skills/shap/SKILL.md +103 -0
- package/skills/simpy/SKILL.md +116 -0
- package/skills/skill/SKILL.md +117 -0
- package/skills/skill-search/SKILL.md +67 -0
- package/skills/skillify/SKILL.md +46 -0
- package/skills/smart-explore/SKILL.md +94 -0
- package/skills/sqlite-pandas/SKILL.md +30 -0
- package/skills/stable-baselines3/SKILL.md +86 -0
- package/skills/state-mutation-locking/SKILL.md +44 -0
- package/skills/statistical-analysis/SKILL.md +108 -0
- package/skills/statsmodels/SKILL.md +29 -0
- package/skills/subagent-driven-development/SKILL.md +89 -0
- package/skills/sympy/SKILL.md +115 -0
- package/skills/system-prompts/SKILL.md +116 -0
- package/skills/systematic-debugging/SKILL.md +119 -0
- package/skills/team/SKILL.md +85 -0
- package/skills/test-driven-development/SKILL.md +84 -0
- package/skills/tiledbvcf/SKILL.md +119 -0
- package/skills/timeline-report/SKILL.md +85 -0
- package/skills/timesfm-forecasting/SKILL.md +112 -0
- package/skills/torch-geometric/SKILL.md +118 -0
- package/skills/torchdrug/SKILL.md +118 -0
- package/skills/trace/SKILL.md +118 -0
- package/skills/transformers/SKILL.md +110 -0
- package/skills/treatment-plans/SKILL.md +119 -0
- package/skills/ui-render-performance/SKILL.md +41 -0
- package/skills/ultragoal/SKILL.md +63 -0
- package/skills/ultraqa/SKILL.md +85 -0
- package/skills/ultrawork/SKILL.md +20 -0
- package/skills/umap-learn/SKILL.md +119 -0
- package/skills/usfiscaldata/SKILL.md +118 -0
- package/skills/using-git-worktrees/SKILL.md +112 -0
- package/skills/using-superpowers/SKILL.md +85 -0
- package/skills/using-vetc/SKILL.md +92 -0
- package/skills/vaex/SKILL.md +111 -0
- package/skills/venue-templates/SKILL.md +113 -0
- package/skills/verification-before-completion/SKILL.md +88 -0
- package/skills/verification-before-done/SKILL.md +68 -0
- package/skills/verify/SKILL.md +33 -0
- package/skills/version-bump/SKILL.md +54 -0
- package/skills/vetc-analyze-ba/SKILL.md +117 -0
- package/skills/vetc-analyze-codebase/SKILL.md +118 -0
- package/skills/vetc-api-design/SKILL.md +103 -0
- package/skills/vetc-brainstorming/SKILL.md +116 -0
- package/skills/vetc-change-proposal/SKILL.md +111 -0
- package/skills/vetc-cicd/SKILL.md +113 -0
- package/skills/vetc-continuous-learning/SKILL.md +115 -0
- package/skills/vetc-deep-interview/SKILL.md +103 -0
- package/skills/vetc-docgen/SKILL.md +108 -0
- package/skills/vetc-frontend-patterns/SKILL.md +99 -0
- package/skills/vetc-iterative-retrieval/SKILL.md +110 -0
- package/skills/vetc-java-patterns/SKILL.md +113 -0
- package/skills/vetc-meta-skill-creator/SKILL.md +99 -0
- package/skills/vetc-oracle-patterns/SKILL.md +109 -0
- package/skills/vetc-performance-testing/SKILL.md +104 -0
- package/skills/vetc-pr-response/SKILL.md +106 -0
- package/skills/vetc-ralph/SKILL.md +108 -0
- package/skills/vetc-ralplan/SKILL.md +116 -0
- package/skills/vetc-receiving-review/SKILL.md +106 -0
- package/skills/vetc-reconcile-patterns/SKILL.md +117 -0
- package/skills/vetc-refactoring/SKILL.md +96 -0
- package/skills/vetc-runbook/SKILL.md +118 -0
- package/skills/vetc-sast/SKILL.md +118 -0
- package/skills/vetc-sdlc/SKILL.md +97 -0
- package/skills/vetc-security/SKILL.md +117 -0
- package/skills/vetc-spec-driven/SKILL.md +111 -0
- package/skills/vetc-spec-quality/SKILL.md +117 -0
- package/skills/vetc-systematic-debugging/SKILL.md +74 -0
- package/skills/vetc-tdd/SKILL.md +96 -0
- package/skills/vetc-thinking-pm/SKILL.md +110 -0
- package/skills/vetc-ui-visual-qa/SKILL.md +117 -0
- package/skills/vetc-verify/SKILL.md +101 -0
- package/skills/visual-verdict/SKILL.md +59 -0
- package/skills/what-if-oracle/SKILL.md +87 -0
- package/skills/widget-rendering/SKILL.md +85 -0
- package/skills/wiki/SKILL.md +69 -0
- package/skills/workspace-isolation/SKILL.md +85 -0
- package/skills/worktree-isolation/SKILL.md +85 -0
- package/skills/wowerpoint/SKILL.md +101 -0
- package/skills/writer-memory/SKILL.md +82 -0
- package/skills/writing-plans/SKILL.md +115 -0
- package/skills/writing-skills/SKILL.md +115 -0
- package/skills/xgboost/SKILL.md +29 -0
- package/skills/xgboost-ts/SKILL.md +28 -0
- package/skills/xlsx/SKILL.md +111 -0
- package/skills/zarr-python/SKILL.md +101 -0
- package/src/categories.ts +383 -0
- package/src/format.ts +104 -0
- package/src/indexer.ts +101 -0
- package/src/proactive.ts +51 -0
- package/src/scanner.ts +85 -0
- package/src/search.ts +89 -0
- package/src/strip.ts +29 -0
- package/src/synonyms.ts +83 -0
- package/src/text.ts +118 -0
- package/src/types.ts +64 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vetc-verify
|
|
3
|
+
description: PROACTIVELY verify feature hoàn thành — build, test, coverage, security, API contract. Dùng sau vetc-ralph hoặc sau khi implement xong, trước khi ship.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# VETC Verify — End-to-End Verification
|
|
7
|
+
|
|
8
|
+
Verify toàn diện sau khi implement. Không edit code — chỉ report pass/fail.
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
## When to Activate
|
|
13
|
+
|
|
14
|
+
- Sau khi implement xong (manual hoặc vetc-ralph)
|
|
15
|
+
- Trước khi mở PR hoặc merge
|
|
16
|
+
- Sau deslop pass, cần final check
|
|
17
|
+
- User nói: "verify", "kiểm tra", "chạy full check"
|
|
18
|
+
|
|
19
|
+
## Do NOT Activate When
|
|
20
|
+
|
|
21
|
+
- Đang implement code (chưa đến phase verify) → dùng implementation skills
|
|
22
|
+
- Build đang fail → fix build trước với `vetc-build-resolver`
|
|
23
|
+
- Chỉ cần code review, không cần full verification pipeline → dùng `vetc-review`
|
|
24
|
+
- Đang debug lỗi cụ thể → dùng `vetc-systematic-debugging`
|
|
25
|
+
|
|
26
|
+
## Rationalization Prevention
|
|
27
|
+
|
|
28
|
+
| Thought | Reality |
|
|
29
|
+
|---------|---------|
|
|
30
|
+
| "The build was fine yesterday" | Yesterday is not now. Run it again. |
|
|
31
|
+
| "I only changed a comment, no need to verify" | Verify is cheap. Regressions are expensive. |
|
|
32
|
+
| "Coverage is probably still above 80%" | "Probably" is not evidence. Run the coverage report. |
|
|
33
|
+
| "The CI will catch it" | CI catches it AFTER merge. You catch it BEFORE. |
|
|
34
|
+
| "I ran the tests locally already" | Were they ALL the tests? Was it a clean build? |
|
|
35
|
+
| "Security scan takes too long" | A vulnerability in production takes longer. |
|
|
36
|
+
| "The API contract hasn't changed" | Prove it. Compare the actual response with the spec. |
|
|
37
|
+
|
|
38
|
+
## Common Verification Failures
|
|
39
|
+
|
|
40
|
+
| Failure Pattern | Root Cause | Prevention |
|
|
41
|
+
|----------------|------------|------------|
|
|
42
|
+
| Tests pass locally, fail in CI | Dirty build, missing `mvn clean` | Always verify with clean build |
|
|
43
|
+
| Coverage drops silently | New code without tests | Check coverage after every change |
|
|
44
|
+
| Security scan finds what you missed | You didn't scan yourself | Run security quick scan before PR |
|
|
45
|
+
| API contract drift | Spec not updated with code changes | Compare actual response with spec |
|
|
46
|
+
| Debug statements left in code | Forgot to clean up | Gate 6 catches these |
|
|
47
|
+
|
|
48
|
+
## Verification Pipeline
|
|
49
|
+
|
|
50
|
+
### Gate 0 — Cross-Artifact Consistency (Optional)
|
|
51
|
+
|
|
52
|
+
Chỉ chạy khi có spec files trong `specs/{NNN}-{slug}/`. READ-ONLY analysis — không edit.
|
|
53
|
+
|
|
54
|
+
**6 Detection Passes:**
|
|
55
|
+
|
|
56
|
+
| Pass | What It Detects | Severity Range |
|
|
57
|
+
|------|-----------------|----------------|
|
|
58
|
+
| Duplication | Same requirement stated in multiple places | MEDIUM |
|
|
59
|
+
| Ambiguity | Vague or unclear requirements | HIGH |
|
|
60
|
+
| Underspecification | Missing details, incomplete requirements | HIGH |
|
|
61
|
+
| Principle Alignment | Violations of core principles (security-first, spec-first) | CRITICAL |
|
|
62
|
+
| Coverage Gaps | Requirements without tasks, tasks without requirements | CRITICAL |
|
|
63
|
+
| Inconsistency | Contradictions between spec, plan, tasks | CRITICAL |
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
## Artifact Consistency
|
|
67
|
+
| Pass | Findings | Max Severity |
|
|
68
|
+
|------|----------|--------------|
|
|
69
|
+
| Duplication | 0 | — |
|
|
70
|
+
| Ambiguity | 1 | HIGH |
|
|
71
|
+
| Underspecification | 2 | HIGH |
|
|
72
|
+
| Principle Alignment | 0 | — |
|
|
73
|
+
| Coverage Gaps | 1 | CRITICAL |
|
|
74
|
+
| Inconsistency | 0 | — |
|
|
75
|
+
| **Total** | **4** | **CRITICAL** |
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Gate 1 — Build
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# Backend
|
|
82
|
+
mvn clean compile -q
|
|
83
|
+
|
|
84
|
+
# Frontend
|
|
85
|
+
npm run build
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Result**: PASS (0 errors) / FAIL (list errors)
|
|
89
|
+
|
|
90
|
+
### Gate 2 — Tests
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
# Backend — targeted
|
|
94
|
+
mvn test -Dtest=XxxServiceImplTest -q
|
|
95
|
+
|
|
96
|
+
# Backend — full module
|
|
97
|
+
mvn test -pl <module> -q
|
|
98
|
+
|
|
99
|
+
# Frontend
|
|
100
|
+
|
|
101
|
+
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: visual-verdict
|
|
3
|
+
description: Structured visual QA verdict for screenshot-to-reference comparisons
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
- `reference_images[]` (one or more image paths)
|
|
7
|
+
- `generated_screenshot` (current output image)
|
|
8
|
+
- Optional: `category_hint` (e.g., `hackernews`, `sns-feed`, `dashboard`)
|
|
9
|
+
|
|
10
|
+
Return **JSON only** with this exact shape:
|
|
11
|
+
|
|
12
|
+
```json
|
|
13
|
+
{
|
|
14
|
+
"score": 0,
|
|
15
|
+
"verdict": "revise",
|
|
16
|
+
"category_match": false,
|
|
17
|
+
"differences": ["..."],
|
|
18
|
+
"suggestions": ["..."],
|
|
19
|
+
"reasoning": "short explanation"
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Rules:
|
|
24
|
+
- `score`: integer 0-100
|
|
25
|
+
- `verdict`: short status (`pass`, `revise`, or `fail`)
|
|
26
|
+
- `category_match`: `true` when the generated screenshot matches the intended UI category/style
|
|
27
|
+
- `differences[]`: concrete visual mismatches (layout, spacing, typography, colors, hierarchy)
|
|
28
|
+
- `suggestions[]`: actionable next edits tied to the differences
|
|
29
|
+
- `reasoning`: 1-2 sentence summary
|
|
30
|
+
|
|
31
|
+
- Target pass threshold is **90+**.
|
|
32
|
+
- If `score < 90`, continue editing and rerun `visual-verdict` before any further visual review pass.
|
|
33
|
+
- Do **not** treat the visual task as complete until the next screenshot clears the threshold.
|
|
34
|
+
|
|
35
|
+
When mismatch diagnosis is hard:
|
|
36
|
+
1. Keep `$visual-verdict` as the authoritative decision.
|
|
37
|
+
2. Use pixel-level diff tooling (pixel diff / pixelmatch overlay) as a **secondary debug aid** to localize hotspots.
|
|
38
|
+
3. Convert pixel diff hotspots into concrete `differences[]` and `suggestions[]` updates.
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
{
|
|
42
|
+
"score": 87,
|
|
43
|
+
"verdict": "revise",
|
|
44
|
+
"category_match": true,
|
|
45
|
+
"differences": [
|
|
46
|
+
"Top nav spacing is tighter than reference",
|
|
47
|
+
"Primary button uses smaller font weight"
|
|
48
|
+
],
|
|
49
|
+
"suggestions": [
|
|
50
|
+
"Increase nav item horizontal padding by 4px",
|
|
51
|
+
"Set primary button font-weight to 600"
|
|
52
|
+
],
|
|
53
|
+
"reasoning": "Core layout matches, but style details still diverge."
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Task: {{ARGUMENTS}}
|
|
58
|
+
|
|
59
|
+
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: what-if-oracle
|
|
3
|
+
description: Run structured What-If scenario analysis with multi-branch possibility exploration. Use this skill when the user asks speculative questions like "what if...", "what would happen if...", "what are the possibilities", "explore scenarios", "scenario analysis", "possibility space", "what could go wrong", "best case / worst case", "risk analysis", "contingency planning", "strategic options", or any question about uncertain futures. Also trigger when the user faces a fork-in-the-road decision, wants to stress-test an idea, or needs to think through consequences before committing.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# What-If Oracle — Possibility Space Explorer
|
|
7
|
+
|
|
8
|
+
A structured system for exploring uncertain futures through rigorous multi-branch scenario analysis. Instead of one prediction, the Oracle maps the full **possibility space** — branching timelines where each path has its own logic, probability, and consequences.
|
|
9
|
+
|
|
10
|
+
Based on the What-If Statement paradigm: the idea that speculative questions ("What if X?") are not idle daydreaming but a **fundamental computing operation** — the mind's way of simulating futures before committing resources to one.
|
|
11
|
+
|
|
12
|
+
Published research: [The What-If Statement (DOI: 10.5281/zenodo.18736841)](https://doi.org/10.5281/zenodo.18736841) | [IDNA Consolidation v2 (DOI: 10.5281/zenodo.18807387)](https://doi.org/10.5281/zenodo.18807387)
|
|
13
|
+
|
|
14
|
+
## Core Principle: 0·IF·1
|
|
15
|
+
|
|
16
|
+
Every scenario analysis has three elements:
|
|
17
|
+
|
|
18
|
+
- **0** — The unexpressed state (what hasn't happened yet, the potential)
|
|
19
|
+
- **1** — The expressed state (what IS, the current reality)
|
|
20
|
+
- **IF** — The conditional bond (the decision, event, or change that transforms 0 into 1)
|
|
21
|
+
|
|
22
|
+
The quality of the analysis depends on the precision of the IF. A vague "what if things go wrong?" produces vague results. A precise "what if our primary supplier raises prices 30% in Q3?" produces actionable intelligence.
|
|
23
|
+
|
|
24
|
+
## How to Run the Oracle
|
|
25
|
+
|
|
26
|
+
### Phase 1 — Frame the Question
|
|
27
|
+
|
|
28
|
+
Take the user's What-If question and sharpen it:
|
|
29
|
+
|
|
30
|
+
**Decompose into components:**
|
|
31
|
+
|
|
32
|
+
- **The Variable:** What specific thing changes? (one variable per analysis)
|
|
33
|
+
- **The Magnitude:** By how much? (quantify if possible)
|
|
34
|
+
- **The Timeframe:** Over what period?
|
|
35
|
+
- **The Context:** What's the current state before the change?
|
|
36
|
+
|
|
37
|
+
**If the question is vague, sharpen it:**
|
|
38
|
+
|
|
39
|
+
- "What if AI takes over?" → "What if 40% of current knowledge-work tasks are automated by AI within 3 years in [specific industry]?"
|
|
40
|
+
- "What if we fail?" → "What if monthly revenue stays below $5K for 6 consecutive months starting now?"
|
|
41
|
+
|
|
42
|
+
Present the sharpened question to the user for confirmation before proceeding.
|
|
43
|
+
|
|
44
|
+
### Phase 2 — Map the Possibility Space
|
|
45
|
+
|
|
46
|
+
Generate **4-6 scenario branches** using this framework:
|
|
47
|
+
|
|
48
|
+
| Branch | Definition | Purpose |
|
|
49
|
+
| ------------------ | ---------------------------------------------------------------------------- | -------------------------------------------------- |
|
|
50
|
+
| **Ω Best Case** | Everything goes right. Key assumptions all validate. Lucky breaks occur. | Define the ceiling — what's the maximum upside? |
|
|
51
|
+
| **α Likely Case** | Most probable path given current evidence. No major surprises. | Anchor expectations in reality |
|
|
52
|
+
| **Δ Worst Case** | Key assumptions fail. Two things go wrong simultaneously. | Define the floor — what's the maximum downside? |
|
|
53
|
+
| **Ψ Wild Card** | An unexpected variable enters that nobody is tracking. Black swan territory. | Stress-test for the unimaginable |
|
|
54
|
+
| **Φ Contrarian** | The opposite of the consensus view turns out to be true. | Challenge groupthink and reveal hidden assumptions |
|
|
55
|
+
| **∞ Second Order** | The first-order effects trigger cascading consequences nobody predicted. | Map the ripple effects |
|
|
56
|
+
|
|
57
|
+
### Phase 3 — Analyze Each Branch
|
|
58
|
+
|
|
59
|
+
For each scenario branch, provide:
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
╔══════════════════════════════════════════════╗
|
|
63
|
+
║ BRANCH: [Ω/α/Δ/Ψ/Φ/∞] — [Branch Name] ║
|
|
64
|
+
╠══════════════════════════════════════════════╣
|
|
65
|
+
║ Probability: [X%] ║
|
|
66
|
+
║ Timeframe: [When this could materialize] ║
|
|
67
|
+
║ Confidence: [HIGH/MEDIUM/LOW] ║
|
|
68
|
+
╠══════════════════════════════════════════════╣
|
|
69
|
+
║ NARRATIVE: ║
|
|
70
|
+
║ [2-3 sentences describing how this ║
|
|
71
|
+
║ scenario unfolds step by step] ║
|
|
72
|
+
|
|
73
|
+
### Phase 4 — Synthesis
|
|
74
|
+
|
|
75
|
+
After analyzing all branches, provide:
|
|
76
|
+
|
|
77
|
+
**Probability Distribution:**
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
Ω Best Case ····· [██████░░░░] 15%
|
|
81
|
+
α Likely Case ··· [████████░░] 45%
|
|
82
|
+
Δ Worst Case ···· [██████░░░░] 20%
|
|
83
|
+
Ψ Wild Card ····· [███░░░░░░░] 8%
|
|
84
|
+
Φ Contrarian ···· [████░░░░░░] 7%
|
|
85
|
+
∞ Second Order ·· [███░░░░░░░] 5%
|
|
86
|
+
|
|
87
|
+
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: widget-rendering
|
|
3
|
+
description: Pi TUI crew widget data sources, display priority, and rendering performance. Use when debugging empty agents, ghost runs, or widget timing issues.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
# widget-rendering
|
|
8
|
+
|
|
9
|
+
The crew widget (`src/ui/crew-widget.ts`) displays active runs and their agents in the Pi TUI. It must render synchronously at TTY refresh rate without blocking. Understanding the data sources and timing rules is essential for debugging display issues.
|
|
10
|
+
|
|
11
|
+
## Three Data Sources
|
|
12
|
+
|
|
13
|
+
The widget has three sources, used in priority order:
|
|
14
|
+
|
|
15
|
+
### 1. `liveAgents` Map (real-time, highest priority)
|
|
16
|
+
|
|
17
|
+
In-memory map from `live-agent-manager.ts`. Provides:
|
|
18
|
+
- Real-time tool names: `activeTools` Map (toolName → description)
|
|
19
|
+
- Turn count, response text, compaction count
|
|
20
|
+
- Session stats: context %, token usage
|
|
21
|
+
- Status from the handle
|
|
22
|
+
|
|
23
|
+
**When used:** Agents with `liveHandle && liveHandle.status === "running"` get the live activity description (tool labels, response text, turn counter).
|
|
24
|
+
|
|
25
|
+
**When NOT used:** After `evictStaleLiveAgentHandles()` removes a handle, widget falls back to agent records on disk.
|
|
26
|
+
|
|
27
|
+
### 2. Snapshot cache (500ms TTL)
|
|
28
|
+
|
|
29
|
+
`RunSnapshotCache` from `run-snapshot-cache.ts` caches parsed manifests and agents for 500ms. Reduces disk reads during rapid refresh.
|
|
30
|
+
|
|
31
|
+
**When used:** As the fallback when no live handle exists. Prevents excessive disk reads on every render tick.
|
|
32
|
+
|
|
33
|
+
**Invalidation:** Cache is invalidated when:
|
|
34
|
+
- `invalidate()` is called on a specific run
|
|
35
|
+
- An empty result is returned (forces refresh on next tick)
|
|
36
|
+
- TTL expires (500ms)
|
|
37
|
+
|
|
38
|
+
### 3. `agents.json` on disk (durables, lowest priority)
|
|
39
|
+
|
|
40
|
+
`readCrewAgents(run)` reads `artifactsRoot/agents.json`. Provides:
|
|
41
|
+
- Final agent status (completed/failed/cancelled)
|
|
42
|
+
- Tool count, token usage from final record
|
|
43
|
+
- Error messages
|
|
44
|
+
- Timestamps (startedAt, completedAt)
|
|
45
|
+
|
|
46
|
+
**When used:** For completed agents, or when snapshot cache misses.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Display Priority
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
for each active run:
|
|
54
|
+
for each agent in run:
|
|
55
|
+
if liveAgents has this agent (by agentId or taskId):
|
|
56
|
+
→ use live activity description (tool labels, response text)
|
|
57
|
+
→ use live status (running/queued/waiting)
|
|
58
|
+
→ use live session stats (context %, turns, tokens)
|
|
59
|
+
else if snapshot cache has fresh data:
|
|
60
|
+
→ use cached agent status
|
|
61
|
+
→ use cached tool count, tokens, progress
|
|
62
|
+
else:
|
|
63
|
+
→ read agents.json from disk
|
|
64
|
+
→ use disk agent status
|
|
65
|
+
|
|
66
|
+
if status is completed/failed/cancelled:
|
|
67
|
+
→ apply linger rules (finishedAgents: 1min, errors: 2min)
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Active Runs Filtering
|
|
73
|
+
|
|
74
|
+
`activeWidgetRuns()` determines which runs to show. Key filter: `isDisplayActiveRun(manifest, tasks)` from `process-status.ts`.
|
|
75
|
+
|
|
76
|
+
**Rule: `hasStaleAsyncProcess()`**
|
|
77
|
+
|
|
78
|
+
A run with an async PID is considered stale (hidden) if:
|
|
79
|
+
1. PID is recorded but process is dead, AND
|
|
80
|
+
2. The run is more than 30 minutes old (`STALE_ACTIVE_RUN_MS = 30 * 60 * 1000`)
|
|
81
|
+
|
|
82
|
+
**Rule: `isDisplayActiveRun()`**
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
export function isDisplayActiveRun(manifest: TeamRunManifest, tasks: TeamTaskState[]): boolean {
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wiki
|
|
3
|
+
description: LLM Wiki — persistent markdown knowledge base that compounds across sessions (Karpathy model)
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Wiki
|
|
7
|
+
|
|
8
|
+
Persistent, self-maintained markdown knowledge base for project and session knowledge. Inspired by Karpathy's LLM Wiki concept.
|
|
9
|
+
|
|
10
|
+
## Operations
|
|
11
|
+
|
|
12
|
+
### Ingest
|
|
13
|
+
Process knowledge into wiki pages. A single ingest can touch multiple pages.
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
wiki_ingest({ title: "Auth Architecture", content: "...", tags: ["auth", "architecture"], category: "architecture" })
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### Query
|
|
20
|
+
Search across all wiki pages by keywords and tags. Returns matching pages with snippets — YOU (the LLM) synthesize answers with citations from the results.
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
wiki_query({ query: "authentication", tags: ["auth"], category: "architecture" })
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Lint
|
|
27
|
+
Run health checks on the wiki. Detects orphan pages, stale content, broken cross-references, oversized pages, and structural contradictions.
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
wiki_lint()
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Quick Add
|
|
34
|
+
Add a single page quickly (simpler than ingest).
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
wiki_add({ title: "Page Title", content: "...", tags: ["tag1"], category: "decision" })
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### List / Read / Delete
|
|
41
|
+
```
|
|
42
|
+
wiki_list() # Show all pages (reads index.md)
|
|
43
|
+
wiki_read({ page: "auth-architecture" }) # Read specific page
|
|
44
|
+
wiki_delete({ page: "outdated-page" }) # Delete a page
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Log
|
|
48
|
+
View wiki operation history by reading `.omc/wiki/log.md`.
|
|
49
|
+
|
|
50
|
+
## Categories
|
|
51
|
+
Pages are organized by category: `architecture`, `decision`, `pattern`, `debugging`, `environment`, `session-log`
|
|
52
|
+
|
|
53
|
+
## Storage
|
|
54
|
+
- Pages: `.omc/wiki/*.md` (markdown with YAML frontmatter)
|
|
55
|
+
- Index: `.omc/wiki/index.md` (auto-maintained catalog)
|
|
56
|
+
- Log: `.omc/wiki/log.md` (append-only operation chronicle)
|
|
57
|
+
|
|
58
|
+
## Cross-References
|
|
59
|
+
Use `[[page-name]]` wiki-link syntax to create cross-references between pages.
|
|
60
|
+
|
|
61
|
+
## Auto-Capture
|
|
62
|
+
At session end, significant discoveries are automatically captured as session-log pages. Configure via `wiki.autoCapture` in `.omc-config.json` (default: enabled).
|
|
63
|
+
|
|
64
|
+
## Hard Constraints
|
|
65
|
+
- NO vector embeddings — query uses keyword + tag matching only
|
|
66
|
+
- Wiki pages are git-ignored by default (`.omc/wiki/` is project-local)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: workspace-isolation
|
|
3
|
+
description: Workspace isolation boundaries in pi-crew. Use when ensuring agents from workspace A cannot access workspace B, or when implementing worktree-based parallel execution.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
# workspace-isolation
|
|
8
|
+
|
|
9
|
+
pi-crew enforces workspace isolation so that agents, runs, and live sessions from one project folder cannot be accessed from another. The workspace boundary is `manifest.cwd` — the directory where a run was initiated.
|
|
10
|
+
|
|
11
|
+
## Workspace Boundary Definition
|
|
12
|
+
|
|
13
|
+
**`manifest.cwd`** is the canonical workspace root. Every run record carries the directory where it was created.
|
|
14
|
+
|
|
15
|
+
**Why it matters:** Pi can have multiple workspace folders open simultaneously. Without isolation, an agent from workspace A could be steered/controlled from workspace B.
|
|
16
|
+
|
|
17
|
+
**Rules:**
|
|
18
|
+
- Every run's `manifest.cwd` is set at creation time
|
|
19
|
+
- Every live agent handle carries `workspaceId = manifest.cwd`
|
|
20
|
+
- Widget queries filter by `manifest.cwd`
|
|
21
|
+
- API operations reject cross-workspace access
|
|
22
|
+
|
|
23
|
+
## Live Agent Workspace Check
|
|
24
|
+
|
|
25
|
+
`LiveAgentHandle.workspaceId` field (added to prevent cross-workspace access):
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
interface LiveAgentHandle {
|
|
29
|
+
// ... other fields
|
|
30
|
+
/** Workspace where this agent was spawned — used for session-scoped visibility. */
|
|
31
|
+
workspaceId: string;
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**Enforcement in `api.ts`** (team-tool operations):
|
|
36
|
+
|
|
37
|
+
```typescript
|
|
38
|
+
// list-active-live-agents: filter by workspace
|
|
39
|
+
listActiveLiveAgentsByWorkspace(manifest.cwd);
|
|
40
|
+
|
|
41
|
+
// steer-agent, follow-up-agent, stop-agent, resume-agent:
|
|
42
|
+
const live = getLiveAgent(agentId);
|
|
43
|
+
if (live && live.workspaceId !== manifest.cwd)
|
|
44
|
+
return result(`Live agent '${agentId}' does not belong to workspace ${manifest.cwd}.`, { status: "error" }, true);
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Enforcement in `live-agent-manager.ts`**:
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
// listLiveAgentsByWorkspace(workspaceId): filter by workspaceId
|
|
51
|
+
export function listLiveAgentsByWorkspace(workspaceId: string): LiveAgentHandle[] {
|
|
52
|
+
return listLiveAgents().filter((a) => a.workspaceId === workspaceId);
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Team Workspace Modes
|
|
57
|
+
|
|
58
|
+
### `single` (default)
|
|
59
|
+
|
|
60
|
+
- All agents run in the project root (`manifest.cwd`)
|
|
61
|
+
- No worktree creation
|
|
62
|
+
- Simpler, but all workers share the same git state
|
|
63
|
+
|
|
64
|
+
### `worktree` (parallel isolation)
|
|
65
|
+
|
|
66
|
+
- Each task (or phase) gets its own git worktree
|
|
67
|
+
- Worktree path: `<repo-root>/.worktrees/<runId>/<taskId>/`
|
|
68
|
+
- Branch name: `crew/<runId>-<taskId>` (sanitized)
|
|
69
|
+
- Allows parallel code-changing tasks without git conflicts
|
|
70
|
+
|
|
71
|
+
**Entry point in `team-runner.ts`:**
|
|
72
|
+
```typescript
|
|
73
|
+
const worktree = workspaceMode === "worktree" && task.worktree !== undefined
|
|
74
|
+
? { path: task.worktree.path, branch: task.worktree.branch, reused: task.worktree.reused }
|
|
75
|
+
: undefined;
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Worktree lifecycle:**
|
|
79
|
+
|
|
80
|
+
1. **Creation** (`prepareTaskWorkspace` in `worktree-manager.ts`):
|
|
81
|
+
- Check leader repo is clean (`assertCleanLeader`)
|
|
82
|
+
- `git worktree add <path> <branch>`
|
|
83
|
+
- Link `node_modules` if present
|
|
84
|
+
- Mark reused if already exists
|
|
85
|
+
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: worktree-isolation
|
|
3
|
+
description: Conflict-safe git worktree workflow. Use when running parallel implementation workers, isolating risky edits, or cleaning up task worktrees.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
# worktree-isolation
|
|
8
|
+
|
|
9
|
+
Use this skill for worktree-based execution or cleanup. Git worktrees create isolated working directories that allow parallel code-changing tasks without git conflicts.
|
|
10
|
+
|
|
11
|
+
## How Worktrees Work
|
|
12
|
+
|
|
13
|
+
A git worktree is a separate working directory linked to the same repository. It has its own:
|
|
14
|
+
- Working directory (different path)
|
|
15
|
+
- HEAD (can be on a different branch)
|
|
16
|
+
- Staged/unstaged changes
|
|
17
|
+
|
|
18
|
+
But it shares:
|
|
19
|
+
- Object database (`.git/objects`)
|
|
20
|
+
- Refs (branches, tags)
|
|
21
|
+
|
|
22
|
+
This means creating a worktree is cheap (no clone needed) and fast.
|
|
23
|
+
|
|
24
|
+
## When to Use Worktrees
|
|
25
|
+
|
|
26
|
+
**Use worktree mode when:**
|
|
27
|
+
- Running parallel implementation workers that modify the same repo
|
|
28
|
+
- Isolating risky changes that might need to be discarded
|
|
29
|
+
- Running multiple agents on the same codebase simultaneously
|
|
30
|
+
- Running a long task that would block other work
|
|
31
|
+
|
|
32
|
+
**Don't use worktree mode when:**
|
|
33
|
+
- The task is read-only (use scaffold mode instead)
|
|
34
|
+
- Only one agent needs to work at a time
|
|
35
|
+
- The repository has uncommitted changes (must be clean)
|
|
36
|
+
|
|
37
|
+
## Worktree Lifecycle
|
|
38
|
+
|
|
39
|
+
### 1. Creation
|
|
40
|
+
|
|
41
|
+
**Prerequisites:**
|
|
42
|
+
- Leader repository must be clean (`git status` empty)
|
|
43
|
+
- Sufficient disk space for worktree directory
|
|
44
|
+
|
|
45
|
+
**Creation flow:**
|
|
46
|
+
```
|
|
47
|
+
team-runner.ts (workspaceMode: "worktree")
|
|
48
|
+
→ prepareTaskWorkspace(manifest, task)
|
|
49
|
+
→ assertCleanLeader(repoRoot)
|
|
50
|
+
→ git worktree add <path> <branch>
|
|
51
|
+
→ linkNodeModulesIfPresent(repoRoot, worktreePath)
|
|
52
|
+
→ return { cwd: worktreePath, worktreePath, branch }
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Naming convention:**
|
|
56
|
+
- Branch: `crew/<sanitized-runId>-<sanitized-taskId>`
|
|
57
|
+
- Path: `.worktrees/<runId>/<taskId>/`
|
|
58
|
+
- Deterministic from run/task IDs — no user-controlled fragments
|
|
59
|
+
|
|
60
|
+
**Example:**
|
|
61
|
+
```
|
|
62
|
+
Run: team_20260514092752_218fe358085d7115
|
|
63
|
+
Task: 01_explore
|
|
64
|
+
|
|
65
|
+
Branch: crew/team-20260514092752-218fe358085d7115/01-explore
|
|
66
|
+
Path: .worktrees/team-20260514092752-218fe358085d7115/01-explore/
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 2. Reuse
|
|
70
|
+
|
|
71
|
+
If a worktree with the same branch already exists, it is reused instead of recreated:
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
// Check if worktree already exists
|
|
75
|
+
const existing = git(cwd, ["worktree", "list", "--porcelain"]);
|
|
76
|
+
if (existing.includes(branch)) {
|
|
77
|
+
return { reused: true, worktreePath: parsePath(existing) };
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Reuse is safe when the worktree's base branch hasn't diverged (checked via `branch-freshness.ts`).
|
|
82
|
+
|
|
83
|
+
### 3. Work in worktree
|
|
84
|
+
|
|
85
|
+
Each task works in its own worktree directory:
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wowerpoint
|
|
3
|
+
description: Turn one document into a kawaii NotebookLM slide-deck PDF. Use for "wowerpoint this", "make a deck about <file>", "turn this report into slides", or any request to render a single document as shareable narrative slides.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Wowerpoint
|
|
7
|
+
|
|
8
|
+
One doc in, one PDF out. Slide-deck only — videos and podcasts from the same engine are noticeably worse and out of scope; refer the user to the `notebooklm` CLI directly if they want those.
|
|
9
|
+
|
|
10
|
+
## Triggers
|
|
11
|
+
|
|
12
|
+
- "Wowerpoint <file>"
|
|
13
|
+
- "Make a slide deck about <file>"
|
|
14
|
+
- "Turn this report into slides"
|
|
15
|
+
- "Kawaii-deck this"
|
|
16
|
+
|
|
17
|
+
## Setup (one-time per machine)
|
|
18
|
+
|
|
19
|
+
If `notebooklm auth check` returns 0 and `command -v jq` resolves, skip.
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
uv tool install --with playwright --force notebooklm-py
|
|
23
|
+
$(uv tool dir)/notebooklm-py/bin/playwright install chromium
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
`jq` is required by the workflow's JSON parsing; install if missing (`brew install jq` on macOS, or your distro's package manager).
|
|
27
|
+
|
|
28
|
+
Then the user authenticates interactively — do not script. Tell them to type `! notebooklm login` so the OAuth ENTER lands in their terminal.
|
|
29
|
+
|
|
30
|
+
## Workflow
|
|
31
|
+
|
|
32
|
+
### 1. The source doc
|
|
33
|
+
|
|
34
|
+
You need exactly one source doc. If it doesn't exist or is too thin to carry a deck, **write it first** — use mem-search and sequential thinking to make it comprehensive (long-form, narrative, several thousand words is normal). Do not paper over a weak source by adding more sources.
|
|
35
|
+
|
|
36
|
+
### 2. Auth pre-flight
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
notebooklm auth check 2>&1 | tail -5
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Exit 1 with `Run 'notebooklm login' to authenticate.` = halt and tell the user.
|
|
43
|
+
|
|
44
|
+
### 3. Create notebook, add the source
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
NOTEBOOK_ID=$(notebooklm create "<title>" --json | jq -r .notebook.id)
|
|
48
|
+
SOURCE_ID=$(notebooklm source add "<doc-path>" --notebook "$NOTEBOOK_ID" --json | jq -r .source.id)
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Title: H1 of the source doc, or its filename stem; append a date for dated work.
|
|
52
|
+
|
|
53
|
+
JSON envelope keys differ — `create` → `.notebook.id`, `source add` → `.source.id`, `generate` → `.task_id`. Wrong key = empty string = silent downstream failure.
|
|
54
|
+
|
|
55
|
+
### 4. Spawn the subagent
|
|
56
|
+
|
|
57
|
+
Generation takes ~10 minutes; never block on it. Use the template below with `run_in_background: true`.
|
|
58
|
+
|
|
59
|
+
### 5. End your turn
|
|
60
|
+
|
|
61
|
+
Print the notebook URL so the user can watch live:
|
|
62
|
+
|
|
63
|
+
```text
|
|
64
|
+
https://notebooklm.google.com/notebook/
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
The subagent's completion notification fires when the file is on disk.
|
|
68
|
+
|
|
69
|
+
## Output path
|
|
70
|
+
|
|
71
|
+
Adjacent to the source, parallel filename:
|
|
72
|
+
|
|
73
|
+
```text
|
|
74
|
+
<source-dir>/<source-stem>-slides.pdf
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
If the source isn't somewhere that makes sense as an output location, default to `reports/<stem>-slides.pdf`.
|
|
78
|
+
|
|
79
|
+
## Share link (WOWerpoint Server)
|
|
80
|
+
|
|
81
|
+
After the PDF lands on disk, the subagent also POSTs it to the WOWerpoint Server, which converts the 16:9 deck into a 9:16 mobile twin and returns a share URL. The share URL is the primary deliverable to the user; the PDF on disk is the backup.
|
|
82
|
+
|
|
83
|
+
Required env (exported in the user's shell — the subagent inherits the parent's environment, so plain `export` is enough; no dotenv loader runs):
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
WOWERPOINT_API_BASE=https://wowerpoint-api.<subdomain>.workers.dev
|
|
87
|
+
WOWERPOINT_VIEWER_BASE=https://wowerpoint-viewer.<subdomain>.workers.dev
|
|
88
|
+
WOWERPOINT_UPLOAD_TOKEN=<token>
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
If any var is missing, skip the share-link step and just hand the PDF over.
|
|
92
|
+
|
|
93
|
+
Upload pattern (run AFTER the subagent confirms the PDF exists on disk). Capture the full response so empty `id` and `error` payloads are handled — `jq -r '.id'` returns the literal string `null` on a missing key, so always pipe through `.id // empty`:
|
|
94
|
+
|
|
95
|
+
## The prompt
|
|
96
|
+
|
|
97
|
+
One sentence. Default:
|
|
98
|
+
|
|
99
|
+
```text
|
|
100
|
+
Use kawaii characters to tell the story of <subject>. Keep it warm and clear.
|
|
101
|
+
```
|