@growthub/cli 0.7.9 → 0.8.1
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/assets/worker-kits/creative-strategist-v1/SKILL.md +95 -0
- package/assets/worker-kits/creative-strategist-v1/bundles/creative-strategist-v1.json +12 -2
- package/assets/worker-kits/creative-strategist-v1/helpers/README.md +29 -0
- package/assets/worker-kits/creative-strategist-v1/helpers/extract-muse-frames.sh +81 -0
- package/assets/worker-kits/creative-strategist-v1/helpers/grep-hooks.sh +62 -0
- package/assets/worker-kits/creative-strategist-v1/kit.json +20 -2
- package/assets/worker-kits/creative-strategist-v1/skills/README.md +23 -0
- package/assets/worker-kits/creative-strategist-v1/skills/frame-analysis/SKILL.md +88 -0
- package/assets/worker-kits/creative-strategist-v1/templates/project.md +48 -0
- package/assets/worker-kits/creative-strategist-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/creative-strategist-v1/workers/creative-strategist/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/.env.example +53 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/QUICKSTART.md +98 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/SKILL.md +89 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/.env.example +25 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/README.md +36 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/app/api/settings/integrations/route.js +13 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/app/api/workspace/route.js +27 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/app/globals.css +237 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/app/layout.jsx +14 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/app/page.jsx +165 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/app/settings/integrations/page.jsx +134 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/auth/index.js +21 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/env.js +28 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/integrations/growthub-connection-normalizer.js +95 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/integrations/index.js +178 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/payments/index.js +13 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/persistence/index.js +13 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/persistence/postgres.js +16 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/persistence/provider-managed.js +16 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/adapters/persistence/qstash-kv.js +16 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/domain/integrations.js +185 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/lib/domain/portal.js +16 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/next.config.js +10 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/package-lock.json +976 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/package.json +17 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/postcss.config.mjs +3 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/apps/agency-portal/vercel.json +5 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/brands/NEW-CLIENT.md +10 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/brands/_template/brand-kit.md +27 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/brands/growthub/brand-kit.md +25 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/bundles/growthub-agency-portal-starter-v1.json +65 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/docs/adapter-contracts.md +79 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/docs/fork-sync-integration.md +32 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/docs/governed-workspace-primitives.md +182 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/docs/starter-kit-overview.md +30 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/docs/vercel-serverless-deployment.md +46 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/docs/vite-ui-shell-guide.md +24 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/examples/portal-brief-sample.md +44 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/examples/workspace-sample.md +10 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/growthub-meta/README.md +11 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/growthub-meta/kit-standard.md +16 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/helpers/README.md +49 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/kit.json +156 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/output/README.md +13 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/output-standards.md +25 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/runtime-assumptions.md +15 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/setup/check-deps.sh +20 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/setup/verify-env.mjs +92 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/skills/README.md +55 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/skills.md +133 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/index.html +12 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/package-lock.json +1677 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/package.json +20 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/serve.mjs +42 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/src/App.jsx +162 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/src/app.css +138 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/src/main.jsx +10 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/studio/vite.config.js +8 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/agent-contract.md +9 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/client-onboarding-plan.md +56 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/deployment-handoff.md +61 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/deployment-plan.md +22 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/portal-brief.md +65 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/project.md +55 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/supabase-setup-plan.md +26 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/templates/workspace-brief.md +11 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/validation-checklist.md +32 -0
- package/assets/worker-kits/growthub-agency-portal-starter-v1/workers/agency-portal-operator/CLAUDE.md +75 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/SKILL.md +89 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/bundles/growthub-ai-website-cloner-v1.json +9 -2
- package/assets/worker-kits/growthub-ai-website-cloner-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-ai-website-cloner-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/workers/ai-website-cloner-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/SKILL.md +122 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/bundles/growthub-custom-workspace-starter-v1.json +14 -2
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/docs/governed-workspace-primitives.md +182 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/helpers/README.md +44 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/kit.json +16 -2
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/skills/README.md +55 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/templates/project.md +55 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/workers/custom-workspace-operator/CLAUDE.md +24 -2
- package/assets/worker-kits/growthub-email-marketing-v1/SKILL.md +90 -0
- package/assets/worker-kits/growthub-email-marketing-v1/bundles/growthub-email-marketing-v1.json +9 -2
- package/assets/worker-kits/growthub-email-marketing-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-email-marketing-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-email-marketing-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-email-marketing-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-email-marketing-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-email-marketing-v1/workers/email-marketing-strategist/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-geo-seo-v1/SKILL.md +90 -0
- package/assets/worker-kits/growthub-geo-seo-v1/bundles/growthub-geo-seo-v1.json +12 -3
- package/assets/worker-kits/growthub-geo-seo-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-geo-seo-v1/kit.json +23 -5
- package/assets/worker-kits/growthub-geo-seo-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-geo-seo-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-geo-seo-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-geo-seo-v1/workers/geo-seo-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-hyperframes-studio-v1/SKILL.md +89 -0
- package/assets/worker-kits/growthub-hyperframes-studio-v1/bundles/growthub-hyperframes-studio-v1.json +6 -1
- package/assets/worker-kits/growthub-hyperframes-studio-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-hyperframes-studio-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-hyperframes-studio-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-hyperframes-studio-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-hyperframes-studio-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-hyperframes-studio-v1/workers/hyperframes-studio-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-marketing-skills-v1/SKILL.md +90 -0
- package/assets/worker-kits/growthub-marketing-skills-v1/bundles/growthub-marketing-skills-v1.json +12 -3
- package/assets/worker-kits/growthub-marketing-skills-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-marketing-skills-v1/kit.json +23 -5
- package/assets/worker-kits/growthub-marketing-skills-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-marketing-skills-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-marketing-skills-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-marketing-skills-v1/workers/marketing-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-open-higgsfield-studio-v1/SKILL.md +89 -0
- package/assets/worker-kits/growthub-open-higgsfield-studio-v1/bundles/growthub-open-higgsfield-studio-v1.json +9 -2
- package/assets/worker-kits/growthub-open-higgsfield-studio-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-open-higgsfield-studio-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-open-higgsfield-studio-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-open-higgsfield-studio-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-open-higgsfield-studio-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-open-higgsfield-studio-v1/workers/open-higgsfield-studio-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/SKILL.md +89 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/bundles/growthub-open-montage-studio-v1.json +9 -2
- package/assets/worker-kits/growthub-open-montage-studio-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-open-montage-studio-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/workers/open-montage-studio-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-postiz-social-v1/SKILL.md +90 -0
- package/assets/worker-kits/growthub-postiz-social-v1/bundles/growthub-postiz-social-v1.json +9 -2
- package/assets/worker-kits/growthub-postiz-social-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-postiz-social-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-postiz-social-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-postiz-social-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-postiz-social-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-postiz-social-v1/workers/postiz-social-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/SKILL.md +89 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/bundles/growthub-twenty-crm-v1.json +9 -2
- package/assets/worker-kits/growthub-twenty-crm-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-twenty-crm-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/workers/twenty-crm-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/SKILL.md +89 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/bundles/growthub-video-use-studio-v1.json +6 -1
- package/assets/worker-kits/growthub-video-use-studio-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-video-use-studio-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/workers/video-use-studio-operator/CLAUDE.md +22 -0
- package/assets/worker-kits/growthub-zernio-social-v1/SKILL.md +90 -0
- package/assets/worker-kits/growthub-zernio-social-v1/bundles/growthub-zernio-social-v1.json +9 -2
- package/assets/worker-kits/growthub-zernio-social-v1/helpers/README.md +29 -0
- package/assets/worker-kits/growthub-zernio-social-v1/kit.json +14 -2
- package/assets/worker-kits/growthub-zernio-social-v1/skills/README.md +23 -0
- package/assets/worker-kits/growthub-zernio-social-v1/templates/project.md +48 -0
- package/assets/worker-kits/growthub-zernio-social-v1/templates/self-eval.md +67 -0
- package/assets/worker-kits/growthub-zernio-social-v1/workers/zernio-social-operator/CLAUDE.md +22 -0
- package/dist/index.js +970 -241
- package/package.json +2 -2
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: growthub-custom-workspace-starter
|
|
3
|
+
description: Baseline primitive for every Growthub governed workspace. Routing menu for the Custom Workspace Operator — delegates to the operator runbook (`skills.md`), the session-memory template (`templates/project.md`), the self-evaluation contract (`templates/self-eval.md`), the safe-shell helpers layer (`helpers/`), and the parallel sub-skill convention (`skills/`). Invoked when the user starts a greenfield workspace via `growthub starter init`, imports a GitHub repo or skills.sh skill via `growthub starter import-repo`/`import-skill`, or downloads this kit directly via `growthub kit download`.
|
|
4
|
+
triggers:
|
|
5
|
+
- greenfield workspace
|
|
6
|
+
- starter init
|
|
7
|
+
- custom workspace
|
|
8
|
+
- import repo
|
|
9
|
+
- import skill
|
|
10
|
+
- baseline primitive
|
|
11
|
+
progressiveDisclosure: true
|
|
12
|
+
sessionMemory:
|
|
13
|
+
path: .growthub-fork/project.md
|
|
14
|
+
selfEval:
|
|
15
|
+
criteria:
|
|
16
|
+
- Scaffolded tree matches kit.json frozenAssetPaths.
|
|
17
|
+
- .growthub-fork/ carries fork.json + policy.json + trace.jsonl.
|
|
18
|
+
- .growthub-fork/project.md seeded from templates/project.md.
|
|
19
|
+
- Operator contract read before any material change.
|
|
20
|
+
maxRetries: 3
|
|
21
|
+
traceTo: .growthub-fork/trace.jsonl
|
|
22
|
+
helpers: []
|
|
23
|
+
subSkills: []
|
|
24
|
+
mcpTools: []
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# Custom Workspace Starter — Baseline Primitive
|
|
28
|
+
|
|
29
|
+
Every Growthub governed workspace is materialised from this kit. The kit ships the `.growthub-fork/` contract (identity, policy, trace, optional authority) plus the six primitive layers Claude/Cursor/Codex agents operate against:
|
|
30
|
+
|
|
31
|
+
1. **`SKILL.md`** — this file. Discovery entry + routing menu. Always loaded first; the full operator runbook (`skills.md`) is disclosed progressively when work begins.
|
|
32
|
+
2. **`skills.md`** — the deep operator runbook. Everything the operator agent needs to actually customise the workspace. Unchanged from v1.
|
|
33
|
+
3. **`templates/project.md`** — session-memory template. On `growthub starter init` and `growthub starter import-*`, the CLI copies this to `.growthub-fork/project.md` so every fork starts with an append-only editing history alongside the machine-readable `trace.jsonl`.
|
|
34
|
+
4. **`templates/self-eval.md`** — self-evaluation pattern. Describes the generate → render → evaluate → retry (≤3) loop that mirrors the Fork Sync Agent's preview → apply → trace lifecycle.
|
|
35
|
+
5. **`helpers/`** — safe shell tool layer. Scripts an agent calls via one shell invocation instead of reconstructing raw commands. Populated per fork; the baseline ships conventions only.
|
|
36
|
+
6. **`skills/`** — nested sub-skill convention. Each sub-directory is a full `SKILL.md`-addressable sub-skill that a parent agent can spawn in parallel for heavy or narrow tasks.
|
|
37
|
+
|
|
38
|
+
## When to use this skill
|
|
39
|
+
|
|
40
|
+
- User says: "start a new custom workspace", "scaffold a fork", "import this repo into a workspace", "bring this skill into a fork".
|
|
41
|
+
- An agent has just been dropped into a directory that contains `.growthub-fork/fork.json` — this is the SKILL.md that routes the agent into the right operator flow for that fork.
|
|
42
|
+
|
|
43
|
+
## Decision tree
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
Did the user ask to CREATE a new workspace?
|
|
47
|
+
├── Yes → route to `growthub starter init --out <path>` (greenfield)
|
|
48
|
+
│ or `growthub starter import-repo <owner/repo> --out <path>`
|
|
49
|
+
│ or `growthub starter import-skill <owner/repo/skill> --out <path>`
|
|
50
|
+
│ Afterwards: open the fork + read `.growthub-fork/project.md` (just seeded).
|
|
51
|
+
│
|
|
52
|
+
└── No → the fork already exists. Read in this order:
|
|
53
|
+
1. `.growthub-fork/project.md` — session memory (your own prior state)
|
|
54
|
+
2. `SKILL.md` (this file) — routing menu
|
|
55
|
+
3. `skills.md` — operator runbook
|
|
56
|
+
4. `workers/custom-workspace-operator/CLAUDE.md` — agent contract
|
|
57
|
+
5. `.growthub-fork/policy.json` — what you may touch
|
|
58
|
+
6. `.growthub-fork/trace.jsonl` — machine history (tail 20)
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Self-evaluation (primitive #4)
|
|
62
|
+
|
|
63
|
+
After each material change to the fork:
|
|
64
|
+
|
|
65
|
+
1. Append an entry to `.growthub-fork/project.md` (human-readable: what you tried, why, outcome).
|
|
66
|
+
2. Append a typed event to `.growthub-fork/trace.jsonl` via `appendKitForkTraceEvent` — never bypass.
|
|
67
|
+
3. Check against `selfEval.criteria` above. If failed, retry up to `maxRetries: 3` — then stop and park with a `needs_confirmation` note in `project.md`. Do not loop indefinitely.
|
|
68
|
+
|
|
69
|
+
See `templates/self-eval.md` for the concrete template.
|
|
70
|
+
|
|
71
|
+
## Session memory (primitive #3)
|
|
72
|
+
|
|
73
|
+
`.growthub-fork/project.md` is the single cross-session continuity surface. Write to it:
|
|
74
|
+
|
|
75
|
+
- before you begin each session (what you plan),
|
|
76
|
+
- after each material change (what you did),
|
|
77
|
+
- at approval boundaries (what the user approved / rejected),
|
|
78
|
+
- at self-eval boundaries (retry count, outcome).
|
|
79
|
+
|
|
80
|
+
`project.md` is human-readable; `trace.jsonl` is machine-readable. The two are kept in sync by the CLI's fork primitives — you never pick one over the other.
|
|
81
|
+
|
|
82
|
+
## Sub-skills (primitive #5)
|
|
83
|
+
|
|
84
|
+
If this fork declares sub-skills under `skills/<slug>/SKILL.md`, list them below. Spawn a sub-agent per sub-skill only when the work is (a) heavy enough that isolating context helps, or (b) narrow enough that a specialist lane is clearer than a generalist lane.
|
|
85
|
+
|
|
86
|
+
(None declared at the baseline; forks populate this as the workspace evolves.)
|
|
87
|
+
|
|
88
|
+
## Helpers (primitive #6)
|
|
89
|
+
|
|
90
|
+
Helpers live under `helpers/`. When an existing shell snippet in `skills.md` is re-used in multiple sessions, extract it into `helpers/<verb>.sh`, add a row to `helpers/README.md`, and add an entry to this frontmatter's `helpers[]` array. Agents then call one shell file rather than reconstructing the snippet — safer, reviewable, consistent.
|
|
91
|
+
|
|
92
|
+
(None declared at the baseline; see `helpers/README.md` for the pattern.)
|
|
93
|
+
|
|
94
|
+
## MCP routing (optional)
|
|
95
|
+
|
|
96
|
+
If a concrete MCP server is available for this fork, list its tool IDs in `mcpTools[]`. Growthub's baseline ships declarative-only routing vocabulary — the CLI does not run an MCP server at v1. This field lets future MCP integration light up additively without a breaking change.
|
|
97
|
+
|
|
98
|
+
## Execution verbs (from `workers/custom-workspace-operator/CLAUDE.md`)
|
|
99
|
+
|
|
100
|
+
- `growthub starter init --name <workspace> --out <path>` — scaffold a new workspace from this kit
|
|
101
|
+
- `growthub starter import-repo <ref> --out <path>` — scaffold from a GitHub repo
|
|
102
|
+
- `growthub starter import-skill <ref> --out <path>` — scaffold from a skills.sh skill
|
|
103
|
+
- `growthub kit fork status <fork-id>` — drift check
|
|
104
|
+
- `growthub kit fork heal <fork-id> [--dry-run | --background]` — preview + apply heal
|
|
105
|
+
- `growthub kit fork policy --fork-id <fork-id> --set <key=value>` — configure safety envelope
|
|
106
|
+
- `growthub kit fork trace --fork-id <fork-id> --tail N` — replay the event log
|
|
107
|
+
- `growthub skills list [--json]` — enumerate every SKILL.md (this fork + nested)
|
|
108
|
+
- `growthub skills validate` — check SKILL.md frontmatter + helper/sub-skill paths
|
|
109
|
+
- `growthub skills session show` — print the current `.growthub-fork/project.md`
|
|
110
|
+
|
|
111
|
+
## Related files
|
|
112
|
+
|
|
113
|
+
- `skills.md` — operator runbook (deep)
|
|
114
|
+
- `QUICKSTART.md` — first-run steps
|
|
115
|
+
- `runtime-assumptions.md` — what the kit expects from the host
|
|
116
|
+
- `output-standards.md` — where outputs go
|
|
117
|
+
- `validation-checklist.md` — pre-flight checklist
|
|
118
|
+
- `templates/project.md` — session-memory template (seed for `.growthub-fork/project.md`)
|
|
119
|
+
- `templates/self-eval.md` — self-evaluation template
|
|
120
|
+
- `helpers/README.md` — helpers convention
|
|
121
|
+
- `skills/README.md` — sub-skills convention
|
|
122
|
+
- `workers/custom-workspace-operator/CLAUDE.md` — agent contract
|
|
@@ -9,13 +9,20 @@
|
|
|
9
9
|
"briefType": "custom-workspace-starter",
|
|
10
10
|
"capabilityType": "worker",
|
|
11
11
|
"executionMode": "export",
|
|
12
|
-
"activationModes": [
|
|
12
|
+
"activationModes": [
|
|
13
|
+
"export"
|
|
14
|
+
],
|
|
15
|
+
"export": {
|
|
16
|
+
"folderName": "growthub-custom-workspace-starter-v1",
|
|
17
|
+
"zipFileName": "growthub-custom-workspace-starter-v1.zip"
|
|
18
|
+
},
|
|
13
19
|
"publicExampleBrandPaths": [
|
|
14
20
|
"brands/growthub/brand-kit.md"
|
|
15
21
|
],
|
|
16
22
|
"requiredFrozenAssets": [
|
|
17
23
|
"QUICKSTART.md",
|
|
18
24
|
".env.example",
|
|
25
|
+
"SKILL.md",
|
|
19
26
|
"skills.md",
|
|
20
27
|
"output-standards.md",
|
|
21
28
|
"runtime-assumptions.md",
|
|
@@ -30,6 +37,10 @@
|
|
|
30
37
|
"templates/workspace-brief.md",
|
|
31
38
|
"templates/agent-contract.md",
|
|
32
39
|
"templates/deployment-plan.md",
|
|
40
|
+
"templates/project.md",
|
|
41
|
+
"templates/self-eval.md",
|
|
42
|
+
"helpers/README.md",
|
|
43
|
+
"skills/README.md",
|
|
33
44
|
"examples/workspace-sample.md",
|
|
34
45
|
"docs/starter-kit-overview.md",
|
|
35
46
|
"docs/fork-sync-integration.md",
|
|
@@ -42,6 +53,7 @@
|
|
|
42
53
|
"studio/src/App.jsx",
|
|
43
54
|
"studio/src/app.css",
|
|
44
55
|
"growthub-meta/README.md",
|
|
45
|
-
"growthub-meta/kit-standard.md"
|
|
56
|
+
"growthub-meta/kit-standard.md",
|
|
57
|
+
"docs/governed-workspace-primitives.md"
|
|
46
58
|
]
|
|
47
59
|
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
# Governed-Workspace Primitives — How Your Workspace Coordinates Agents at Enterprise Scale
|
|
2
|
+
|
|
3
|
+
Every workspace you create with Growthub Local — greenfield via `growthub starter init`, or imported via `growthub starter import-repo` / `import-skill`, or materialised from any worker kit via `growthub kit download` — inherits six architectural primitives that make the workspace **self-describing to agents**, **continuous across sessions**, and **auditable for enterprise operators**.
|
|
4
|
+
|
|
5
|
+
This doc explains **why** each primitive exists and **what it buys your team**. The protocol reference lives at [`docs/SKILLS_MCP_DISCOVERY.md`](../../../../docs/SKILLS_MCP_DISCOVERY.md) at the repo level; this file is written for the human and the agent who are about to operate inside the workspace you just exported.
|
|
6
|
+
|
|
7
|
+
> TL;DR — The primitives turn a folder of files into a **coordinated execution substrate** that Claude, Cursor, Codex, and custom harnesses all read the same way, that remembers what has happened across sessions, and that refuses to run away on a retry loop.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## The problem these primitives solve
|
|
12
|
+
|
|
13
|
+
Most agent stacks give you one of:
|
|
14
|
+
|
|
15
|
+
- a raw repo an agent can edit, with no governance;
|
|
16
|
+
- a prompt pack that works once and then decays;
|
|
17
|
+
- a hosted product that locks your customisation behind a vendor.
|
|
18
|
+
|
|
19
|
+
None of those scale to enterprise work where many agents, many sessions, and many operators act on the same substrate over time. You need a **workspace** that is:
|
|
20
|
+
|
|
21
|
+
- **discoverable** — agents know what's here without reading everything
|
|
22
|
+
- **continuous** — day 3 of a brief remembers day 1
|
|
23
|
+
- **bounded** — a broken generation doesn't loop forever
|
|
24
|
+
- **auditable** — every material change produces a receipt a human can review
|
|
25
|
+
- **composable** — heavy work spawns into its own lane without poisoning the parent context
|
|
26
|
+
- **safe** — side-effecting shell calls are reviewable files, not one-off prompts
|
|
27
|
+
|
|
28
|
+
The six primitives below each answer one of those needs, and the Growthub SDK (`@growthub/api-contract/skills`) is the capability-agnostic contract that lets every worker kit, every fork, and every agent harness read them the same way.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 1. `SKILL.md` — The Discovery Entry
|
|
33
|
+
|
|
34
|
+
**What it is.** A single file at the root of every kit with YAML frontmatter (`name`, `description`, `triggers`, `sessionMemory`, `selfEval`, `helpers`, `subSkills`, `mcpTools`) and a short markdown routing body.
|
|
35
|
+
|
|
36
|
+
**Why it exists.** Claude / Cursor / Codex agents scan the frontmatter at session start to catalog what's available — they do **not** load the full runbook (`skills.md`) until the user actually engages the skill. That cuts token cost on discovery and lets an agent know, within milliseconds, that your workspace has a Creative Strategist, a Hyperframes studio, and a Postiz social scheduler available — without reading a single line of the detailed operator runbook.
|
|
37
|
+
|
|
38
|
+
**What it buys you.**
|
|
39
|
+
- Agents route faster and more predictably across many kits.
|
|
40
|
+
- A new team member (or a fresh agent session) gets oriented without re-explaining the repo.
|
|
41
|
+
- Cross-agent compatibility is automatic — the same `SKILL.md` is read identically by Claude, Cursor, Codex, and custom harnesses.
|
|
42
|
+
|
|
43
|
+
**Enterprise use case.** A creative ops team with 30 worker kits across 6 brands can expose all 30 to every agent surface in the org without a custom integration per tool. The manifest *is* the integration.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 2. Symlinked Pointer — AGENTS.md as Single Source of Truth
|
|
48
|
+
|
|
49
|
+
**What it is.** The repo root has exactly one authoritative agent contract (`AGENTS.md`). `CLAUDE.md` and `.cursorrules` are plain-text pointers that say "see AGENTS.md". No duplicated rules, no drift.
|
|
50
|
+
|
|
51
|
+
**Why it exists.** Multi-agent environments drift the second a rule lives in two places. Someone updates the Cursor file and forgets the Claude file. The pointer pattern makes that impossible: there is only one file to edit.
|
|
52
|
+
|
|
53
|
+
**What it buys you.**
|
|
54
|
+
- Agent rules updated in one place, picked up by every surface on next session load.
|
|
55
|
+
- Audit is simpler — reviewers look at one file, not three.
|
|
56
|
+
- Cross-OS safety — pointer files work on Windows clones where symlinks don't.
|
|
57
|
+
|
|
58
|
+
**Enterprise use case.** Compliance or InfoSec can sign off on one agent-behaviour file; no more "but the Cursor rules differ from the Claude rules" gaps.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## 3. `.growthub-fork/project.md` — Session Memory
|
|
63
|
+
|
|
64
|
+
**What it is.** A human-readable, append-only journal seeded inside the fork's governed state directory (alongside `fork.json`, `policy.json`, `trace.jsonl`, optional `authority.json`). Written by the CLI at init/import time from the kit's `templates/project.md`.
|
|
65
|
+
|
|
66
|
+
**Why it exists.** The machine-readable `trace.jsonl` is perfect for systems to replay history, but it is lossy to humans. `project.md` is the narrative layer — "what we tried, what we approved, what we rejected, where we stopped" — so the next session (yours or another agent's) can resume without re-explaining.
|
|
67
|
+
|
|
68
|
+
**What it buys you.**
|
|
69
|
+
- Day 3 of a multi-day brief opens with yesterday's context already in scope.
|
|
70
|
+
- Approvals, rejections, and self-eval outcomes are preserved across handoffs.
|
|
71
|
+
- Operators who return to a workspace after a month see exactly where work paused.
|
|
72
|
+
|
|
73
|
+
**Enterprise use case.** Hand-offs between a contract creative team and an in-house team stop losing context. An agent in the in-house session reads the last 3 entries in `project.md` and picks up where the contractor left off.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 4. Self-Evaluation — Bounded Retry Loop
|
|
78
|
+
|
|
79
|
+
**What it is.** Every `SKILL.md` declares `selfEval.criteria[]` (what good looks like) and `selfEval.maxRetries` (default `3`). The agent runs `generate → apply → evaluate → record`, records each attempt to both `project.md` and `trace.jsonl`, and **must stop** when it hits the retry ceiling. The CLI primitive `recordSelfEval()` (`cli/src/skills/self-eval.ts`) is the single place that writes both surfaces.
|
|
80
|
+
|
|
81
|
+
**Why it exists.** Unbounded agent loops are the #1 source of cost overruns and silent failures. A governed self-eval contract guarantees every attempt is observable *and* gives the agent a principled stopping point.
|
|
82
|
+
|
|
83
|
+
**What it buys you.**
|
|
84
|
+
- Runaway jobs are impossible — the ceiling is enforced in the bookkeeping primitive.
|
|
85
|
+
- Every retry produces a receipt a human can read.
|
|
86
|
+
- The Fork Sync Agent's existing `preview → apply → trace` loop is reused, not reinvented — so operators who already trust Fork Sync get the same governance here.
|
|
87
|
+
|
|
88
|
+
**Enterprise use case.** A marketing ops team approves "at most 3 retries per creative unit" as policy. The SDK enforces it. Failed attempts surface in `project.md` immediately; nobody has to write a watchdog.
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## 5. Sub-Skills — Parallel Agent Lanes
|
|
93
|
+
|
|
94
|
+
**What it is.** A kit can declare nested skills under `<kit>/skills/<slug>/SKILL.md`. The parent skill spawns a sub-agent for a sub-skill when the work is (a) heavy enough to pollute the parent's context, or (b) narrow enough to benefit from a specialist lane. Both parent and sub-skill share the same `project.md` journal — so the parent reads the sub-agent's outcome on return without losing continuity.
|
|
95
|
+
|
|
96
|
+
**Why it exists.** Heavy work (frame extraction, Manim render, PIL compositing, audit passes) shouldn't share the parent's context budget. And specialist work is easier to govern as its own unit.
|
|
97
|
+
|
|
98
|
+
**What it buys you.**
|
|
99
|
+
- Lower token cost on the parent — the parent stays focused on the user-facing artifact.
|
|
100
|
+
- Clean audit trail — each sub-skill run appends to `project.md::subSkillRuns` with its own start/result.
|
|
101
|
+
- Reusable lanes — a sub-skill like `frame-analysis` can be shared across multiple parent kits.
|
|
102
|
+
|
|
103
|
+
**Enterprise use case.** Video / creative pipelines get the EDL-per-cut pattern as a sub-skill spawned by the parent brief skill, while non-video kits (CRM, email, SEO) stay on a simple flat loop — one SDK, both patterns, same governance.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## 6. `helpers/` — Safe Shell Tool Layer
|
|
108
|
+
|
|
109
|
+
**What it is.** Small, deterministic scripts (`helpers/<verb>.{sh,mjs,py}`) that agents invoke via one shell call instead of reconstructing a raw pipeline inline.
|
|
110
|
+
|
|
111
|
+
**Why it exists.** Raw shell in a prompt is fragile, unreviewable, and drifts every session. Moving the same snippets into reviewable files in the kit makes them (a) inspectable, (b) testable, (c) safer — and agents read *one line* ("run helpers/grep-hooks.sh") instead of reconstructing a 4-line pipeline.
|
|
112
|
+
|
|
113
|
+
**What it buys you.**
|
|
114
|
+
- Reliability — the same inputs always produce the same outputs.
|
|
115
|
+
- Reviewable by security — helpers live in the repo and diff cleanly.
|
|
116
|
+
- Lower cognitive load for agents — one invocation is easier than four.
|
|
117
|
+
|
|
118
|
+
**Enterprise use case.** A security review of your agent workflow doesn't require reading agent transcripts — it reads the `helpers/` folder once. That's the full list of side-effecting operations.
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## How the primitives compose: the export guarantee
|
|
123
|
+
|
|
124
|
+
Every kit export (`scripts/export-worker-kit.mjs --qa`) asserts all six primitives are present before shipping. The assertions are:
|
|
125
|
+
|
|
126
|
+
1. `SKILL.md` exists with well-formed frontmatter (`name`, `description`).
|
|
127
|
+
2. `templates/project.md` exists (session memory seed).
|
|
128
|
+
3. `templates/self-eval.md` exists (self-eval pattern).
|
|
129
|
+
4. `helpers/README.md` exists (safe-shell convention).
|
|
130
|
+
5. `skills/README.md` exists (sub-skill convention).
|
|
131
|
+
6. `kit.json.frozenAssetPaths` declares all five paths.
|
|
132
|
+
|
|
133
|
+
A kit that forgets any of these **cannot ship** — the export script refuses to produce a bundle. That guarantee is what makes the primitive layer trustworthy at scale: every workspace your team exports will have them, every time.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## How to operate inside this workspace
|
|
138
|
+
|
|
139
|
+
1. **At session start.** Read `.growthub-fork/project.md` (what happened last time) → `SKILL.md` (what's here) → `skills.md` (how to do the work).
|
|
140
|
+
2. **During work.** After every material change, write a dated bullet to `project.md`'s "Session log" AND call `appendKitForkTraceEvent` for the machine log. The CLI primitive `recordSelfEval` does both in one call — use it.
|
|
141
|
+
3. **On retry.** Every attempt goes to both surfaces. At `attempt === maxRetries`, park with a `needs_confirmation` note and stop.
|
|
142
|
+
4. **On heavy work.** Spawn a sub-skill from `skills/<slug>/` when context isolation helps. The sub-skill shares this fork's `project.md` — no separate journal.
|
|
143
|
+
5. **On side effects.** Use a helper from `helpers/`. If you're about to write raw shell for the third time, promote it to a helper first.
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## Command surface from inside the workspace
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
# Catalog every SKILL.md reachable from here (root + nested sub-skills)
|
|
151
|
+
growthub skills list [--json]
|
|
152
|
+
|
|
153
|
+
# Strict shape check — frontmatter + helper/sub-skill path existence
|
|
154
|
+
growthub skills validate
|
|
155
|
+
|
|
156
|
+
# Read the session memory for this fork
|
|
157
|
+
growthub skills session show [--body]
|
|
158
|
+
|
|
159
|
+
# (Re-)seed the session memory if it is missing
|
|
160
|
+
growthub skills session init [--kit <id>]
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## What this substrate is NOT
|
|
164
|
+
|
|
165
|
+
- **Not a sandbox.** It's a set of conventions. The filesystem is still yours to edit.
|
|
166
|
+
- **Not a lock-in.** Every primitive file is plain markdown or JSON — readable without Growthub tooling.
|
|
167
|
+
- **Not a replacement for policy.** `policy.json` and the Fork Sync Agent remain the safety envelope. The primitives ride on top.
|
|
168
|
+
- **Not capability-specific.** The SDK contract (`@growthub/api-contract/skills::SkillSelfEval`) is intentionally agnostic. Creative, code, content, CRM, social, audit — all specialise inside their own `skills.md` without changing the contract.
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Further reading
|
|
173
|
+
|
|
174
|
+
- [`../SKILL.md`](../SKILL.md) — the discovery entry for this kit
|
|
175
|
+
- [`../skills.md`](../skills.md) — the operator runbook (the deep how-to)
|
|
176
|
+
- [`../workers/custom-workspace-operator/CLAUDE.md`](../workers/custom-workspace-operator/CLAUDE.md) — the worker agent contract
|
|
177
|
+
- [`../templates/project.md`](../templates/project.md) — session-memory template
|
|
178
|
+
- [`../templates/self-eval.md`](../templates/self-eval.md) — self-evaluation template
|
|
179
|
+
- [`../helpers/README.md`](../helpers/README.md) — safe-shell convention
|
|
180
|
+
- [`../skills/README.md`](../skills/README.md) — sub-skill convention
|
|
181
|
+
- Repo-level protocol reference: `docs/SKILLS_MCP_DISCOVERY.md`
|
|
182
|
+
- SDK source of truth: `@growthub/api-contract/skills`
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# `helpers/` — safe shell tool layer (primitive #6)
|
|
2
|
+
|
|
3
|
+
A **helper** is a small, deterministic script an agent invokes via one shell call instead of reconstructing a raw pipeline inline. Helpers are:
|
|
4
|
+
|
|
5
|
+
- **Reviewable.** They live in the repo; diffs are inspectable.
|
|
6
|
+
- **Deterministic.** Pinned inputs and outputs; no hidden state.
|
|
7
|
+
- **Safer.** Agents call `bash helpers/<verb>.sh <args>` instead of re-assembling a 4-line `ffmpeg` / `grep` / `python` pipeline every session.
|
|
8
|
+
|
|
9
|
+
Helpers are **not** capability nodes, and they do not cross policy boundaries. Anything that requires auth, hosted execution, or network reach lives in the CLI (`growthub <verb>`) or in MCP routing — not here.
|
|
10
|
+
|
|
11
|
+
## Convention
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
helpers/
|
|
15
|
+
├── README.md # this file
|
|
16
|
+
├── <verb>.sh # short, single-purpose shell scripts
|
|
17
|
+
├── <verb>.mjs # optional: Node-based helper when shell is too weak
|
|
18
|
+
└── <verb>.py # optional: Python-based helper for CSV / data work
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Every helper ships with:
|
|
22
|
+
|
|
23
|
+
1. A one-line comment at the top: what it does + the one command that invokes it.
|
|
24
|
+
2. `set -euo pipefail` (or the language equivalent) — no silent failures.
|
|
25
|
+
3. A matching row in the parent `SKILL.md`'s `helpers[]` frontmatter array:
|
|
26
|
+
```yaml
|
|
27
|
+
helpers:
|
|
28
|
+
- path: helpers/grep-hooks.sh
|
|
29
|
+
description: 3-pass hook-library search against the frozen 500-hook CSV
|
|
30
|
+
```
|
|
31
|
+
4. A matching entry in `skills.md` pointing to the helper at the place the agent should invoke it (no duplicated shell bodies).
|
|
32
|
+
|
|
33
|
+
## When to promote an inline snippet into a helper
|
|
34
|
+
|
|
35
|
+
Promote when any of these are true:
|
|
36
|
+
|
|
37
|
+
- The same snippet appears in `skills.md` more than once.
|
|
38
|
+
- The snippet has fragile quoting or path interpolation.
|
|
39
|
+
- The snippet calls a side-effecting binary (`ffmpeg`, `git`, `gh`, `osascript`, `npm install`).
|
|
40
|
+
- Multiple sub-skills invoke the same snippet.
|
|
41
|
+
|
|
42
|
+
## Baseline ships zero helpers on purpose
|
|
43
|
+
|
|
44
|
+
The starter kit carries the convention only. Individual worker kits (creative-strategist, hyperframes, video-use, etc.) populate `helpers/` with concrete scripts — those are the reference implementations. This keeps the baseline surface minimal and predictable.
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
"frozenAssetPaths": [
|
|
26
26
|
"QUICKSTART.md",
|
|
27
27
|
".env.example",
|
|
28
|
+
"SKILL.md",
|
|
28
29
|
"skills.md",
|
|
29
30
|
"output-standards.md",
|
|
30
31
|
"runtime-assumptions.md",
|
|
@@ -39,6 +40,10 @@
|
|
|
39
40
|
"templates/workspace-brief.md",
|
|
40
41
|
"templates/agent-contract.md",
|
|
41
42
|
"templates/deployment-plan.md",
|
|
43
|
+
"templates/project.md",
|
|
44
|
+
"templates/self-eval.md",
|
|
45
|
+
"helpers/README.md",
|
|
46
|
+
"skills/README.md",
|
|
42
47
|
"examples/workspace-sample.md",
|
|
43
48
|
"docs/starter-kit-overview.md",
|
|
44
49
|
"docs/fork-sync-integration.md",
|
|
@@ -51,7 +56,8 @@
|
|
|
51
56
|
"studio/src/App.jsx",
|
|
52
57
|
"studio/src/app.css",
|
|
53
58
|
"growthub-meta/README.md",
|
|
54
|
-
"growthub-meta/kit-standard.md"
|
|
59
|
+
"growthub-meta/kit-standard.md",
|
|
60
|
+
"docs/governed-workspace-primitives.md"
|
|
55
61
|
],
|
|
56
62
|
"setupPaths": {
|
|
57
63
|
"quickstart": "QUICKSTART.md",
|
|
@@ -66,6 +72,7 @@
|
|
|
66
72
|
"kit.json",
|
|
67
73
|
".env.example",
|
|
68
74
|
"bundles/growthub-custom-workspace-starter-v1.json",
|
|
75
|
+
"SKILL.md",
|
|
69
76
|
"skills.md",
|
|
70
77
|
"workers/custom-workspace-operator/CLAUDE.md",
|
|
71
78
|
"brands/_template/brand-kit.md",
|
|
@@ -76,8 +83,15 @@
|
|
|
76
83
|
"output/README.md",
|
|
77
84
|
"studio",
|
|
78
85
|
"templates",
|
|
86
|
+
"templates/project.md",
|
|
87
|
+
"templates/self-eval.md",
|
|
88
|
+
"helpers",
|
|
89
|
+
"helpers/README.md",
|
|
90
|
+
"skills",
|
|
91
|
+
"skills/README.md",
|
|
79
92
|
"docs",
|
|
80
|
-
"growthub-meta"
|
|
93
|
+
"growthub-meta",
|
|
94
|
+
"docs/governed-workspace-primitives.md"
|
|
81
95
|
]
|
|
82
96
|
},
|
|
83
97
|
"bundles": [
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# `skills/` — nested sub-skill convention (primitive #5)
|
|
2
|
+
|
|
3
|
+
A **sub-skill** is a full `SKILL.md`-addressable lane that a parent skill can spawn as a parallel sub-agent. Use sub-skills when work is:
|
|
4
|
+
|
|
5
|
+
- **Heavy** — isolating the context keeps the parent lean (e.g. frame extraction, Manim render, PIL compositing).
|
|
6
|
+
- **Narrow** — a specialist lane is clearer than a generalist lane (e.g. hook-library lookup, scene-module assembly).
|
|
7
|
+
|
|
8
|
+
Sub-skills are **not** CLI commands and **not** capability nodes. They are local-to-the-kit Claude/Cursor/Codex skills, discovered by walking the tree.
|
|
9
|
+
|
|
10
|
+
## Convention
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
skills/
|
|
14
|
+
├── README.md # this file
|
|
15
|
+
└── <slug>/ # kebab-case; matches the SKILL.md `name`
|
|
16
|
+
├── SKILL.md # frontmatter + routing body (≤ 500 lines)
|
|
17
|
+
├── references/ # optional — long docs loaded on demand
|
|
18
|
+
├── templates/ # optional — reusable text/JS templates
|
|
19
|
+
└── scripts/ # optional — deterministic helpers
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Each sub-skill's `SKILL.md` follows the same shape as the parent (see `@growthub/api-contract/skills::SkillManifest`):
|
|
23
|
+
|
|
24
|
+
```yaml
|
|
25
|
+
---
|
|
26
|
+
name: <slug>
|
|
27
|
+
description: <trigger + capability, <=1024 chars>
|
|
28
|
+
triggers: [ ... ]
|
|
29
|
+
sessionMemory:
|
|
30
|
+
path: .growthub-fork/project.md # same fork journal — sub-skills do not branch the journal
|
|
31
|
+
selfEval:
|
|
32
|
+
criteria: [ ... ]
|
|
33
|
+
maxRetries: 3
|
|
34
|
+
traceTo: .growthub-fork/trace.jsonl
|
|
35
|
+
helpers: []
|
|
36
|
+
mcpTools: []
|
|
37
|
+
---
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Parallelism
|
|
41
|
+
|
|
42
|
+
A parent skill spawns a sub-skill sub-agent when (a) the sub-skill's work is fully scoped by its own criteria, and (b) the parent's next step does not depend on intermediate state from the sub-skill. Each sub-skill run appends a row to the fork's `project.md::subSkillRuns` frontmatter so the parent can read the outcome on return.
|
|
43
|
+
|
|
44
|
+
Example wiring:
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
creative-strategist-v1/
|
|
48
|
+
└── skills/
|
|
49
|
+
└── frame-analysis/
|
|
50
|
+
└── SKILL.md — parent delegates Step 2b (ffprobe + ffmpeg + frame read)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Baseline ships zero sub-skills on purpose
|
|
54
|
+
|
|
55
|
+
The starter kit carries the convention only. Individual worker kits populate `skills/` as they discover specialist lanes during operation.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
# .growthub-fork/project.md — session memory primitive (v1)
|
|
3
|
+
#
|
|
4
|
+
# This file is written by `growthub starter init` / `import-repo` / `import-skill`
|
|
5
|
+
# (and by `growthub skills session init` inside an existing fork). It is the
|
|
6
|
+
# human-readable continuity surface across agent sessions — it sits alongside
|
|
7
|
+
# the machine-readable `trace.jsonl` without duplicating it.
|
|
8
|
+
#
|
|
9
|
+
# Rules:
|
|
10
|
+
# - Append-only. Never delete a dated entry; cross it out instead.
|
|
11
|
+
# - Every material change to the fork gets a paragraph here AND a typed event
|
|
12
|
+
# in `.growthub-fork/trace.jsonl`. The two are kept in sync.
|
|
13
|
+
# - Approvals, rejections, and self-eval outcomes all land here.
|
|
14
|
+
#
|
|
15
|
+
# Replaceable tokens (seeded at init time):
|
|
16
|
+
# {{KIT_ID}} {{FORK_ID}} {{STARTED_AT}} {{SOURCE}} {{SOURCE_REF}}
|
|
17
|
+
|
|
18
|
+
kitId: "{{KIT_ID}}"
|
|
19
|
+
forkId: "{{FORK_ID}}"
|
|
20
|
+
startedAt: "{{STARTED_AT}}"
|
|
21
|
+
source: "{{SOURCE}}"
|
|
22
|
+
sourceRef: "{{SOURCE_REF}}"
|
|
23
|
+
skillManifestVersion: 1
|
|
24
|
+
approvals: []
|
|
25
|
+
selfEvalHistory: []
|
|
26
|
+
subSkillRuns: []
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
# Project journal — fork `{{FORK_ID}}`
|
|
30
|
+
|
|
31
|
+
Baseline primitive: `{{KIT_ID}}`. Seeded at `{{STARTED_AT}}` from `{{SOURCE}}` (`{{SOURCE_REF}}`).
|
|
32
|
+
|
|
33
|
+
This is your cross-session continuity surface. Return here at the start of every session; append to it at the end of every session and at every self-eval boundary.
|
|
34
|
+
|
|
35
|
+
## How to use this file
|
|
36
|
+
|
|
37
|
+
1. **Session start.** Read the last 3 entries in the "Session log" below + tail 20 events in `.growthub-fork/trace.jsonl`. State what you plan to do.
|
|
38
|
+
2. **Material change.** Record the change as a dated bullet in "Session log" (what, why, outcome). Simultaneously append a typed event to `trace.jsonl` via the Fork Sync Agent — never bypass.
|
|
39
|
+
3. **Approval boundary.** Add a row to `approvals` in the frontmatter above (include the operator's decision verbatim).
|
|
40
|
+
4. **Self-eval boundary.** Append to `selfEvalHistory` in the frontmatter: `attempt`, `criteria`, `outcome`, `notes`. Enforce `maxRetries: 3` from the active skill's frontmatter.
|
|
41
|
+
5. **Sub-skill spawn.** Append to `subSkillRuns` in the frontmatter: `subSkill`, `startedAt`, `result`.
|
|
42
|
+
|
|
43
|
+
## Session log
|
|
44
|
+
|
|
45
|
+
<!-- Append entries below, newest at the bottom. Format:
|
|
46
|
+
|
|
47
|
+
### {{YYYY-MM-DD HH:mm UTC}} · {{skill-slug}}
|
|
48
|
+
- **Plan.** What you intend to do this session.
|
|
49
|
+
- **Changes.** What you actually did (material changes only; each must correspond to a trace event).
|
|
50
|
+
- **Outcome.** Pass / fail / parked. Reference the self-eval criteria you checked.
|
|
51
|
+
- **Next.** What the next session should pick up.
|
|
52
|
+
|
|
53
|
+
-->
|
|
54
|
+
|
|
55
|
+
_No sessions recorded yet. This block is populated as the fork is operated._
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Self-evaluation template — v1 primitive (Growthub, capability-agnostic)
|
|
2
|
+
|
|
3
|
+
A skill's `selfEval` contract declares **what good looks like** (`criteria[]`) and **the retry ceiling** (`maxRetries`). The agent drives the loop; this file is the pattern the agent follows at every unit of work.
|
|
4
|
+
|
|
5
|
+
The contract is defined in `@growthub/api-contract/skills::SkillSelfEval` and is **capability-agnostic** — the same primitive applies to code edits, copy drafts, CRM rules, API payloads, asset renders, audit passes, and every other domain. The "unit of work" is the smallest reversible change the skill operates on; concrete boundaries are defined in the kit's own `skills.md` operator runbook, not here.
|
|
6
|
+
|
|
7
|
+
## Loop
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
for attempt in 1..maxRetries: # default maxRetries = 3
|
|
11
|
+
generate — produce a proposal (whatever the skill produces)
|
|
12
|
+
apply — materialise the proposal against the fork
|
|
13
|
+
self-evaluate — for each criterion in skill.selfEval.criteria:
|
|
14
|
+
check → pass / fail / needs-confirmation
|
|
15
|
+
record — append to project.md (human) + trace.jsonl (machine)
|
|
16
|
+
|
|
17
|
+
if all criteria pass: break
|
|
18
|
+
if attempt == maxRetries: park with needs_confirmation note. Stop.
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## What each attempt writes
|
|
22
|
+
|
|
23
|
+
### Human row — append to `.growthub-fork/project.md` "Session log"
|
|
24
|
+
|
|
25
|
+
```md
|
|
26
|
+
### 2026-04-23 18:40 UTC · <skill-slug>
|
|
27
|
+
- **Plan.** What you intend to do this unit of work.
|
|
28
|
+
- **Changes.** Material change applied (must correspond to a trace event).
|
|
29
|
+
- **Self-eval.** attempt 2/3 — criterion "<one of skill.selfEval.criteria>" ✗ (<note>). Retrying.
|
|
30
|
+
- **Outcome.** retry-pending / pass / parked.
|
|
31
|
+
- **Next.** What the next attempt (or next session) should pick up.
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Machine row — append to `.growthub-fork/trace.jsonl` (via `appendKitForkTraceEvent`)
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"ts": "2026-04-23T18:40:00.000Z",
|
|
39
|
+
"forkId": "<fork-id>",
|
|
40
|
+
"kitId": "<kit-id>",
|
|
41
|
+
"type": "self_eval_recorded",
|
|
42
|
+
"summary": "attempt 2/3 failed on <criterion>",
|
|
43
|
+
"detail": {
|
|
44
|
+
"skill": "<skill-slug>",
|
|
45
|
+
"attempt": 2,
|
|
46
|
+
"maxRetries": 3,
|
|
47
|
+
"criterion": "<one of skill.selfEval.criteria>",
|
|
48
|
+
"outcome": "fail",
|
|
49
|
+
"notes": "<short explanation>"
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Hard rules
|
|
55
|
+
|
|
56
|
+
1. **Never exceed `maxRetries`.** At the ceiling, park with a `needs_confirmation` note and stop. Do not loop forever.
|
|
57
|
+
2. **Record every attempt.** Even the first pass. Continuity depends on a complete journal.
|
|
58
|
+
3. **Keep `project.md` and `trace.jsonl` in sync.** One without the other is a protocol violation.
|
|
59
|
+
4. **Preserve prior entries.** Append-only. Never rewrite history.
|
|
60
|
+
|
|
61
|
+
## Bound the blast radius
|
|
62
|
+
|
|
63
|
+
Evaluate at the smallest unit of work the skill operates on, not only at the end of a multi-step run. The retry ceiling applies to that unit — so a bad attempt does not sink the whole job.
|
|
64
|
+
|
|
65
|
+
What counts as a "unit of work" is **kit-specific** and lives in that kit's `skills.md` operator runbook — not in this agnostic template. A kit picks its own smallest reversible boundary and documents it in `skills.md`; this template does not prescribe one.
|
|
66
|
+
|
|
67
|
+
The agnostic SDK (`@growthub/api-contract/skills::SkillSelfEval`) does not encode any domain-specific boundaries — it only carries `criteria[]`, `maxRetries`, and `traceTo`. See `SKILL.md::selfEval.criteria` in this kit for the concrete checks, and `skills.md` for the kit-specific unit of work.
|