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,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mem-search
|
|
3
|
+
description: Search claude-mem's persistent cross-session memory database. Use when user asks "did we already solve this?", "how did we do X last time?", or needs work from previous sessions.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Memory Search
|
|
7
|
+
|
|
8
|
+
Search past work across all sessions. Simple workflow: search -> filter -> fetch.
|
|
9
|
+
|
|
10
|
+
## When to Use
|
|
11
|
+
|
|
12
|
+
Use when users ask about PREVIOUS sessions (not current conversation):
|
|
13
|
+
|
|
14
|
+
- "Did we already fix this?"
|
|
15
|
+
- "How did we solve X last time?"
|
|
16
|
+
- "What happened last week?"
|
|
17
|
+
|
|
18
|
+
## 3-Layer Workflow (ALWAYS Follow)
|
|
19
|
+
|
|
20
|
+
**NEVER fetch full details without filtering first. 10x token savings.**
|
|
21
|
+
|
|
22
|
+
### Step 1: Search - Get Index with IDs
|
|
23
|
+
|
|
24
|
+
Use the `search` MCP tool:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
search(query="authentication", limit=20, project="my-project")
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**Returns:** Table with IDs, timestamps, types, titles (~50-100 tokens/result)
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
| ID | Time | T | Title | Read |
|
|
34
|
+
|----|------|---|-------|------|
|
|
35
|
+
| #11131 | 3:48 PM | 🟣 | Added JWT authentication | ~75 |
|
|
36
|
+
| #10942 | 2:15 PM | 🔴 | Fixed auth token expiration | ~50 |
|
|
37
|
+
|
|
38
|
+
### Step 2: Timeline - Get Context Around Interesting Results
|
|
39
|
+
|
|
40
|
+
Use the `timeline` MCP tool:
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
timeline(anchor=11131, depth_before=3, depth_after=3, project="my-project")
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Or find anchor automatically from query:
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
timeline(query="authentication", depth_before=3, depth_after=3, project="my-project")
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**Returns:** `depth_before + 1 + depth_after` items in chronological order with observations, sessions, and prompts interleaved around the anchor.
|
|
53
|
+
|
|
54
|
+
### Step 3: Fetch - Get Full Details ONLY for Filtered IDs
|
|
55
|
+
|
|
56
|
+
Review titles from Step 1 and context from Step 2. Pick relevant IDs. Discard the rest.
|
|
57
|
+
|
|
58
|
+
Use the `get_observations` MCP tool:
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
get_observations(ids=[11131, 10942])
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**ALWAYS use `get_observations` for 2+ observations - single request vs N requests.**
|
|
65
|
+
|
|
66
|
+
**Parameters:**
|
|
67
|
+
|
|
68
|
+
- `ids` (array of numbers, required) - Observation IDs to fetch
|
|
69
|
+
|
|
70
|
+
## Examples
|
|
71
|
+
|
|
72
|
+
**Find recent bug fixes:**
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
search(query="bug", type="observations", obs_type="bugfix", limit=20, project="my-project")
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Find what happened last week:**
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
search(type="observations", dateStart="2025-11-11", limit=20, project="my-project")
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Understand context around a discovery:**
|
|
85
|
+
|
|
86
|
+
## Why This Workflow?
|
|
87
|
+
|
|
88
|
+
- **Search index:** ~50-100 tokens per result
|
|
89
|
+
- **Full observation:** ~500-1000 tokens each
|
|
90
|
+
- **Batch fetch:** 1 HTTP request vs N individual requests
|
|
91
|
+
- **10x token savings** by filtering before fetching
|
|
92
|
+
|
|
93
|
+
## Knowledge Agents
|
|
94
|
+
|
|
95
|
+
Want synthesized answers instead of raw records? Use `/knowledge-agent` to build a queryable corpus from your observation history. The knowledge agent reads all matching observations and answers questions conversationally.
|
|
96
|
+
```
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: modal
|
|
3
|
+
description: Cloud computing platform for running Python on GPUs and serverless infrastructure. Use when deploying AI/ML models, running GPU-accelerated workloads, serving web endpoints, scheduling batch jobs, or scaling Python code to the cloud. Use this skill whenever the user mentions Modal, serverless GPU compute, deploying ML models to the cloud, serving inference endpoints, running batch processing in the cloud, or needs to scale Python workloads beyond their local machine. Also use when the user wants to run code on H100s, A100s, or other cloud GPUs, or needs to create a web API for a model.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Modal
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Modal is a cloud platform for running Python code serverlessly, with a focus on AI/ML workloads. Key capabilities:
|
|
11
|
+
- **GPU compute** on demand (T4, L4, A10, L40S, A100, H100, H200, B200)
|
|
12
|
+
- **Serverless functions** with autoscaling from zero to thousands of containers
|
|
13
|
+
- **Custom container images** built entirely in Python code
|
|
14
|
+
- **Persistent storage** via Volumes for model weights and datasets
|
|
15
|
+
- **Web endpoints** for serving models and APIs
|
|
16
|
+
- **Scheduled jobs** via cron or fixed intervals
|
|
17
|
+
- **Sub-second cold starts** for low-latency inference
|
|
18
|
+
|
|
19
|
+
Everything in Modal is defined as code — no YAML, no Dockerfiles required (though both are supported).
|
|
20
|
+
|
|
21
|
+
## When to Use This Skill
|
|
22
|
+
|
|
23
|
+
Use this skill when:
|
|
24
|
+
- Deploy or serve AI/ML models in the cloud
|
|
25
|
+
- Run GPU-accelerated computations (training, inference, fine-tuning)
|
|
26
|
+
- Create serverless web APIs or endpoints
|
|
27
|
+
- Scale batch processing jobs in parallel
|
|
28
|
+
- Schedule recurring tasks (data pipelines, retraining, scraping)
|
|
29
|
+
- Need persistent cloud storage for model weights or datasets
|
|
30
|
+
- Want to run code in custom container environments
|
|
31
|
+
- Build job queues or async task processing systems
|
|
32
|
+
|
|
33
|
+
### Authenticate
|
|
34
|
+
|
|
35
|
+
Prefer existing credentials before creating new ones:
|
|
36
|
+
|
|
37
|
+
1. Check whether `MODAL_TOKEN_ID` and `MODAL_TOKEN_SECRET` are already present in the current environment.
|
|
38
|
+
2. If not, check for those values in a local `.env` file and load them if appropriate for the workflow.
|
|
39
|
+
3. Only fall back to interactive `modal setup` or generating fresh tokens if neither source already provides credentials.
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
modal setup
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
This opens a browser for authentication. For CI/CD or headless environments, use environment variables:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
|
|
49
|
+
## Core Concepts
|
|
50
|
+
|
|
51
|
+
### App and Functions
|
|
52
|
+
|
|
53
|
+
A Modal `App` groups related functions. Functions decorated with `@app.function()` run remotely in the cloud:
|
|
54
|
+
|
|
55
|
+
```python
|
|
56
|
+
import modal
|
|
57
|
+
|
|
58
|
+
app = modal.App("my-app")
|
|
59
|
+
|
|
60
|
+
@app.function()
|
|
61
|
+
def square(x):
|
|
62
|
+
return x ** 2
|
|
63
|
+
|
|
64
|
+
@app.local_entrypoint()
|
|
65
|
+
def main():
|
|
66
|
+
|
|
67
|
+
### Container Images
|
|
68
|
+
|
|
69
|
+
Modal builds container images from Python code. The recommended package installer is `uv`:
|
|
70
|
+
|
|
71
|
+
```python
|
|
72
|
+
image = (
|
|
73
|
+
modal.Image.debian_slim(python_version="3.11")
|
|
74
|
+
.uv_pip_install("torch==2.8.0", "transformers", "accelerate")
|
|
75
|
+
.apt_install("git")
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
@app.function(image=image)
|
|
79
|
+
def inference(prompt):
|
|
80
|
+
from transformers import pipeline
|
|
81
|
+
pipe = pipeline("text-generation", model="meta-llama/Llama-3-8B")
|
|
82
|
+
|
|
83
|
+
### GPU Compute
|
|
84
|
+
|
|
85
|
+
Request GPUs via the `gpu` parameter:
|
|
86
|
+
|
|
87
|
+
```python
|
|
88
|
+
@app.function(gpu="H100")
|
|
89
|
+
def train_model():
|
|
90
|
+
import torch
|
|
91
|
+
device = torch.device("cuda")
|
|
92
|
+
# GPU training code here
|
|
93
|
+
|
|
94
|
+
# Multiple GPUs
|
|
95
|
+
@app.function(gpu="H100:4")
|
|
96
|
+
def distributed_training():
|
|
97
|
+
...
|
|
98
|
+
|
|
99
|
+
# GPU fallback chain
|
|
100
|
+
@app.function(gpu=["H100", "A100-80GB", "A100-40GB"])
|
|
101
|
+
def flexible_inference():
|
|
102
|
+
...
|
|
103
|
+
|
|
104
|
+
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: model-routing-context
|
|
3
|
+
description: Model routing, parent context, thinking level, and prompt construction workflow. Use when changing model fallback, child Pi args, inherited context, task prompts, or compact-read behavior.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
# model-routing-context
|
|
8
|
+
|
|
9
|
+
Use this skill when working on model/context propagation.
|
|
10
|
+
|
|
11
|
+
## Source patterns distilled
|
|
12
|
+
|
|
13
|
+
- Pi session context/model state: `source/pi-mono/packages/coding-agent/src/core/session-manager.ts`, `agent-session.ts`, compaction modules
|
|
14
|
+
- pi-crew model and prompt code: `src/runtime/model-fallback.ts`, `src/runtime/pi-args.ts`, `src/runtime/task-runner/prompt-builder.ts`, `src/runtime/task-output-context.ts`, `src/extension/team-tool/context.ts`
|
|
15
|
+
|
|
16
|
+
## Rules
|
|
17
|
+
|
|
18
|
+
- Preserve parent model inheritance unless an agent/task/user explicitly provides a non-empty model override.
|
|
19
|
+
- Treat empty strings and whitespace model values as absent.
|
|
20
|
+
- Carry relevant parent conversation context as reference-only; do not let it override explicit task instructions or safety constraints.
|
|
21
|
+
- Respect compact-read/compaction summaries when building context; avoid ballooning prompts with redundant transcript data.
|
|
22
|
+
- Avoid inline dynamic imports for model providers or prompt helpers.
|
|
23
|
+
- When changing model precedence, add tests for undefined, empty, whitespace, agent, task, parent, and explicit tool override cases.
|
|
24
|
+
- Redact secrets in context snippets and child prompts where logs/artifacts may persist them.
|
|
25
|
+
|
|
26
|
+
## Anti-patterns
|
|
27
|
+
|
|
28
|
+
- Letting `agentModel: ""` block parent model fallback.
|
|
29
|
+
- Treating parent conversation text as executable instructions rather than context.
|
|
30
|
+
- Passing full session transcripts to every child by default.
|
|
31
|
+
- Losing thinking level or model changes across session switch/fork flows.
|
|
32
|
+
|
|
33
|
+
## Worked Examples
|
|
34
|
+
|
|
35
|
+
### Model precedence chain with all fields
|
|
36
|
+
|
|
37
|
+
When every level provides a model:
|
|
38
|
+
|
|
39
|
+
```typescript
|
|
40
|
+
// Requested by user/tool: "sonnet-4-2025-01-16"
|
|
41
|
+
// Step model (workflow): undefined
|
|
42
|
+
// Team role model: undefined
|
|
43
|
+
// Agent model: "haiku-4"
|
|
44
|
+
// Parent model: "sonnet-4-2025-01-16"
|
|
45
|
+
// Model registry: { default: "claude-sonnet-4" }
|
|
46
|
+
|
|
47
|
+
const result = buildConfiguredModelRouting({
|
|
48
|
+
overrideModel: "sonnet-4-2025-01-16", // tool override wins
|
|
49
|
+
stepModel: undefined,
|
|
50
|
+
teamRoleModel: undefined,
|
|
51
|
+
agentModel: "haiku-4",
|
|
52
|
+
fallbackModels: ["haiku-3"],
|
|
53
|
+
parentModel: "sonnet-4-2025-01-16",
|
|
54
|
+
modelRegistry: { default: "claude-sonnet-4" },
|
|
55
|
+
cwd,
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
// Result: candidates = ["sonnet-4-2025-01-16"]
|
|
59
|
+
// resolved = "sonnet-4-2025-01-16" (override wins)
|
|
60
|
+
// reason = "tool override"
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Override at each level
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
// Level 1: tool override (highest)
|
|
67
|
+
buildConfiguredModelRouting({ overrideModel: "sonnet-4-2025-01-16" });
|
|
68
|
+
// → candidates = ["sonnet-4-2025-01-16"]
|
|
69
|
+
|
|
70
|
+
// Level 2: step model
|
|
71
|
+
buildConfiguredModelRouting({ overrideModel: undefined, stepModel: "haiku-4" });
|
|
72
|
+
// → candidates = ["haiku-4"]
|
|
73
|
+
|
|
74
|
+
// Level 3: team role model
|
|
75
|
+
buildConfiguredModelRouting({ overrideModel: undefined, stepModel: undefined, teamRoleModel: "sonnet-3.5" });
|
|
76
|
+
// → candidates = ["sonnet-3.5"]
|
|
77
|
+
|
|
78
|
+
// Level 4: agent model with fallback
|
|
79
|
+
buildConfiguredModelRouting({ overrideModel: undefined, stepModel: undefined, teamRoleModel: undefined, agentModel: "haiku-3", fallbackModels: ["claude-3-5-haiku-20241022"] });
|
|
80
|
+
// → candidates = ["haiku-3", "claude-3-5-haiku-20241022"]
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Empty/whitespace/null handling
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: molecular-dynamics
|
|
3
|
+
description: Run and analyze molecular dynamics simulations with OpenMM and MDAnalysis. Set up protein/small molecule systems, define force fields, run energy minimization and production MD, analyze trajectories (RMSD, RMSF, contact maps, free energy surfaces). For structural biology, drug binding, and biophysics.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Molecular Dynamics
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Molecular dynamics (MD) simulation computationally models the time evolution of molecular systems by integrating Newton's equations of motion. This skill covers two complementary tools:
|
|
11
|
+
|
|
12
|
+
- **OpenMM** (https://openmm.org/): High-performance MD simulation engine with GPU support, Python API, and flexible force field support
|
|
13
|
+
- **MDAnalysis** (https://mdanalysis.org/): Python library for reading, writing, and analyzing MD trajectories from all major simulation packages
|
|
14
|
+
|
|
15
|
+
**Installation:**
|
|
16
|
+
```bash
|
|
17
|
+
conda install -c conda-forge openmm mdanalysis nglview
|
|
18
|
+
# or
|
|
19
|
+
pip install openmm mdanalysis
|
|
20
|
+
|
|
21
|
+
## When to Use This Skill
|
|
22
|
+
|
|
23
|
+
Use molecular dynamics when:
|
|
24
|
+
|
|
25
|
+
- **Protein stability analysis**: How does a mutation affect protein dynamics?
|
|
26
|
+
- **Drug binding simulations**: Characterize binding mode and residence time of a ligand
|
|
27
|
+
- **Conformational sampling**: Explore protein flexibility and conformational changes
|
|
28
|
+
- **Protein-protein interaction**: Model interface dynamics and binding energetics
|
|
29
|
+
- **RMSD/RMSF analysis**: Quantify structural fluctuations from a reference structure
|
|
30
|
+
- **Free energy estimation**: Compute binding free energy or conformational free energy
|
|
31
|
+
- **Membrane simulations**: Model proteins in lipid bilayers
|
|
32
|
+
- **Intrinsically disordered proteins**: Study IDR conformational ensembles
|
|
33
|
+
|
|
34
|
+
## Core Workflow: OpenMM Simulation
|
|
35
|
+
|
|
36
|
+
### 1. System Preparation
|
|
37
|
+
|
|
38
|
+
```python
|
|
39
|
+
from openmm.app import *
|
|
40
|
+
from openmm import *
|
|
41
|
+
from openmm.unit import *
|
|
42
|
+
import sys
|
|
43
|
+
|
|
44
|
+
def prepare_system_from_pdb(pdb_file, forcefield_name="amber14-all.xml",
|
|
45
|
+
water_model="amber14/tip3pfb.xml"):
|
|
46
|
+
"""
|
|
47
|
+
Prepare an OpenMM system from a PDB file.
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
pdb_file: Path to cleaned PDB file (use PDBFixer for raw PDB files)
|
|
51
|
+
|
|
52
|
+
### 2. Energy Minimization
|
|
53
|
+
|
|
54
|
+
```python
|
|
55
|
+
from openmm.app import *
|
|
56
|
+
from openmm import *
|
|
57
|
+
from openmm.unit import *
|
|
58
|
+
|
|
59
|
+
def minimize_energy(modeller, system, output_pdb="minimized.pdb",
|
|
60
|
+
max_iterations=1000, tolerance=10.0):
|
|
61
|
+
"""
|
|
62
|
+
Energy minimize the system to remove steric clashes.
|
|
63
|
+
|
|
64
|
+
Args:
|
|
65
|
+
modeller: Modeller object with topology and positions
|
|
66
|
+
system: OpenMM System
|
|
67
|
+
|
|
68
|
+
### 3. NVT Equilibration
|
|
69
|
+
|
|
70
|
+
```python
|
|
71
|
+
from openmm.app import *
|
|
72
|
+
from openmm import *
|
|
73
|
+
from openmm.unit import *
|
|
74
|
+
|
|
75
|
+
def run_nvt_equilibration(simulation, n_steps=50000, temperature=300,
|
|
76
|
+
report_interval=1000, output_prefix="nvt"):
|
|
77
|
+
"""
|
|
78
|
+
NVT equilibration: constant N, V, T.
|
|
79
|
+
Equilibrate velocities to target temperature.
|
|
80
|
+
|
|
81
|
+
Args:
|
|
82
|
+
simulation: OpenMM Simulation (after minimization)
|
|
83
|
+
|
|
84
|
+
### 4. NPT Equilibration and Production
|
|
85
|
+
|
|
86
|
+
```python
|
|
87
|
+
def run_npt_production(simulation, n_steps=500000, temperature=300, pressure=1.0,
|
|
88
|
+
report_interval=5000, output_prefix="npt"):
|
|
89
|
+
"""
|
|
90
|
+
NPT production run: constant N, P, T.
|
|
91
|
+
|
|
92
|
+
Args:
|
|
93
|
+
n_steps: Production steps (500000 × 2fs = 1 ns)
|
|
94
|
+
temperature: Temperature in Kelvin
|
|
95
|
+
pressure: Pressure in bar
|
|
96
|
+
report_interval: Steps between reports
|
|
97
|
+
"""
|
|
98
|
+
# Add Monte Carlo barostat for pressure control
|
|
99
|
+
|
|
100
|
+
## Trajectory Analysis with MDAnalysis
|
|
101
|
+
|
|
102
|
+
### 1. Load Trajectory
|
|
103
|
+
|
|
104
|
+
```python
|
|
105
|
+
import MDAnalysis as mda
|
|
106
|
+
from MDAnalysis.analysis import rms, align, contacts
|
|
107
|
+
import numpy as np
|
|
108
|
+
import matplotlib.pyplot as plt
|
|
109
|
+
|
|
110
|
+
def load_trajectory(topology_file, trajectory_file):
|
|
111
|
+
"""
|
|
112
|
+
Load an MD trajectory with MDAnalysis.
|
|
113
|
+
|
|
114
|
+
Args:
|
|
115
|
+
|
|
116
|
+
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: molfeat
|
|
3
|
+
description: Molecular featurization for ML (100+ featurizers). ECFP, MACCS, descriptors, pretrained models (ChemBERTa), convert SMILES to features, for QSAR and molecular ML.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Molfeat - Molecular Featurization Hub
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Molfeat is a comprehensive Python library for molecular featurization that unifies 100+ pre-trained embeddings and hand-crafted featurizers. Convert chemical structures (SMILES strings or RDKit molecules) into numerical representations for machine learning tasks including QSAR modeling, virtual screening, similarity searching, and deep learning applications. Features fast parallel processing, scikit-learn compatible transformers, and built-in caching.
|
|
11
|
+
|
|
12
|
+
## When to Use This Skill
|
|
13
|
+
|
|
14
|
+
This skill should be used when working with:
|
|
15
|
+
- **Molecular machine learning**: Building QSAR/QSPR models, property prediction
|
|
16
|
+
- **Virtual screening**: Ranking compound libraries for biological activity
|
|
17
|
+
- **Similarity searching**: Finding structurally similar molecules
|
|
18
|
+
- **Chemical space analysis**: Clustering, visualization, dimensionality reduction
|
|
19
|
+
- **Deep learning**: Training neural networks on molecular data
|
|
20
|
+
- **Featurization pipelines**: Converting SMILES to ML-ready representations
|
|
21
|
+
- **Cheminformatics**: Any task requiring molecular feature extraction
|
|
22
|
+
|
|
23
|
+
# With all optional dependencies
|
|
24
|
+
uv pip install "molfeat[all]"
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**Optional dependencies for specific featurizers:**
|
|
28
|
+
- `molfeat[dgl]` - GNN models (GIN variants)
|
|
29
|
+
- `molfeat[graphormer]` - Graphormer models
|
|
30
|
+
- `molfeat[transformer]` - ChemBERTa, ChemGPT, MolT5
|
|
31
|
+
- `molfeat[fcd]` - FCD descriptors
|
|
32
|
+
- `molfeat[map4]` - MAP4 fingerprints
|
|
33
|
+
|
|
34
|
+
## Core Concepts
|
|
35
|
+
|
|
36
|
+
Molfeat organizes featurization into three hierarchical classes:
|
|
37
|
+
|
|
38
|
+
### 1. Calculators (`molfeat.calc`)
|
|
39
|
+
|
|
40
|
+
Callable objects that convert individual molecules into feature vectors. Accept RDKit `Chem.Mol` objects or SMILES strings.
|
|
41
|
+
|
|
42
|
+
**Use calculators for:**
|
|
43
|
+
- Single molecule featurization
|
|
44
|
+
- Custom processing loops
|
|
45
|
+
- Direct feature computation
|
|
46
|
+
|
|
47
|
+
**Example:**
|
|
48
|
+
```python
|
|
49
|
+
from molfeat.calc import FPCalculator
|
|
50
|
+
|
|
51
|
+
calc = FPCalculator("ecfp", radius=3, fpSize=2048)
|
|
52
|
+
features = calc("CCO") # Returns numpy array (2048,)
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 2. Transformers (`molfeat.trans`)
|
|
56
|
+
|
|
57
|
+
Scikit-learn compatible transformers that wrap calculators for batch processing with parallelization.
|
|
58
|
+
|
|
59
|
+
**Use transformers for:**
|
|
60
|
+
- Batch featurization of molecular datasets
|
|
61
|
+
- Integration with scikit-learn pipelines
|
|
62
|
+
- Parallel processing (automatic CPU utilization)
|
|
63
|
+
|
|
64
|
+
**Example:**
|
|
65
|
+
```python
|
|
66
|
+
from molfeat.trans import MoleculeTransformer
|
|
67
|
+
from molfeat.calc import FPCalculator
|
|
68
|
+
|
|
69
|
+
transformer = MoleculeTransformer(FPCalculator("ecfp"), n_jobs=-1)
|
|
70
|
+
features = transformer(smiles_list) # Parallel processing
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### 3. Pretrained Transformers (`molfeat.trans.pretrained`)
|
|
74
|
+
|
|
75
|
+
Specialized transformers for deep learning models with batched inference and caching.
|
|
76
|
+
|
|
77
|
+
**Use pretrained transformers for:**
|
|
78
|
+
- State-of-the-art molecular embeddings
|
|
79
|
+
- Transfer learning from large chemical datasets
|
|
80
|
+
- Deep learning feature extraction
|
|
81
|
+
|
|
82
|
+
**Example:**
|
|
83
|
+
```python
|
|
84
|
+
from molfeat.trans.pretrained import PretrainedMolTransformer
|
|
85
|
+
|
|
86
|
+
transformer = PretrainedMolTransformer("ChemBERTa-77M-MLM", n_jobs=-1)
|
|
87
|
+
embeddings = transformer(smiles_list) # Deep learning embeddings
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Quick Start Workflow
|
|
91
|
+
|
|
92
|
+
### Basic Featurization
|
|
93
|
+
|
|
94
|
+
```python
|
|
95
|
+
import datamol as dm
|
|
96
|
+
from molfeat.calc import FPCalculator
|
|
97
|
+
from molfeat.trans import MoleculeTransformer
|
|
98
|
+
|
|
99
|
+
# Load molecular data
|
|
100
|
+
smiles = ["CCO", "CC(=O)O", "c1ccccc1", "CC(C)O"]
|
|
101
|
+
|
|
102
|
+
# Create calculator and transformer
|
|
103
|
+
calc = FPCalculator("ecfp", radius=3)
|
|
104
|
+
transformer = MoleculeTransformer(calc, n_jobs=-1)
|
|
105
|
+
|
|
106
|
+
# Featurize molecules
|
|
107
|
+
features = transformer(smiles)
|
|
108
|
+
print(f"Shape: {features.shape}") # (4, 2048)
|
|
109
|
+
|
|
110
|
+
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: multi-perspective-review
|
|
3
|
+
description: Use when reviewing a plan, diff, implementation, worker output, release candidate, or external review feedback.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
# multi-perspective-review
|
|
8
|
+
|
|
9
|
+
Core principle: review early, review often, and separate concerns. Reviewer output is evidence to evaluate, not an instruction to obey blindly.
|
|
10
|
+
|
|
11
|
+
Distilled from detailed reads of requesting-code-review, receiving-code-review, subagent review checkpoints, differential review, and specialized review-agent patterns.
|
|
12
|
+
|
|
13
|
+
## Review Passes
|
|
14
|
+
|
|
15
|
+
Run relevant passes separately:
|
|
16
|
+
|
|
17
|
+
1. Spec compliance: Does the work match the request and nothing extra?
|
|
18
|
+
2. Correctness: Are edge cases, state transitions, and failure paths right?
|
|
19
|
+
3. Regression risk: Could config precedence, runtime defaults, or public APIs break?
|
|
20
|
+
4. Security: Trust boundaries, path containment, prompt injection, secrets, permissions.
|
|
21
|
+
5. Tests: Do tests assert the changed behavior and isolation concerns?
|
|
22
|
+
6. Maintainability: Narrow diff, typed inputs, clear ownership, reversible changes.
|
|
23
|
+
7. Operator experience: Error/status text, recovery hints, artifacts, logs.
|
|
24
|
+
8. Compatibility: Windows paths, Node/Pi versions, CLI flags, legacy paths.
|
|
25
|
+
|
|
26
|
+
## Finding Format
|
|
27
|
+
|
|
28
|
+
```text
|
|
29
|
+
[severity] path:line or symbol
|
|
30
|
+
Issue: ...
|
|
31
|
+
Impact: ...
|
|
32
|
+
Fix: ...
|
|
33
|
+
Verification: ...
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Severity:
|
|
37
|
+
|
|
38
|
+
- critical: data loss, secret leak, arbitrary command/path escape, unusable default install;
|
|
39
|
+
- high: broken core workflow, ownership bypass, persistent incorrect state;
|
|
40
|
+
- medium: important regression, flaky test, confusing recoverable behavior;
|
|
41
|
+
- low: polish, maintainability, docs.
|
|
42
|
+
|
|
43
|
+
## Example Findings by Perspective
|
|
44
|
+
|
|
45
|
+
### Spec Compliance
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
[medium] src/runtime/task-runner.ts:89
|
|
49
|
+
Issue: `executeWorkers` is checked once at top of runTeamTask but the value
|
|
50
|
+
is passed through an untyped parameter. The function comment says "workers
|
|
51
|
+
are disabled in scaffold mode" but the actual behavior is driven by `runtimeKind`.
|
|
52
|
+
Impact: If someone changes the comment but not the code, the mismatch is invisible.
|
|
53
|
+
Fix: Add a runtimeKind guard and deprecate the executeWorkers parameter.
|
|
54
|
+
Verification: `npx tsc --noEmit` passes; test with `PI_TEAMS_MOCK_CHILD_PI=scaffold`.
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Correctness
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
[high] src/runtime/live-agent-manager.ts:47
|
|
61
|
+
Issue: `registerLiveAgent` returns the new handle but callers may use the
|
|
62
|
+
old handle reference if they captured it before the call.
|
|
63
|
+
Impact: Status updates may apply to the wrong handle if the agent re-registers.
|
|
64
|
+
Fix: Always call `getLiveAgent` after `registerLiveAgent` to get the canonical handle.
|
|
65
|
+
Verification: Add test that verifies status after re-registration.
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Regression Risk
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
[medium] src/state/state-store.ts:150
|
|
72
|
+
Issue: `saveRunTasks` uses `atomicWriteJson` but the file may grow large.
|
|
73
|
+
No pagination or archiving strategy for long-running runs.
|
|
74
|
+
Impact: Tasks file could exceed 10MB with many updates, causing slow I/O.
|
|
75
|
+
Fix: Consider splitting into per-task files or adding a size warning.
|
|
76
|
+
Verification: Load test with 10,000 task updates.
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Security
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
[critical] src/utils/safe-paths.ts:20
|
|
83
|
+
Issue: `resolveRealContainedPath` follows symlinks but doesn't verify the
|
|
84
|
+
resolved path stays under the allowed base.
|
|
85
|
+
Impact: A malicious symlink could escape the workspace boundary.
|