create-hq 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/deps.d.ts +4 -0
- package/dist/deps.d.ts.map +1 -0
- package/dist/deps.js +65 -0
- package/dist/deps.js.map +1 -0
- package/dist/git.d.ts +3 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +19 -0
- package/dist/git.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/scaffold.d.ts +8 -0
- package/dist/scaffold.d.ts.map +1 -0
- package/dist/scaffold.js +130 -0
- package/dist/scaffold.js.map +1 -0
- package/dist/ui.d.ts +7 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +36 -0
- package/dist/ui.js.map +1 -0
- package/package.json +41 -0
- package/template/.claude/CLAUDE.md +202 -0
- package/template/.claude/commands/checkpoint.md +127 -0
- package/template/.claude/commands/cleanup.md +307 -0
- package/template/.claude/commands/execute-task.md +440 -0
- package/template/.claude/commands/exit-plan.md +41 -0
- package/template/.claude/commands/handoff.md +97 -0
- package/template/.claude/commands/learn.md +218 -0
- package/template/.claude/commands/metrics.md +118 -0
- package/template/.claude/commands/newworker.md +162 -0
- package/template/.claude/commands/nexttask.md +67 -0
- package/template/.claude/commands/prd.md +238 -0
- package/template/.claude/commands/reanchor.md +51 -0
- package/template/.claude/commands/remember.md +126 -0
- package/template/.claude/commands/run-project.md +348 -0
- package/template/.claude/commands/run.md +110 -0
- package/template/.claude/commands/search-reindex.md +62 -0
- package/template/.claude/commands/search.md +100 -0
- package/template/.claude/commands/setup.md +381 -0
- package/template/.claude/scripts/pure-ralph-loop.ps1 +312 -0
- package/template/.claude/scripts/pure-ralph-loop.sh +859 -0
- package/template/CHANGELOG.md +220 -0
- package/template/LICENSE +21 -0
- package/template/MIGRATION.md +259 -0
- package/template/README.md +368 -0
- package/template/data/journal/.gitkeep +0 -0
- package/template/docs/images/ascii-banner-options.md +122 -0
- package/template/docs/images/hq-banner.svg +105 -0
- package/template/knowledge/Ralph/01-overview.md +71 -0
- package/template/knowledge/Ralph/02-core-concepts.md +114 -0
- package/template/knowledge/Ralph/03-how-ralph-works.md +184 -0
- package/template/knowledge/Ralph/04-back-pressure.md +222 -0
- package/template/knowledge/Ralph/05-specifications.md +210 -0
- package/template/knowledge/Ralph/06-agents-md.md +222 -0
- package/template/knowledge/Ralph/07-implementation.md +316 -0
- package/template/knowledge/Ralph/08-economics.md +182 -0
- package/template/knowledge/Ralph/09-resources.md +145 -0
- package/template/knowledge/Ralph/10-claude-code-workflow.md +212 -0
- package/template/knowledge/Ralph/11-team-training-guide.md +383 -0
- package/template/knowledge/Ralph/README.md +40 -0
- package/template/knowledge/ai-security-framework/CONTRIBUTING.md +139 -0
- package/template/knowledge/ai-security-framework/GLOSSARY.md +176 -0
- package/template/knowledge/ai-security-framework/LICENSE +21 -0
- package/template/knowledge/ai-security-framework/QUICK-START.md +172 -0
- package/template/knowledge/ai-security-framework/README.md +232 -0
- package/template/knowledge/ai-security-framework/checklists/browser-security.md +301 -0
- package/template/knowledge/ai-security-framework/checklists/credential-isolation.md +322 -0
- package/template/knowledge/ai-security-framework/checklists/incident-response.md +288 -0
- package/template/knowledge/ai-security-framework/checklists/pre-flight.md +249 -0
- package/template/knowledge/ai-security-framework/checklists/weekly-audit.md +159 -0
- package/template/knowledge/ai-security-framework/configs/audit-logging.md +372 -0
- package/template/knowledge/ai-security-framework/configs/kill-switches.md +354 -0
- package/template/knowledge/ai-security-framework/docs/01-core-principles.md +256 -0
- package/template/knowledge/ai-security-framework/docs/02-threat-landscape.md +326 -0
- package/template/knowledge/ai-security-framework/docs/03-security-posture.md +250 -0
- package/template/knowledge/ai-security-framework/templates/agents-security.md +233 -0
- package/template/knowledge/design-styles/README.md +42 -0
- package/template/knowledge/design-styles/american-industrial.md +136 -0
- package/template/knowledge/design-styles/ethereal-abstract.md +133 -0
- package/template/knowledge/design-styles/liminal-portal.md +111 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G-3m4YPW0AADdu2.jpeg +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G-JJlt5WwAABK3K.png +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G-JJmj5W0AEbJ-7.png +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G59fgNuXkAAKLJQ (1).jpeg +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G59fgNuXkAAKLJQ.jpeg +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G7fVkn3WEAAM-ST.jpeg +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G8ECO5JWEAIksyn.png +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G9-3GQSWoAA8eqZ.png +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G9xEOqrXkAEZRcs.png +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G_MVeJrXQAA8sx4.jpeg +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/G_RSkmGXkAAgAVZ.png +0 -0
- package/template/knowledge/design-styles/swipes/american-industrial/README.md +31 -0
- package/template/knowledge/design-styles/swipes/american-industrial/qyqtg7Dq.png +0 -0
- package/template/knowledge/dev-team/README.md +35 -0
- package/template/knowledge/dev-team/patterns/README.md +34 -0
- package/template/knowledge/dev-team/patterns/frontend/react-best-practices.md +178 -0
- package/template/knowledge/dev-team/troubleshooting/README.md +31 -0
- package/template/knowledge/dev-team/workflows/README.md +49 -0
- package/template/knowledge/hq/checkpoint-schema.json +51 -0
- package/template/knowledge/hq/index-md-spec.md +74 -0
- package/template/knowledge/hq/thread-schema.md +153 -0
- package/template/knowledge/hq-core/checkpoint-schema.json +51 -0
- package/template/knowledge/hq-core/index-md-spec.md +74 -0
- package/template/knowledge/hq-core/thread-schema.md +153 -0
- package/template/knowledge/loom/README.md +51 -0
- package/template/knowledge/loom/architecture.md +125 -0
- package/template/knowledge/loom/code-style.md +169 -0
- package/template/knowledge/loom/llm-proxy.md +132 -0
- package/template/knowledge/loom/state-machine.md +131 -0
- package/template/knowledge/loom/thread-system.md +117 -0
- package/template/knowledge/loom/tools.md +94 -0
- package/template/knowledge/loom/weaver.md +96 -0
- package/template/knowledge/loom/web-frontend.md +131 -0
- package/template/knowledge/projects/README.md +72 -0
- package/template/knowledge/projects/templates/README.template.md +28 -0
- package/template/knowledge/workers/README.md +195 -0
- package/template/knowledge/workers/ralph-loop-pattern.md +157 -0
- package/template/knowledge/workers/skill-schema.md +182 -0
- package/template/knowledge/workers/state-machine.md +102 -0
- package/template/knowledge/workers/templates/base-worker.yaml +73 -0
- package/template/knowledge/workers/templates/code-worker.yaml +85 -0
- package/template/knowledge/workers/templates/skill.yaml +49 -0
- package/template/knowledge/workers/templates/social-worker.yaml +70 -0
- package/template/modules/examples/full-manifest.yaml +92 -0
- package/template/modules/examples/minimal.yaml +14 -0
- package/template/modules/modules.yaml +59 -0
- package/template/projects/.gitkeep +0 -0
- package/template/projects/incorporate-workers-into-pure-ralph/prd.json +88 -0
- package/template/projects/pure-ralph-branch-isolation/README.md +114 -0
- package/template/projects/pure-ralph-branch-isolation/prd.json +123 -0
- package/template/projects/purist-ralph-loop/README.md +148 -0
- package/template/projects/purist-ralph-loop/prd.json +135 -0
- package/template/projects/ralph-test/prd.json +50 -0
- package/template/prompts/pure-ralph-base.md +551 -0
- package/template/settings/.gitkeep +0 -0
- package/template/settings/pure-ralph.json +42 -0
- package/template/social-content/drafts/INDEX.md +21 -0
- package/template/social-content/drafts/linkedin/.gitkeep +1 -0
- package/template/social-content/drafts/x/.gitkeep +1 -0
- package/template/social-content/images/.gitkeep +1 -0
- package/template/starter-projects/code-worker/README.md +97 -0
- package/template/starter-projects/code-worker/prd.json +45 -0
- package/template/starter-projects/personal-assistant/README.md +42 -0
- package/template/starter-projects/personal-assistant/prd.json +43 -0
- package/template/starter-projects/social-media/README.md +60 -0
- package/template/starter-projects/social-media/prd.json +43 -0
- package/template/workers/content-brand/README.md +59 -0
- package/template/workers/content-brand/skills/messaging-alignment.md +91 -0
- package/template/workers/content-brand/skills/tone-check.md +76 -0
- package/template/workers/content-brand/skills/voice-analysis.md +68 -0
- package/template/workers/content-brand/worker.yaml +81 -0
- package/template/workers/content-legal/README.md +80 -0
- package/template/workers/content-legal/skills/claim-substantiation.md +150 -0
- package/template/workers/content-legal/skills/compliance-scan.md +123 -0
- package/template/workers/content-legal/skills/disclaimer-check.md +146 -0
- package/template/workers/content-legal/worker.yaml +118 -0
- package/template/workers/content-product/README.md +77 -0
- package/template/workers/content-product/skills/claim-verification.md +96 -0
- package/template/workers/content-product/skills/feature-accuracy.md +117 -0
- package/template/workers/content-product/skills/stats-check.md +128 -0
- package/template/workers/content-product/worker.yaml +97 -0
- package/template/workers/content-sales/README.md +70 -0
- package/template/workers/content-sales/skills/conversion-analysis.md +96 -0
- package/template/workers/content-sales/skills/cta-audit.md +107 -0
- package/template/workers/content-sales/skills/value-prop-check.md +114 -0
- package/template/workers/content-sales/worker.yaml +93 -0
- package/template/workers/content-shared/cli.ts +242 -0
- package/template/workers/content-shared/index.ts +234 -0
- package/template/workers/content-shared/lib/accuracy-analyzer.ts +661 -0
- package/template/workers/content-shared/lib/analyze.ts +370 -0
- package/template/workers/content-shared/lib/brand-analyzer.ts +526 -0
- package/template/workers/content-shared/lib/cms-integration.ts +446 -0
- package/template/workers/content-shared/lib/compliance-analyzer.ts +655 -0
- package/template/workers/content-shared/lib/conversion-analyzer.ts +555 -0
- package/template/workers/content-shared/lib/github-integration.ts +582 -0
- package/template/workers/content-shared/lib/output.ts +373 -0
- package/template/workers/content-shared/lib/parser.ts +771 -0
- package/template/workers/content-shared/lib/priority.ts +439 -0
- package/template/workers/content-shared/lib/recommendations.ts +512 -0
- package/template/workers/content-shared/lib/reporter.ts +749 -0
- package/template/workers/content-shared/lib/restructure.ts +664 -0
- package/template/workers/content-shared/lib/scorer.ts +140 -0
- package/template/workers/content-shared/lib/types.ts +227 -0
- package/template/workers/content-shared/lib/variants.ts +595 -0
- package/template/workers/content-shared/package.json +51 -0
- package/template/workers/content-shared/pnpm-lock.yaml +39 -0
- package/template/workers/content-shared/test/sample-page.json +115 -0
- package/template/workers/content-shared/tsconfig.json +20 -0
- package/template/workers/dev-team/README.md +166 -0
- package/template/workers/dev-team/_template.yaml +70 -0
- package/template/workers/dev-team/architect/package.json +27 -0
- package/template/workers/dev-team/architect/skills/api-design.md +89 -0
- package/template/workers/dev-team/architect/skills/refactor-plan.md +96 -0
- package/template/workers/dev-team/architect/skills/system-design.md +100 -0
- package/template/workers/dev-team/architect/src/index.ts +49 -0
- package/template/workers/dev-team/architect/src/mcp-server.ts +122 -0
- package/template/workers/dev-team/architect/src/skills/api-design.ts +316 -0
- package/template/workers/dev-team/architect/src/skills/refactor-plan.ts +264 -0
- package/template/workers/dev-team/architect/src/skills/system-design.ts +212 -0
- package/template/workers/dev-team/architect/tsconfig.json +19 -0
- package/template/workers/dev-team/architect/worker.yaml +128 -0
- package/template/workers/dev-team/backend-dev/package-lock.json +1252 -0
- package/template/workers/dev-team/backend-dev/package.json +27 -0
- package/template/workers/dev-team/backend-dev/skills/implement-endpoint.md +70 -0
- package/template/workers/dev-team/backend-dev/skills/implement-service.md +62 -0
- package/template/workers/dev-team/backend-dev/src/index.ts +51 -0
- package/template/workers/dev-team/backend-dev/src/mcp-server.ts +109 -0
- package/template/workers/dev-team/backend-dev/src/skills/implement-endpoint.ts +122 -0
- package/template/workers/dev-team/backend-dev/src/skills/implement-service.ts +126 -0
- package/template/workers/dev-team/backend-dev/tsconfig.json +19 -0
- package/template/workers/dev-team/backend-dev/worker.yaml +128 -0
- package/template/workers/dev-team/code-reviewer/package-lock.json +1080 -0
- package/template/workers/dev-team/code-reviewer/package.json +24 -0
- package/template/workers/dev-team/code-reviewer/skills/merge-to-production.md +61 -0
- package/template/workers/dev-team/code-reviewer/skills/merge-to-staging.md +54 -0
- package/template/workers/dev-team/code-reviewer/skills/request-changes.md +63 -0
- package/template/workers/dev-team/code-reviewer/skills/review-pr.md +77 -0
- package/template/workers/dev-team/code-reviewer/src/index.ts +56 -0
- package/template/workers/dev-team/code-reviewer/src/mcp-server.ts +101 -0
- package/template/workers/dev-team/code-reviewer/tsconfig.json +19 -0
- package/template/workers/dev-team/code-reviewer/worker.yaml +90 -0
- package/template/workers/dev-team/database-dev/package.json +22 -0
- package/template/workers/dev-team/database-dev/skills/create-schema.md +48 -0
- package/template/workers/dev-team/database-dev/src/index.ts +50 -0
- package/template/workers/dev-team/database-dev/src/mcp-server.ts +76 -0
- package/template/workers/dev-team/database-dev/tsconfig.json +18 -0
- package/template/workers/dev-team/database-dev/worker.yaml +90 -0
- package/template/workers/dev-team/frontend-dev/package.json +22 -0
- package/template/workers/dev-team/frontend-dev/skills/create-component.md +26 -0
- package/template/workers/dev-team/frontend-dev/src/index.ts +50 -0
- package/template/workers/dev-team/frontend-dev/src/mcp-server.ts +77 -0
- package/template/workers/dev-team/frontend-dev/tsconfig.json +18 -0
- package/template/workers/dev-team/frontend-dev/worker.yaml +132 -0
- package/template/workers/dev-team/infra-dev/package.json +24 -0
- package/template/workers/dev-team/infra-dev/skills/add-monitoring.md +73 -0
- package/template/workers/dev-team/infra-dev/skills/configure-deployment.md +80 -0
- package/template/workers/dev-team/infra-dev/skills/create-dockerfile.md +62 -0
- package/template/workers/dev-team/infra-dev/skills/setup-cicd.md +63 -0
- package/template/workers/dev-team/infra-dev/src/index.ts +55 -0
- package/template/workers/dev-team/infra-dev/src/mcp-server.ts +82 -0
- package/template/workers/dev-team/infra-dev/tsconfig.json +19 -0
- package/template/workers/dev-team/infra-dev/worker.yaml +92 -0
- package/template/workers/dev-team/knowledge-curator/package.json +24 -0
- package/template/workers/dev-team/knowledge-curator/skills/curate-troubleshooting.md +63 -0
- package/template/workers/dev-team/knowledge-curator/skills/process-learnings.md +61 -0
- package/template/workers/dev-team/knowledge-curator/skills/sync-documentation.md +76 -0
- package/template/workers/dev-team/knowledge-curator/skills/update-patterns.md +63 -0
- package/template/workers/dev-team/knowledge-curator/src/index.ts +53 -0
- package/template/workers/dev-team/knowledge-curator/src/mcp-server.ts +92 -0
- package/template/workers/dev-team/knowledge-curator/tsconfig.json +19 -0
- package/template/workers/dev-team/knowledge-curator/worker.yaml +80 -0
- package/template/workers/dev-team/motion-designer/package.json +22 -0
- package/template/workers/dev-team/motion-designer/skills/add-animation.md +25 -0
- package/template/workers/dev-team/motion-designer/skills/generate-image.md +36 -0
- package/template/workers/dev-team/motion-designer/src/index.ts +63 -0
- package/template/workers/dev-team/motion-designer/src/mcp-server.ts +79 -0
- package/template/workers/dev-team/motion-designer/tsconfig.json +18 -0
- package/template/workers/dev-team/motion-designer/worker.yaml +84 -0
- package/template/workers/dev-team/product-planner/queue.json +4 -0
- package/template/workers/dev-team/product-planner/worker.yaml +220 -0
- package/template/workers/dev-team/project-manager/package-lock.json +1252 -0
- package/template/workers/dev-team/project-manager/package.json +27 -0
- package/template/workers/dev-team/project-manager/skills/create-prd.md +66 -0
- package/template/workers/dev-team/project-manager/skills/next-issue.md +51 -0
- package/template/workers/dev-team/project-manager/skills/project-status.md +59 -0
- package/template/workers/dev-team/project-manager/skills/update-learnings.md +65 -0
- package/template/workers/dev-team/project-manager/src/index.ts +54 -0
- package/template/workers/dev-team/project-manager/src/mcp-server.ts +207 -0
- package/template/workers/dev-team/project-manager/src/skills/create-prd.ts +86 -0
- package/template/workers/dev-team/project-manager/src/skills/next-issue.ts +137 -0
- package/template/workers/dev-team/project-manager/src/skills/project-status.ts +131 -0
- package/template/workers/dev-team/project-manager/src/skills/update-learnings.ts +94 -0
- package/template/workers/dev-team/project-manager/tsconfig.json +19 -0
- package/template/workers/dev-team/project-manager/worker.yaml +96 -0
- package/template/workers/dev-team/qa-tester/package.json +24 -0
- package/template/workers/dev-team/qa-tester/skills/create-demo-account.md +36 -0
- package/template/workers/dev-team/qa-tester/skills/run-tests.md +36 -0
- package/template/workers/dev-team/qa-tester/skills/write-test.md +27 -0
- package/template/workers/dev-team/qa-tester/src/index.ts +61 -0
- package/template/workers/dev-team/qa-tester/src/mcp-server.ts +88 -0
- package/template/workers/dev-team/qa-tester/tsconfig.json +18 -0
- package/template/workers/dev-team/qa-tester/worker.yaml +116 -0
- package/template/workers/dev-team/task-executor/package-lock.json +1252 -0
- package/template/workers/dev-team/task-executor/package.json +27 -0
- package/template/workers/dev-team/task-executor/skills/analyze-issue.md +101 -0
- package/template/workers/dev-team/task-executor/skills/execute.md +133 -0
- package/template/workers/dev-team/task-executor/skills/report-learnings.md +106 -0
- package/template/workers/dev-team/task-executor/skills/validate-completion.md +121 -0
- package/template/workers/dev-team/task-executor/src/index.ts +54 -0
- package/template/workers/dev-team/task-executor/src/mcp-server.ts +139 -0
- package/template/workers/dev-team/task-executor/src/skills/analyze-issue.ts +219 -0
- package/template/workers/dev-team/task-executor/src/skills/execute.ts +132 -0
- package/template/workers/dev-team/task-executor/src/skills/report-learnings.ts +119 -0
- package/template/workers/dev-team/task-executor/src/skills/validate-completion.ts +142 -0
- package/template/workers/dev-team/task-executor/tsconfig.json +19 -0
- package/template/workers/dev-team/task-executor/worker.yaml +110 -0
- package/template/workers/registry.yaml +171 -0
- package/template/workers/security-scanner/README.md +73 -0
- package/template/workers/security-scanner/skills/pre-deploy-check.md +205 -0
- package/template/workers/security-scanner/worker.yaml +26 -0
- package/template/workspace/checkpoints/.gitkeep +0 -0
- package/template/workspace/content-ideas/inbox.jsonl +0 -0
- package/template/workspace/drafts/.gitkeep +0 -0
- package/template/workspace/learnings/.gitkeep +3 -0
- package/template/workspace/orchestrator/.gitkeep +0 -0
- package/template/workspace/ralph-test/COMPLETE.md +18 -0
- package/template/workspace/ralph-test/hello.txt +2 -0
- package/template/workspace/reports/.gitkeep +0 -0
- package/template/workspace/scratch/.gitkeep +0 -0
- package/template/workspace/threads/.gitkeep +3 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# INDEX.md Specification
|
|
2
|
+
|
|
3
|
+
Standard for hierarchical INDEX.md files across HQ directories.
|
|
4
|
+
|
|
5
|
+
## Template
|
|
6
|
+
|
|
7
|
+
```markdown
|
|
8
|
+
# {Directory Name}
|
|
9
|
+
|
|
10
|
+
> Auto-generated. Updated: {YYYY-MM-DD}
|
|
11
|
+
|
|
12
|
+
| Name | Description |
|
|
13
|
+
|------|-------------|
|
|
14
|
+
| `item/` | 1-line description |
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Optional 1-2 line notes section at bottom for usage hints (e.g., "Load workers via `/run {id}`").
|
|
18
|
+
|
|
19
|
+
## Description Extraction
|
|
20
|
+
|
|
21
|
+
| File type | Source |
|
|
22
|
+
|-----------|--------|
|
|
23
|
+
| `.md` | First `#` heading |
|
|
24
|
+
| `.yaml` | `description:` field |
|
|
25
|
+
| `.json` | `name` or `description` field |
|
|
26
|
+
| Directory | File count + purpose summary |
|
|
27
|
+
|
|
28
|
+
Max 80 chars per description. If no metadata extractable, use filename.
|
|
29
|
+
|
|
30
|
+
## Variants
|
|
31
|
+
|
|
32
|
+
- `projects/INDEX.md` → add `Status` column (active/completed/archived)
|
|
33
|
+
- `workspace/orchestrator/INDEX.md` → add `Progress` column (e.g. "5/11 45%")
|
|
34
|
+
- `workspace/reports/INDEX.md` → add `Date` column
|
|
35
|
+
|
|
36
|
+
## Locations (10 directories)
|
|
37
|
+
|
|
38
|
+
1. `projects/`
|
|
39
|
+
2. `companies/{company-1}/knowledge/`
|
|
40
|
+
3. `companies/{company-2}/knowledge/`
|
|
41
|
+
4. `companies/{company-3}/knowledge/`
|
|
42
|
+
5. `knowledge/`
|
|
43
|
+
6. `workers/public/`
|
|
44
|
+
7. `workers/private/`
|
|
45
|
+
8. `workspace/orchestrator/`
|
|
46
|
+
9. `workspace/reports/`
|
|
47
|
+
10. `workspace/social-drafts/`
|
|
48
|
+
|
|
49
|
+
Root `INDEX.md` and `workspace/threads/INDEX.md` also exist but follow their own formats.
|
|
50
|
+
|
|
51
|
+
## Regeneration Rules
|
|
52
|
+
|
|
53
|
+
- Always full-rewrite (not incremental patch). Idempotent.
|
|
54
|
+
- Skip: `INDEX.md` itself, `.DS_Store`, `node_modules/`, dotfiles
|
|
55
|
+
- Sort entries: directories first, then files, alphabetical within each group
|
|
56
|
+
- Timestamp: use current date in YYYY-MM-DD format
|
|
57
|
+
|
|
58
|
+
## Update Triggers
|
|
59
|
+
|
|
60
|
+
| Command | INDEX.md files updated |
|
|
61
|
+
|---------|----------------------|
|
|
62
|
+
| `/checkpoint` | Root, threads/, + touched company knowledge dirs |
|
|
63
|
+
| `/handoff` | Root, threads/, orchestrator/, + touched company knowledge dirs |
|
|
64
|
+
| `/reanchor` | Validates freshness, reads indexes for context |
|
|
65
|
+
| `/cleanup --reindex` | ALL INDEX.md files (full rebuild) |
|
|
66
|
+
| `/prd` | `projects/` |
|
|
67
|
+
| `/run-project` | `projects/`, `workspace/orchestrator/` |
|
|
68
|
+
| `/newworker` | `workers/public/` or `workers/private/` |
|
|
69
|
+
| `/contentidea`, `/suggestposts`, `/post-now` | `workspace/social-drafts/` |
|
|
70
|
+
| Report generation | `workspace/reports/` |
|
|
71
|
+
|
|
72
|
+
## qmd
|
|
73
|
+
|
|
74
|
+
INDEX.md files are excluded from qmd indexing via `.qmdignore`. They are navigation aids, not searchable content.
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# Thread Schema
|
|
2
|
+
|
|
3
|
+
Threads persist complete session state including conversation summary, git context, and worker execution info. Inspired by Loom's thread-system.
|
|
4
|
+
|
|
5
|
+
## Location
|
|
6
|
+
|
|
7
|
+
`workspace/threads/{thread_id}.json`
|
|
8
|
+
|
|
9
|
+
## Thread ID Format
|
|
10
|
+
|
|
11
|
+
`T-{YYYYMMDD}-{HHMMSS}-{slug}`
|
|
12
|
+
|
|
13
|
+
Example: `T-20260123-143052-mrr-report`
|
|
14
|
+
|
|
15
|
+
## Schema
|
|
16
|
+
|
|
17
|
+
```json
|
|
18
|
+
{
|
|
19
|
+
"thread_id": "T-20260123-143052-mrr-report",
|
|
20
|
+
"version": 1,
|
|
21
|
+
"created_at": "2026-01-23T14:30:52.000Z",
|
|
22
|
+
"updated_at": "2026-01-23T14:35:00.000Z",
|
|
23
|
+
|
|
24
|
+
"workspace_root": "~/Documents/HQ",
|
|
25
|
+
"cwd": "repos/private/{company}",
|
|
26
|
+
|
|
27
|
+
"git": {
|
|
28
|
+
"branch": "main",
|
|
29
|
+
"remote_url": "git@github.com:user/repo.git",
|
|
30
|
+
"initial_commit": "abc1234",
|
|
31
|
+
"current_commit": "def5678",
|
|
32
|
+
"commits_made": [
|
|
33
|
+
"def5678: feat: add MRR calculation"
|
|
34
|
+
],
|
|
35
|
+
"dirty": false
|
|
36
|
+
},
|
|
37
|
+
|
|
38
|
+
"worker": {
|
|
39
|
+
"id": "{worker-id}",
|
|
40
|
+
"skill": "mrr",
|
|
41
|
+
"state": "completed",
|
|
42
|
+
"started_at": "2026-01-23T14:30:52.000Z",
|
|
43
|
+
"completed_at": "2026-01-23T14:35:00.000Z"
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
"conversation_summary": "Generated MRR report showing $45,230 current MRR with 3.2% growth",
|
|
47
|
+
"files_touched": [
|
|
48
|
+
"workspace/reports/finance/2026-01-23-mrr.md"
|
|
49
|
+
],
|
|
50
|
+
"next_steps": [],
|
|
51
|
+
|
|
52
|
+
"metadata": {
|
|
53
|
+
"title": "MRR Report Jan 2026",
|
|
54
|
+
"tags": ["finance", "{company}", "mrr"]
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Fields
|
|
60
|
+
|
|
61
|
+
### Core
|
|
62
|
+
|
|
63
|
+
| Field | Type | Description |
|
|
64
|
+
|-------|------|-------------|
|
|
65
|
+
| `thread_id` | string | Unique identifier |
|
|
66
|
+
| `version` | number | Schema version (currently 1) |
|
|
67
|
+
| `created_at` | ISO8601 | Thread creation time |
|
|
68
|
+
| `updated_at` | ISO8601 | Last update time |
|
|
69
|
+
|
|
70
|
+
### Context
|
|
71
|
+
|
|
72
|
+
| Field | Type | Description |
|
|
73
|
+
|-------|------|-------------|
|
|
74
|
+
| `workspace_root` | string | HQ root path |
|
|
75
|
+
| `cwd` | string | Working directory (relative to root) |
|
|
76
|
+
|
|
77
|
+
### Git State
|
|
78
|
+
|
|
79
|
+
| Field | Type | Description |
|
|
80
|
+
|-------|------|-------------|
|
|
81
|
+
| `git.branch` | string | Current branch |
|
|
82
|
+
| `git.remote_url` | string | Origin remote URL |
|
|
83
|
+
| `git.initial_commit` | string | Commit SHA at thread start |
|
|
84
|
+
| `git.current_commit` | string | Commit SHA at thread end |
|
|
85
|
+
| `git.commits_made` | string[] | Commits created during session |
|
|
86
|
+
| `git.dirty` | boolean | Uncommitted changes present |
|
|
87
|
+
|
|
88
|
+
### Worker State
|
|
89
|
+
|
|
90
|
+
| Field | Type | Description |
|
|
91
|
+
|-------|------|-------------|
|
|
92
|
+
| `worker.id` | string | Worker ID (if applicable) |
|
|
93
|
+
| `worker.skill` | string | Skill executed |
|
|
94
|
+
| `worker.state` | enum | `idle`, `loading`, `executing`, `verifying`, `completed`, `error` |
|
|
95
|
+
| `worker.started_at` | ISO8601 | Execution start |
|
|
96
|
+
| `worker.completed_at` | ISO8601 | Execution end |
|
|
97
|
+
|
|
98
|
+
### Results
|
|
99
|
+
|
|
100
|
+
| Field | Type | Description |
|
|
101
|
+
|-------|------|-------------|
|
|
102
|
+
| `conversation_summary` | string | What was accomplished |
|
|
103
|
+
| `files_touched` | string[] | Files created/modified |
|
|
104
|
+
| `next_steps` | string[] | Remaining work |
|
|
105
|
+
|
|
106
|
+
### Metadata
|
|
107
|
+
|
|
108
|
+
| Field | Type | Description |
|
|
109
|
+
|-------|------|-------------|
|
|
110
|
+
| `metadata.title` | string | Human-readable title |
|
|
111
|
+
| `metadata.tags` | string[] | Searchable tags |
|
|
112
|
+
|
|
113
|
+
## State Values
|
|
114
|
+
|
|
115
|
+
Worker states follow the FSM:
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
idle → loading → executing → verifying → completed
|
|
119
|
+
↓
|
|
120
|
+
error
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Usage
|
|
124
|
+
|
|
125
|
+
### Creating a Thread
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
# Captured by /checkpoint command
|
|
129
|
+
/checkpoint mrr-report
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Searching Threads
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
# Via /search command
|
|
136
|
+
/search mrr
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Listing Recent
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
ls -lt workspace/threads/ | head -10
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Backward Compatibility
|
|
146
|
+
|
|
147
|
+
Old checkpoints in `workspace/checkpoints/` remain valid. Threads are a superset with richer git context.
|
|
148
|
+
|
|
149
|
+
## See Also
|
|
150
|
+
|
|
151
|
+
- [Loom thread-system](../loom/thread-system.md) - Inspiration
|
|
152
|
+
- `/checkpoint` command - Creates threads
|
|
153
|
+
- `/search` command - Searches threads
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "hq-checkpoint-schema",
|
|
4
|
+
"title": "HQ Checkpoint Schema",
|
|
5
|
+
"description": "Canonical checkpoint format for HQ task progress tracking",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["task_id", "completed_at", "summary"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"task_id": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"description": "Unique identifier for the task (e.g., US-001, feature-name)"
|
|
12
|
+
},
|
|
13
|
+
"completed_at": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"format": "date-time",
|
|
16
|
+
"description": "ISO8601 timestamp when checkpoint was created"
|
|
17
|
+
},
|
|
18
|
+
"summary": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"description": "Brief description of work completed"
|
|
21
|
+
},
|
|
22
|
+
"files_touched": {
|
|
23
|
+
"type": "array",
|
|
24
|
+
"items": { "type": "string" },
|
|
25
|
+
"description": "List of files modified during this work"
|
|
26
|
+
},
|
|
27
|
+
"build_passed": {
|
|
28
|
+
"type": "boolean",
|
|
29
|
+
"description": "Whether build/tests passed after this work"
|
|
30
|
+
},
|
|
31
|
+
"commit": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"description": "Git commit hash if code was committed"
|
|
34
|
+
},
|
|
35
|
+
"next_steps": {
|
|
36
|
+
"type": "array",
|
|
37
|
+
"items": { "type": "string" },
|
|
38
|
+
"description": "Suggested next actions for future sessions"
|
|
39
|
+
},
|
|
40
|
+
"notes": {
|
|
41
|
+
"type": "string",
|
|
42
|
+
"description": "Additional context or observations"
|
|
43
|
+
},
|
|
44
|
+
"metadata": {
|
|
45
|
+
"type": "object",
|
|
46
|
+
"description": "Arbitrary additional data",
|
|
47
|
+
"additionalProperties": true
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"additionalProperties": false
|
|
51
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# INDEX.md Specification
|
|
2
|
+
|
|
3
|
+
Standard for hierarchical INDEX.md files across HQ directories.
|
|
4
|
+
|
|
5
|
+
## Template
|
|
6
|
+
|
|
7
|
+
```markdown
|
|
8
|
+
# {Directory Name}
|
|
9
|
+
|
|
10
|
+
> Auto-generated. Updated: {YYYY-MM-DD}
|
|
11
|
+
|
|
12
|
+
| Name | Description |
|
|
13
|
+
|------|-------------|
|
|
14
|
+
| `item/` | 1-line description |
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Optional 1-2 line notes section at bottom for usage hints (e.g., "Load workers via `/run {id}`").
|
|
18
|
+
|
|
19
|
+
## Description Extraction
|
|
20
|
+
|
|
21
|
+
| File type | Source |
|
|
22
|
+
|-----------|--------|
|
|
23
|
+
| `.md` | First `#` heading |
|
|
24
|
+
| `.yaml` | `description:` field |
|
|
25
|
+
| `.json` | `name` or `description` field |
|
|
26
|
+
| Directory | File count + purpose summary |
|
|
27
|
+
|
|
28
|
+
Max 80 chars per description. If no metadata extractable, use filename.
|
|
29
|
+
|
|
30
|
+
## Variants
|
|
31
|
+
|
|
32
|
+
- `projects/INDEX.md` → add `Status` column (active/completed/archived)
|
|
33
|
+
- `workspace/orchestrator/INDEX.md` → add `Progress` column (e.g. "5/11 45%")
|
|
34
|
+
- `workspace/reports/INDEX.md` → add `Date` column
|
|
35
|
+
|
|
36
|
+
## Locations (10 directories)
|
|
37
|
+
|
|
38
|
+
1. `projects/`
|
|
39
|
+
2. `companies/{company-1}/knowledge/`
|
|
40
|
+
3. `companies/{company-2}/knowledge/`
|
|
41
|
+
4. `companies/{company-3}/knowledge/`
|
|
42
|
+
5. `knowledge/`
|
|
43
|
+
6. `workers/public/`
|
|
44
|
+
7. `workers/private/`
|
|
45
|
+
8. `workspace/orchestrator/`
|
|
46
|
+
9. `workspace/reports/`
|
|
47
|
+
10. `workspace/social-drafts/`
|
|
48
|
+
|
|
49
|
+
Root `INDEX.md` and `workspace/threads/INDEX.md` also exist but follow their own formats.
|
|
50
|
+
|
|
51
|
+
## Regeneration Rules
|
|
52
|
+
|
|
53
|
+
- Always full-rewrite (not incremental patch). Idempotent.
|
|
54
|
+
- Skip: `INDEX.md` itself, `.DS_Store`, `node_modules/`, dotfiles
|
|
55
|
+
- Sort entries: directories first, then files, alphabetical within each group
|
|
56
|
+
- Timestamp: use current date in YYYY-MM-DD format
|
|
57
|
+
|
|
58
|
+
## Update Triggers
|
|
59
|
+
|
|
60
|
+
| Command | INDEX.md files updated |
|
|
61
|
+
|---------|----------------------|
|
|
62
|
+
| `/checkpoint` | Root, threads/, + touched company knowledge dirs |
|
|
63
|
+
| `/handoff` | Root, threads/, orchestrator/, + touched company knowledge dirs |
|
|
64
|
+
| `/reanchor` | Validates freshness, reads indexes for context |
|
|
65
|
+
| `/cleanup --reindex` | ALL INDEX.md files (full rebuild) |
|
|
66
|
+
| `/prd` | `projects/` |
|
|
67
|
+
| `/run-project` | `projects/`, `workspace/orchestrator/` |
|
|
68
|
+
| `/newworker` | `workers/public/` or `workers/private/` |
|
|
69
|
+
| `/contentidea`, `/suggestposts`, `/post-now` | `workspace/social-drafts/` |
|
|
70
|
+
| Report generation | `workspace/reports/` |
|
|
71
|
+
|
|
72
|
+
## qmd
|
|
73
|
+
|
|
74
|
+
INDEX.md files are excluded from qmd indexing via `.qmdignore`. They are navigation aids, not searchable content.
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# Thread Schema
|
|
2
|
+
|
|
3
|
+
Threads persist complete session state including conversation summary, git context, and worker execution info. Inspired by Loom's thread-system.
|
|
4
|
+
|
|
5
|
+
## Location
|
|
6
|
+
|
|
7
|
+
`workspace/threads/{thread_id}.json`
|
|
8
|
+
|
|
9
|
+
## Thread ID Format
|
|
10
|
+
|
|
11
|
+
`T-{YYYYMMDD}-{HHMMSS}-{slug}`
|
|
12
|
+
|
|
13
|
+
Example: `T-20260123-143052-mrr-report`
|
|
14
|
+
|
|
15
|
+
## Schema
|
|
16
|
+
|
|
17
|
+
```json
|
|
18
|
+
{
|
|
19
|
+
"thread_id": "T-20260123-143052-mrr-report",
|
|
20
|
+
"version": 1,
|
|
21
|
+
"created_at": "2026-01-23T14:30:52.000Z",
|
|
22
|
+
"updated_at": "2026-01-23T14:35:00.000Z",
|
|
23
|
+
|
|
24
|
+
"workspace_root": "~/Documents/HQ",
|
|
25
|
+
"cwd": "repos/private/{company}",
|
|
26
|
+
|
|
27
|
+
"git": {
|
|
28
|
+
"branch": "main",
|
|
29
|
+
"remote_url": "git@github.com:user/repo.git",
|
|
30
|
+
"initial_commit": "abc1234",
|
|
31
|
+
"current_commit": "def5678",
|
|
32
|
+
"commits_made": [
|
|
33
|
+
"def5678: feat: add MRR calculation"
|
|
34
|
+
],
|
|
35
|
+
"dirty": false
|
|
36
|
+
},
|
|
37
|
+
|
|
38
|
+
"worker": {
|
|
39
|
+
"id": "{worker-id}",
|
|
40
|
+
"skill": "mrr",
|
|
41
|
+
"state": "completed",
|
|
42
|
+
"started_at": "2026-01-23T14:30:52.000Z",
|
|
43
|
+
"completed_at": "2026-01-23T14:35:00.000Z"
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
"conversation_summary": "Generated MRR report showing $45,230 current MRR with 3.2% growth",
|
|
47
|
+
"files_touched": [
|
|
48
|
+
"workspace/reports/finance/2026-01-23-mrr.md"
|
|
49
|
+
],
|
|
50
|
+
"next_steps": [],
|
|
51
|
+
|
|
52
|
+
"metadata": {
|
|
53
|
+
"title": "MRR Report Jan 2026",
|
|
54
|
+
"tags": ["finance", "{company}", "mrr"]
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Fields
|
|
60
|
+
|
|
61
|
+
### Core
|
|
62
|
+
|
|
63
|
+
| Field | Type | Description |
|
|
64
|
+
|-------|------|-------------|
|
|
65
|
+
| `thread_id` | string | Unique identifier |
|
|
66
|
+
| `version` | number | Schema version (currently 1) |
|
|
67
|
+
| `created_at` | ISO8601 | Thread creation time |
|
|
68
|
+
| `updated_at` | ISO8601 | Last update time |
|
|
69
|
+
|
|
70
|
+
### Context
|
|
71
|
+
|
|
72
|
+
| Field | Type | Description |
|
|
73
|
+
|-------|------|-------------|
|
|
74
|
+
| `workspace_root` | string | HQ root path |
|
|
75
|
+
| `cwd` | string | Working directory (relative to root) |
|
|
76
|
+
|
|
77
|
+
### Git State
|
|
78
|
+
|
|
79
|
+
| Field | Type | Description |
|
|
80
|
+
|-------|------|-------------|
|
|
81
|
+
| `git.branch` | string | Current branch |
|
|
82
|
+
| `git.remote_url` | string | Origin remote URL |
|
|
83
|
+
| `git.initial_commit` | string | Commit SHA at thread start |
|
|
84
|
+
| `git.current_commit` | string | Commit SHA at thread end |
|
|
85
|
+
| `git.commits_made` | string[] | Commits created during session |
|
|
86
|
+
| `git.dirty` | boolean | Uncommitted changes present |
|
|
87
|
+
|
|
88
|
+
### Worker State
|
|
89
|
+
|
|
90
|
+
| Field | Type | Description |
|
|
91
|
+
|-------|------|-------------|
|
|
92
|
+
| `worker.id` | string | Worker ID (if applicable) |
|
|
93
|
+
| `worker.skill` | string | Skill executed |
|
|
94
|
+
| `worker.state` | enum | `idle`, `loading`, `executing`, `verifying`, `completed`, `error` |
|
|
95
|
+
| `worker.started_at` | ISO8601 | Execution start |
|
|
96
|
+
| `worker.completed_at` | ISO8601 | Execution end |
|
|
97
|
+
|
|
98
|
+
### Results
|
|
99
|
+
|
|
100
|
+
| Field | Type | Description |
|
|
101
|
+
|-------|------|-------------|
|
|
102
|
+
| `conversation_summary` | string | What was accomplished |
|
|
103
|
+
| `files_touched` | string[] | Files created/modified |
|
|
104
|
+
| `next_steps` | string[] | Remaining work |
|
|
105
|
+
|
|
106
|
+
### Metadata
|
|
107
|
+
|
|
108
|
+
| Field | Type | Description |
|
|
109
|
+
|-------|------|-------------|
|
|
110
|
+
| `metadata.title` | string | Human-readable title |
|
|
111
|
+
| `metadata.tags` | string[] | Searchable tags |
|
|
112
|
+
|
|
113
|
+
## State Values
|
|
114
|
+
|
|
115
|
+
Worker states follow the FSM:
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
idle → loading → executing → verifying → completed
|
|
119
|
+
↓
|
|
120
|
+
error
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Usage
|
|
124
|
+
|
|
125
|
+
### Creating a Thread
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
# Captured by /checkpoint command
|
|
129
|
+
/checkpoint mrr-report
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Searching Threads
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
# Via /search command
|
|
136
|
+
/search mrr
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Listing Recent
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
ls -lt workspace/threads/ | head -10
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Backward Compatibility
|
|
146
|
+
|
|
147
|
+
Old checkpoints in `workspace/checkpoints/` remain valid. Threads are a superset with richer git context.
|
|
148
|
+
|
|
149
|
+
## See Also
|
|
150
|
+
|
|
151
|
+
- [Loom thread-system](../loom/thread-system.md) - Inspiration
|
|
152
|
+
- `/checkpoint` command - Creates threads
|
|
153
|
+
- `/search` command - Searches threads
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Loom
|
|
2
|
+
|
|
3
|
+
AI-powered coding agent built in Rust by Geoffrey Huntley.
|
|
4
|
+
|
|
5
|
+
**Repo**: `repos/public/loom/` | **GitHub**: https://github.com/ghuntley/loom
|
|
6
|
+
|
|
7
|
+
## What Is Loom?
|
|
8
|
+
|
|
9
|
+
Loom is a REPL-based AI coding agent with:
|
|
10
|
+
- **96 Rust crates** organized as a Cargo workspace
|
|
11
|
+
- **Server-side LLM proxy** - API keys never leave the server
|
|
12
|
+
- **Tool system** for file ops, bash, web search
|
|
13
|
+
- **Weaver** - remote execution via K8s pods
|
|
14
|
+
- **Svelte 5 web frontend**
|
|
15
|
+
|
|
16
|
+
## Core Principles
|
|
17
|
+
|
|
18
|
+
1. **Modularity** - Clean separation via trait implementations
|
|
19
|
+
2. **Extensibility** - Easy addition of LLM providers and tools
|
|
20
|
+
3. **Reliability** - Retry mechanisms, structured logging
|
|
21
|
+
|
|
22
|
+
## Knowledge Base
|
|
23
|
+
|
|
24
|
+
| Doc | Description |
|
|
25
|
+
|-----|-------------|
|
|
26
|
+
| [architecture.md](architecture.md) | System design, crate organization, tech stack |
|
|
27
|
+
| [state-machine.md](state-machine.md) | Core agent loop (7-state FSM) |
|
|
28
|
+
| [tools.md](tools.md) | Tool trait, registry, built-in tools |
|
|
29
|
+
| [llm-proxy.md](llm-proxy.md) | LLM provider abstraction, SSE streaming |
|
|
30
|
+
| [thread-system.md](thread-system.md) | Conversation persistence, search |
|
|
31
|
+
| [weaver.md](weaver.md) | Remote execution, K8s, WireGuard |
|
|
32
|
+
| [web-frontend.md](web-frontend.md) | Svelte 5 runes, xstate patterns |
|
|
33
|
+
| [code-style.md](code-style.md) | Rust/Svelte conventions |
|
|
34
|
+
|
|
35
|
+
## Quick Reference
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
loom/
|
|
39
|
+
├── crates/ # 96 Rust crates
|
|
40
|
+
├── web/loom-web/ # Svelte 5 frontend
|
|
41
|
+
├── specs/ # 57 design specs
|
|
42
|
+
├── infra/ # Nix/K8s infrastructure
|
|
43
|
+
└── AGENTS.md # Development guidelines
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Key Files
|
|
47
|
+
|
|
48
|
+
- `AGENTS.md` - Build commands, deployment, code style
|
|
49
|
+
- `specs/README.md` - Spec index by category
|
|
50
|
+
- `specs/state-machine.md` - Agent FSM spec
|
|
51
|
+
- `crates/loom-common-core/src/` - Core types and state machine
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# Loom Architecture
|
|
2
|
+
|
|
3
|
+
## Workspace Layout
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
loom/
|
|
7
|
+
├── crates/ # 96 Rust crates
|
|
8
|
+
├── web/loom-web/ # Svelte 5 frontend
|
|
9
|
+
├── specs/ # 57 design specifications
|
|
10
|
+
├── infra/ # Nix/K8s infrastructure
|
|
11
|
+
│ ├── nixos-modules/
|
|
12
|
+
│ ├── pkgs/
|
|
13
|
+
│ └── machines/
|
|
14
|
+
├── docker/ # Container configs
|
|
15
|
+
├── scripts/ # Build utilities
|
|
16
|
+
├── tools/ # Tool definitions
|
|
17
|
+
└── ide/vscode/ # VS Code extension
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Crate Categories
|
|
21
|
+
|
|
22
|
+
### Core (shared types & abstractions)
|
|
23
|
+
| Crate | Purpose |
|
|
24
|
+
|-------|---------|
|
|
25
|
+
| `loom-common-core` | State machine, agent, LLM types, tool types |
|
|
26
|
+
| `loom-common-thread` | Thread/conversation model |
|
|
27
|
+
| `loom-common-config` | Shared configuration |
|
|
28
|
+
| `loom-common-http` | reqwest wrapper with retry |
|
|
29
|
+
| `loom-common-secret` | Secret handling (auto-redact) |
|
|
30
|
+
|
|
31
|
+
### CLI
|
|
32
|
+
| Crate | Purpose |
|
|
33
|
+
|-------|---------|
|
|
34
|
+
| `loom-cli` | Main CLI application |
|
|
35
|
+
| `loom-cli-tools` | Tool implementations |
|
|
36
|
+
| `loom-cli-auto-commit` | Git auto-commit hook |
|
|
37
|
+
| `loom-cli-git` | Git integration |
|
|
38
|
+
| `loom-cli-spool` | VCS (spool/jj) support |
|
|
39
|
+
|
|
40
|
+
### Server
|
|
41
|
+
| Crate | Purpose |
|
|
42
|
+
|-------|---------|
|
|
43
|
+
| `loom-server` | HTTP API (axum), migrations, main service |
|
|
44
|
+
| `loom-server-api` | API endpoints |
|
|
45
|
+
| `loom-server-db` | SQLite via sqlx |
|
|
46
|
+
| `loom-server-llm-service` | LLM orchestration |
|
|
47
|
+
| `loom-server-llm-proxy` | Client-side proxy handling |
|
|
48
|
+
| `loom-server-llm-anthropic` | Claude integration |
|
|
49
|
+
| `loom-server-llm-openai` | OpenAI integration |
|
|
50
|
+
| `loom-server-llm-vertex` | Google Vertex AI |
|
|
51
|
+
|
|
52
|
+
### Server Auth
|
|
53
|
+
| Crate | Purpose |
|
|
54
|
+
|-------|---------|
|
|
55
|
+
| `loom-server-auth` | Auth framework |
|
|
56
|
+
| `loom-server-auth-github` | GitHub OAuth |
|
|
57
|
+
| `loom-server-auth-google` | Google OAuth |
|
|
58
|
+
| `loom-server-auth-magiclink` | Magic link auth |
|
|
59
|
+
| `loom-server-auth-okta` | Okta SAML |
|
|
60
|
+
| `loom-server-auth-devicecode` | Device code flow |
|
|
61
|
+
|
|
62
|
+
### TUI (Terminal UI)
|
|
63
|
+
| Crate | Purpose |
|
|
64
|
+
|-------|---------|
|
|
65
|
+
| `loom-tui-app` | Main TUI application |
|
|
66
|
+
| `loom-tui-core` | Core types |
|
|
67
|
+
| `loom-tui-component` | Component framework |
|
|
68
|
+
| `loom-tui-widget-*` | Widgets (header, input, markdown, message-list, modal, scrollable, spinner, status-bar, thread-list, tool-panel) |
|
|
69
|
+
|
|
70
|
+
### Observability
|
|
71
|
+
| Crate | Purpose |
|
|
72
|
+
|-------|---------|
|
|
73
|
+
| `loom-analytics` | PostHog-style analytics |
|
|
74
|
+
| `loom-crash` | Crash reporting |
|
|
75
|
+
| `loom-crons` | Cron job monitoring |
|
|
76
|
+
| `loom-server-sessions` | Session tracking |
|
|
77
|
+
|
|
78
|
+
### Weaver (Remote Execution)
|
|
79
|
+
| Crate | Purpose |
|
|
80
|
+
|-------|---------|
|
|
81
|
+
| `loom-weaver-*` | Remote execution stack |
|
|
82
|
+
| `loom-wgtunnel-*` | WireGuard tunneling |
|
|
83
|
+
| `loom-weaver-ebpf` | eBPF syscall tracing |
|
|
84
|
+
|
|
85
|
+
## Server-Client Architecture
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
┌─────────────┐ HTTP ┌─────────────┐ Provider API ┌─────────────┐
|
|
89
|
+
│ loom-cli │ ───────────────▶│ loom-server │ ──────────────────▶ │ Anthropic │
|
|
90
|
+
│ │ /proxy/{provider}│ │ │ OpenAI │
|
|
91
|
+
│ ProxyLlm- │ /complete │ LlmService │ │ Vertex AI │
|
|
92
|
+
│ Client │ /stream │ │ │ │
|
|
93
|
+
└─────────────┘ ◀───────────── └─────────────┘ ◀────────────────── └─────────────┘
|
|
94
|
+
SSE stream SSE stream
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**Key insight**: API keys stay server-side. Clients use proxy endpoints.
|
|
98
|
+
|
|
99
|
+
## Tech Stack
|
|
100
|
+
|
|
101
|
+
| Layer | Technology |
|
|
102
|
+
|-------|------------|
|
|
103
|
+
| Backend | Rust, Tokio async runtime, axum HTTP |
|
|
104
|
+
| Database | SQLite with sqlx |
|
|
105
|
+
| Web Frontend | Svelte 5 (runes), SvelteKit, Tailwind CSS 4, xstate |
|
|
106
|
+
| Build | Cargo, Nix (cargo2nix for reproducible builds) |
|
|
107
|
+
| Containers | Nix + Docker |
|
|
108
|
+
| Orchestration | Kubernetes (for Weaver pods) |
|
|
109
|
+
| i18n | GNU gettext with Lingui |
|
|
110
|
+
| Testing | proptest (property-based), vitest (web) |
|
|
111
|
+
| TUI | Ratatui 0.30 |
|
|
112
|
+
|
|
113
|
+
## Database
|
|
114
|
+
|
|
115
|
+
- SQLite via sqlx with compile-time query checking
|
|
116
|
+
- Migrations in `crates/loom-server/migrations/`
|
|
117
|
+
- Naming: `NNN_description.sql` (e.g., `020_scm_repos.sql`)
|
|
118
|
+
- Auto-run on server startup
|
|
119
|
+
|
|
120
|
+
## Deployment
|
|
121
|
+
|
|
122
|
+
- Production runs NixOS with auto-update
|
|
123
|
+
- `git push origin trunk` triggers deployment
|
|
124
|
+
- Update service polls every 10 seconds
|
|
125
|
+
- Health endpoint: `https://loom.ghuntley.com/health`
|