@event4u/agent-config 1.19.0 → 1.21.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/.agent-src/commands/agent-handoff.md +14 -10
- package/.agent-src/commands/agents.md +1 -1
- package/.agent-src/commands/bug-fix.md +1 -1
- package/.agent-src/commands/bug-investigate.md +2 -2
- package/.agent-src/commands/chat-history/import.md +166 -0
- package/.agent-src/commands/chat-history/learn.md +178 -0
- package/.agent-src/commands/chat-history/show.md +17 -18
- package/.agent-src/commands/chat-history.md +26 -25
- package/.agent-src/commands/compress.md +12 -0
- package/.agent-src/commands/context/create.md +2 -2
- package/.agent-src/commands/context.md +1 -1
- package/.agent-src/commands/copilot-agents.md +1 -1
- package/.agent-src/commands/council/default.md +21 -12
- package/.agent-src/commands/council.md +1 -1
- package/.agent-src/commands/create-pr.md +28 -8
- package/.agent-src/commands/e2e-heal.md +1 -1
- package/.agent-src/commands/e2e-plan.md +1 -1
- package/.agent-src/commands/feature/dev.md +3 -3
- package/.agent-src/commands/feature.md +1 -1
- package/.agent-src/commands/fix/seeder.md +2 -2
- package/.agent-src/commands/fix.md +1 -1
- package/.agent-src/commands/jira-ticket.md +1 -1
- package/.agent-src/commands/judge.md +2 -2
- package/.agent-src/commands/memory.md +1 -1
- package/.agent-src/commands/mode.md +5 -5
- package/.agent-src/commands/module.md +1 -1
- package/.agent-src/commands/onboard.md +4 -4
- package/.agent-src/commands/optimize/augmentignore.md +1 -1
- package/.agent-src/commands/optimize-prompt.md +61 -0
- package/.agent-src/commands/optimize.md +1 -1
- package/.agent-src/commands/override.md +1 -1
- package/.agent-src/commands/review-changes.md +1 -1
- package/.agent-src/commands/review-routing.md +1 -1
- package/.agent-src/commands/roadmap.md +1 -1
- package/.agent-src/commands/set-cost-profile.md +3 -3
- package/.agent-src/commands/sync-agent-settings.md +2 -2
- package/.agent-src/commands/sync-gitignore.md +1 -1
- package/.agent-src/commands/tests/create.md +2 -2
- package/.agent-src/commands/tests.md +1 -1
- package/.agent-src/commands/threat-model.md +4 -4
- package/.agent-src/contexts/authority/commit-mechanics.md +14 -1
- package/.agent-src/contexts/authority/destructive-mechanics.md +14 -1
- package/.agent-src/contexts/authority/scope-mechanics.md +5 -0
- package/.agent-src/contexts/communication/rules-auto/guidelines-mechanics.md +76 -0
- package/.agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +76 -0
- package/.agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +4 -4
- package/.agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +98 -0
- package/.agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +93 -0
- package/.agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +125 -9
- package/.agent-src/contexts/execution/autonomy-mechanics.md +44 -0
- package/.agent-src/contexts/model-recommendations.md +2 -2
- package/.agent-src/contexts/override-system.md +1 -1
- package/.agent-src/personas/product-owner.md +2 -2
- package/.agent-src/personas/qa.md +1 -1
- package/.agent-src/rules/agent-authority.md +5 -6
- package/.agent-src/rules/agent-docs.md +11 -53
- package/.agent-src/rules/analysis-skill-routing.md +10 -40
- package/.agent-src/rules/architecture.md +6 -1
- package/.agent-src/rules/artifact-drafting-protocol.md +5 -0
- package/.agent-src/rules/artifact-engagement-recording.md +23 -59
- package/.agent-src/rules/ask-when-uncertain.md +24 -47
- package/.agent-src/rules/augment-portability.md +14 -62
- package/.agent-src/rules/augment-source-of-truth.md +10 -1
- package/.agent-src/rules/autonomous-execution.md +17 -98
- package/.agent-src/rules/capture-learnings.md +9 -80
- package/.agent-src/rules/cli-output-handling.md +12 -42
- package/.agent-src/rules/command-suggestion-policy.md +25 -73
- package/.agent-src/rules/commit-conventions.md +9 -58
- package/.agent-src/rules/commit-policy.md +16 -47
- package/.agent-src/rules/context-hygiene.md +5 -0
- package/.agent-src/rules/direct-answers.md +21 -42
- package/.agent-src/rules/docker-commands.md +11 -45
- package/.agent-src/rules/docs-sync.md +10 -56
- package/.agent-src/rules/downstream-changes.md +5 -0
- package/.agent-src/rules/e2e-testing.md +9 -44
- package/.agent-src/rules/guidelines.md +13 -75
- package/.agent-src/rules/improve-before-implement.md +10 -2
- package/.agent-src/rules/language-and-tone.md +35 -69
- package/.agent-src/rules/laravel-translations.md +11 -40
- package/.agent-src/rules/markdown-safe-codeblocks.md +4 -0
- package/.agent-src/rules/minimal-safe-diff.md +4 -0
- package/.agent-src/rules/missing-tool-handling.md +4 -0
- package/.agent-src/rules/model-recommendation.md +9 -61
- package/.agent-src/rules/no-attribution-footers.md +53 -0
- package/.agent-src/rules/no-cheap-questions.md +11 -27
- package/.agent-src/rules/no-council-references.md +76 -0
- package/.agent-src/rules/no-roadmap-references.md +8 -1
- package/.agent-src/rules/non-destructive-by-default.md +13 -43
- package/.agent-src/rules/onboarding-gate.md +9 -117
- package/.agent-src/rules/package-ci-checks.md +10 -37
- package/.agent-src/rules/php-coding.md +10 -55
- package/.agent-src/rules/preservation-guard.md +9 -0
- package/.agent-src/rules/review-routing-awareness.md +9 -97
- package/.agent-src/rules/reviewer-awareness.md +8 -83
- package/.agent-src/rules/roadmap-progress-sync.md +7 -170
- package/.agent-src/rules/role-mode-adherence.md +6 -2
- package/.agent-src/rules/rule-type-governance.md +8 -66
- package/.agent-src/rules/runtime-safety.md +5 -0
- package/.agent-src/rules/scope-control.md +17 -62
- package/.agent-src/rules/security-sensitive-stop.md +7 -1
- package/.agent-src/rules/size-enforcement.md +6 -1
- package/.agent-src/rules/skill-improvement-trigger.md +9 -49
- package/.agent-src/rules/skill-quality.md +7 -64
- package/.agent-src/rules/slash-command-routing-policy.md +11 -63
- package/.agent-src/rules/think-before-action.md +22 -87
- package/.agent-src/rules/token-efficiency.md +10 -74
- package/.agent-src/rules/token-optimizer-maintenance.md +68 -0
- package/.agent-src/rules/tool-safety.md +4 -0
- package/.agent-src/rules/ui-audit-gate.md +25 -61
- package/.agent-src/rules/upstream-proposal.md +9 -67
- package/.agent-src/rules/user-interaction.md +25 -95
- package/.agent-src/rules/verify-before-complete.md +1 -1
- package/.agent-src/skills/agent-docs-writing/SKILL.md +1 -1
- package/.agent-src/skills/ai-council/SKILL.md +69 -5
- package/.agent-src/skills/analysis-autonomous-mode/SKILL.md +1 -1
- package/.agent-src/skills/analysis-skill-router/SKILL.md +3 -3
- package/.agent-src/skills/artisan-commands/SKILL.md +2 -2
- package/.agent-src/skills/authz-review/SKILL.md +1 -1
- package/.agent-src/skills/aws-infrastructure/SKILL.md +5 -5
- package/.agent-src/skills/blast-radius-analyzer/SKILL.md +8 -8
- package/.agent-src/skills/bug-analyzer/SKILL.md +5 -5
- package/.agent-src/skills/code-refactoring/SKILL.md +4 -4
- package/.agent-src/skills/code-review/SKILL.md +2 -2
- package/.agent-src/skills/command-writing/SKILL.md +11 -0
- package/.agent-src/skills/composer-packages/SKILL.md +2 -2
- package/.agent-src/skills/context-authoring/SKILL.md +11 -0
- package/.agent-src/skills/context-document/SKILL.md +1 -1
- package/.agent-src/skills/copilot-agents-optimization/SKILL.md +23 -0
- package/.agent-src/skills/copilot-config/SKILL.md +1 -1
- package/.agent-src/skills/dcf-modeling/SKILL.md +89 -0
- package/.agent-src/skills/dependency-upgrade/SKILL.md +2 -2
- package/.agent-src/skills/devcontainer/SKILL.md +2 -2
- package/.agent-src/skills/developer-like-execution/SKILL.md +1 -1
- package/.agent-src/skills/docker/SKILL.md +1 -1
- package/.agent-src/skills/dto-creator/SKILL.md +1 -1
- package/.agent-src/skills/estimate-ticket/SKILL.md +2 -2
- package/.agent-src/skills/fe-design/SKILL.md +4 -4
- package/.agent-src/skills/feature-planning/SKILL.md +5 -5
- package/.agent-src/skills/funnel-analysis/SKILL.md +100 -0
- package/.agent-src/skills/laravel/SKILL.md +1 -1
- package/.agent-src/skills/laravel-notifications/SKILL.md +5 -5
- package/.agent-src/skills/laravel-pennant/SKILL.md +1 -1
- package/.agent-src/skills/laravel-pulse/SKILL.md +4 -4
- package/.agent-src/skills/laravel-reverb/SKILL.md +2 -2
- package/.agent-src/skills/laravel-scheduling/SKILL.md +1 -1
- package/.agent-src/skills/md-language-check/SKILL.md +1 -1
- package/.agent-src/skills/migration-creator/SKILL.md +7 -7
- package/.agent-src/skills/multi-tenancy/SKILL.md +8 -8
- package/.agent-src/skills/okr-tree-modeling/SKILL.md +93 -0
- package/.agent-src/skills/performance-analysis/SKILL.md +3 -3
- package/.agent-src/skills/pest-testing/SKILL.md +6 -6
- package/.agent-src/skills/php-service/SKILL.md +2 -2
- package/.agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +3 -3
- package/.agent-src/skills/project-analysis-react/SKILL.md +1 -1
- package/.agent-src/skills/project-analysis-symfony/SKILL.md +1 -1
- package/.agent-src/skills/project-analysis-zend-laminas/SKILL.md +2 -2
- package/.agent-src/skills/project-analyzer/SKILL.md +4 -4
- package/.agent-src/skills/prompt-optimizer/SKILL.md +108 -0
- package/.agent-src/skills/readme-reviewer/SKILL.md +1 -1
- package/.agent-src/skills/rice-prioritization/SKILL.md +100 -0
- package/.agent-src/skills/rule-writing/SKILL.md +33 -0
- package/.agent-src/skills/sentry-integration/SKILL.md +1 -1
- package/.agent-src/skills/skill-writing/SKILL.md +14 -0
- package/.agent-src/skills/subagent-orchestration/SKILL.md +34 -2
- package/.agent-src/skills/terraform/SKILL.md +2 -2
- package/.agent-src/skills/terragrunt/SKILL.md +8 -8
- package/.agent-src/skills/test-performance/SKILL.md +5 -5
- package/.agent-src/skills/threat-modeling/SKILL.md +2 -2
- package/.agent-src/skills/token-optimizer/SKILL.md +110 -0
- package/.agent-src/skills/unit-economics-modeling/SKILL.md +104 -0
- package/.agent-src/skills/universal-project-analysis/SKILL.md +1 -1
- package/.agent-src/skills/using-git-worktrees/SKILL.md +1 -0
- package/.agent-src/templates/AGENTS.md +1 -1
- package/.agent-src/templates/agent-settings.md +25 -41
- package/.agent-src/templates/contexts/tenant-boundaries.md +2 -2
- package/.agent-src/templates/contexts.md +1 -1
- package/.agent-src/templates/copilot-instructions.md +21 -0
- package/.agent-src/templates/copilot-review-instructions.md +76 -0
- package/.agent-src/templates/features.md +1 -1
- package/.agent-src/templates/rule.md +127 -0
- package/.agent-src/templates/scripts/work_engine/hook_bootstrap.py +7 -5
- package/.agent-src/templates/scripts/work_engine/hooks/__init__.py +0 -4
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/__init__.py +0 -4
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/_chat_history_base.py +7 -51
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_append.py +1 -2
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_halt_append.py +1 -2
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.py +2 -3
- package/.agent-src/templates/skill.md +30 -1
- package/.claude-plugin/marketplace.json +11 -4
- package/AGENTS.md +71 -3
- package/CHANGELOG.md +180 -3
- package/README.md +24 -23
- package/config/agent-settings.template.yml +63 -23
- package/config/gitignore-block.txt +11 -4
- package/docs/architecture.md +84 -3
- package/docs/catalog.md +23 -11
- package/docs/contracts/adr-chat-history-split.md +10 -1
- package/docs/contracts/agent-memory-contract.md +1 -1
- package/docs/contracts/command-clusters.md +1 -1
- package/docs/contracts/context-paths.md +2 -1
- package/docs/contracts/cross-wing-handoff.md +133 -0
- package/docs/contracts/file-ownership-matrix.json +678 -609
- package/docs/contracts/hook-architecture-v1.md +8 -1
- package/docs/contracts/iron-law-overrides.txt +25 -0
- package/docs/contracts/kernel-membership.md +273 -0
- package/docs/contracts/load-context-schema.md +26 -11
- package/docs/contracts/memory-visibility-v1.md +8 -24
- package/docs/contracts/pilot/agent-authority.md +24 -0
- package/docs/contracts/pilot/direct-answers.md +70 -0
- package/docs/contracts/pilot/language-and-tone.md +63 -0
- package/docs/contracts/rule-classification.md +170 -0
- package/docs/contracts/rule-router.md +153 -0
- package/docs/customization.md +18 -7
- package/docs/decisions/ADR-001-kernel-swap-deferred.md +109 -0
- package/docs/decisions/ADR-002-kernel-bucket-overrides.md +124 -0
- package/docs/decisions/ADR-rule-kernel-and-router.md +122 -0
- package/docs/getting-started.md +19 -27
- package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +1 -1
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +176 -0
- package/docs/guidelines/agent-infra/rule-type-governance.md +73 -0
- package/docs/guidelines/agent-infra/size-and-scope.md +13 -2
- package/docs/guidelines/agent-infra/skill-quality-checklist.md +119 -0
- package/docs/guidelines/augment-portability-patterns.md +68 -0
- package/docs/guidelines/php/php-coding-patterns.md +62 -0
- package/docs/hook-payload-capture.md +221 -0
- package/docs/migrations/commands-1.15.0.md +17 -12
- package/docs/skills-catalog.md +5 -4
- package/llms.txt +4 -3
- package/package.json +1 -1
- package/scripts/_p43_bodies.py +235 -0
- package/scripts/_p43_compress.py +118 -0
- package/scripts/_p4_migrate.py +199 -0
- package/scripts/_pilot_council_question.py +57 -0
- package/scripts/_pilot_measure.py +53 -0
- package/scripts/agent-config +1 -1
- package/scripts/ai_council/_default_prices.py +4 -4
- package/scripts/ai_council/clients.py +1 -1
- package/scripts/ai_council/modes.py +3 -4
- package/scripts/ai_council/pricing.py +10 -9
- package/scripts/ai_council/session.py +107 -5
- package/scripts/build_linear_digest.py +3 -5
- package/scripts/build_rule_trigger_matrix.py +1 -9
- package/scripts/chat_history.py +952 -596
- package/scripts/check_always_budget.py +39 -6
- package/scripts/check_compressed_paths.py +213 -0
- package/scripts/check_compression.py +15 -0
- package/scripts/check_context_paths.py +1 -0
- package/scripts/check_council_layout.py +105 -0
- package/scripts/check_council_references.py +145 -0
- package/scripts/check_portability.py +2 -0
- package/scripts/check_references.py +14 -2
- package/scripts/check_token_optimizer_freshness.py +131 -0
- package/scripts/compile_router.py +148 -0
- package/scripts/compress.py +219 -11
- package/scripts/council_cli.py +63 -9
- package/scripts/council_prune.py +81 -0
- package/scripts/count_token_optimizer_usage.sh +54 -0
- package/scripts/hook_manifest.yaml +33 -0
- package/scripts/hooks/augment-chat-history.sh +10 -0
- package/scripts/hooks/cowork-dispatcher.sh +98 -0
- package/scripts/hooks/dispatch_hook.py +35 -0
- package/scripts/hooks_status.py +12 -1
- package/scripts/install-hooks.sh +2 -2
- package/scripts/install.sh +81 -2
- package/scripts/iron_law_sha.py +98 -0
- package/scripts/lint_handoffs.py +214 -0
- package/scripts/lint_hook_manifest.py +2 -1
- package/scripts/lint_load_context.py +35 -5
- package/scripts/measure_rule_budget.py +314 -0
- package/scripts/prototype_lint_contradictions.py +150 -0
- package/scripts/redact_hook_capture.py +148 -0
- package/scripts/schemas/rule.schema.json +55 -6
- package/scripts/schemas/skill.schema.json +5 -0
- package/scripts/skill_linter.py +359 -7
- package/scripts/smoke_path_resolution.py +93 -0
- package/scripts/update_prices.py +3 -3
- package/scripts/validate_frontmatter.py +41 -1
- package/.agent-src/commands/chat-history/checkpoint.md +0 -126
- package/.agent-src/commands/chat-history/clear.md +0 -103
- package/.agent-src/commands/chat-history/resume.md +0 -183
- package/.agent-src/contexts/communication/rules-auto/artifact-engagement-recording-mechanics.md +0 -72
- package/.agent-src/contexts/communication/rules-auto/augment-portability-mechanics.md +0 -79
- package/.agent-src/contexts/communication/rules-auto/cli-output-handling-mechanics.md +0 -87
- package/.agent-src/contexts/communication/rules-auto/command-suggestion-policy-mechanics.md +0 -62
- package/.agent-src/contexts/communication/rules-auto/docs-sync-mechanics.md +0 -78
- package/.agent-src/contexts/communication/rules-auto/package-ci-checks-mechanics.md +0 -85
- package/.agent-src/contexts/communication/rules-auto/review-routing-awareness-mechanics.md +0 -65
- package/.agent-src/contexts/communication/rules-auto/roadmap-progress-sync-mechanics.md +0 -78
- package/.agent-src/contexts/communication/rules-auto/ui-audit-gate-mechanics.md +0 -53
- package/.agent-src/rules/chat-history-cadence.md +0 -143
- package/.agent-src/rules/chat-history-ownership.md +0 -124
- package/.agent-src/rules/chat-history-visibility.md +0 -97
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_heartbeat.py +0 -50
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_turn_check.py +0 -49
- package/scripts/check_phase_coupling.py +0 -148
- /package/{docs → .agent-src/contexts}/contracts/artifact-engagement-flow.md +0 -0
- /package/{docs → .agent-src/contexts}/contracts/command-suggestion-flow.md +0 -0
|
@@ -82,6 +82,29 @@ no silent edits, max two rounds.
|
|
|
82
82
|
* No numbered procedures — if you need steps, it is a skill.
|
|
83
83
|
* Link out to guidelines for deep reference instead of inlining them.
|
|
84
84
|
|
|
85
|
+
### 3b. Path conventions in frontmatter and body — load-bearing
|
|
86
|
+
|
|
87
|
+
Three different surfaces, three different rules. Mixing them up will
|
|
88
|
+
either fail the schema (`python3 scripts/validate_frontmatter.py`) or
|
|
89
|
+
fail `python3 scripts/lint_load_context.py`. Canonical reference:
|
|
90
|
+
[`templates/rule.md`](../../templates/rule.md) § Path conventions and
|
|
91
|
+
[`docs/contracts/load-context-schema.md`](../../../docs/contracts/load-context-schema.md).
|
|
92
|
+
|
|
93
|
+
| Field | Form | Example |
|
|
94
|
+
|---|---|---|
|
|
95
|
+
| `load_context:` / `load_context_eager:` | **Logical name** rooted at the source — never `.agent-src.uncompressed/` | `contexts/execution/verification-mechanics.md` |
|
|
96
|
+
| `triggers[].path_prefix:` | **Literal match pattern** the host evaluates against the file the agent is editing — not rewritten | `.agent-src.uncompressed/skills/` (source-of-truth rules) or `agents/`, `app/`, `.augment/` |
|
|
97
|
+
| Body links to guidelines / contracts | **Verbatim relative form** — `../../docs/...` works in any markdown viewer; rewriter handles depth | `[guideline](../../docs/guidelines/<group>/<name>.md)` |
|
|
98
|
+
|
|
99
|
+
The compress-time rewriter (`scripts/compress.py::_rewrite_paths`) is
|
|
100
|
+
idempotent and depth-aware — it resolves logical names and body links
|
|
101
|
+
to the deployment-correct relative path at compress time, leaving
|
|
102
|
+
`path_prefix:` literally as written. The schema regex
|
|
103
|
+
(`scripts/schemas/rule.schema.json`) and `scripts/lint_load_context.py`
|
|
104
|
+
both reject the `.agent-src.uncompressed/` prefix in `load_context:` /
|
|
105
|
+
`load_context_eager:` with an error pointing at the canonical logical
|
|
106
|
+
name.
|
|
107
|
+
|
|
85
108
|
### 4. Enforce the size budget
|
|
86
109
|
|
|
87
110
|
Normative source: [`size-enforcement`](../../rules/size-enforcement.md) +
|
|
@@ -113,9 +136,19 @@ type: "auto" # or "always"
|
|
|
113
136
|
description: "Trigger-shaped sentence — domain + symptoms — soft cap 200 chars"
|
|
114
137
|
alwaysApply: false # true only if type: always
|
|
115
138
|
source: package # or project for consumer-local rules
|
|
139
|
+
load_context: # logical names only — `contexts/<area>/<file>.md`
|
|
140
|
+
- contexts/execution/verification-mechanics.md
|
|
141
|
+
triggers: # path_prefix is literal, not rewritten
|
|
142
|
+
- path_prefix: ".agent-src.uncompressed/rules/"
|
|
143
|
+
routes_to:
|
|
144
|
+
- "skill:related-skill"
|
|
116
145
|
---
|
|
117
146
|
```
|
|
118
147
|
|
|
148
|
+
See § 3b above for the load-bearing distinction between `load_context:`
|
|
149
|
+
(logical, rewritten), `triggers[].path_prefix:` (literal, verbatim),
|
|
150
|
+
and body links (relative `../../docs/...`, rewriter handles depth).
|
|
151
|
+
|
|
119
152
|
## Output format
|
|
120
153
|
|
|
121
154
|
1. Complete rule file at `.agent-src.uncompressed/rules/{name}.md`
|
|
@@ -152,7 +152,7 @@ search_events(organizationSlug='my-org', naturalLanguageQuery='count of database
|
|
|
152
152
|
|
|
153
153
|
## Gotcha
|
|
154
154
|
|
|
155
|
-
- Sentry groups errors by stacktrace — different root
|
|
155
|
+
- Sentry groups errors by stacktrace — different root → may appear as the same issue. Check multiple events.
|
|
156
156
|
- The model tends to analyze only the latest event — check the "Events" tab for patterns across time.
|
|
157
157
|
- Don't use Sentry MCP tools for simple lookups — use the Sentry web UI link instead (saves tokens).
|
|
158
158
|
|
|
@@ -258,6 +258,20 @@ Example:
|
|
|
258
258
|
* Validation must be concrete
|
|
259
259
|
* One skill = one job
|
|
260
260
|
|
|
261
|
+
### Cross-references and paths
|
|
262
|
+
|
|
263
|
+
* Body links to guidelines / contracts use the verbatim relative form
|
|
264
|
+
(`../../docs/guidelines/<group>/<name>.md`,
|
|
265
|
+
`../../docs/contracts/<name>.md`). The compress-time rewriter
|
|
266
|
+
resolves them to depth-aware single-up form — do not pre-rewrite in
|
|
267
|
+
source.
|
|
268
|
+
* Skills do **not** declare `load_context:` / `load_context_eager:`;
|
|
269
|
+
those frontmatter keys are rule-only. If a skill needs to point at a
|
|
270
|
+
context, link to it inline (`[context-name](../../contexts/<area>/<file>.md)`).
|
|
271
|
+
* Never write `.agent-src.uncompressed/` in any skill body link or
|
|
272
|
+
example — it ships into `.augment/skills/` and breaks consumer
|
|
273
|
+
resolution. See `rule-writing` § 3b for the canonical reference.
|
|
274
|
+
|
|
261
275
|
### Execution metadata (optional)
|
|
262
276
|
|
|
263
277
|
Skills may declare an `execution` frontmatter block (`type`, `handler`,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: subagent-orchestration
|
|
3
|
-
description: "Use when orchestrating implementer/judge subagents —
|
|
3
|
+
description: "Use when orchestrating implementer/judge subagents — six modes (do-and-judge, do-in-steps, do-in-parallel, do-competitively, judge-with-debate, do-in-worktrees) — models from .agent-settings.yml."
|
|
4
4
|
source: package
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -44,7 +44,7 @@ judge is a fresh pair of eyes. If `.agent-settings.yml` resolves to
|
|
|
44
44
|
identical implementer and judge models, surface the mismatch before
|
|
45
45
|
running — do not silently continue.
|
|
46
46
|
|
|
47
|
-
## The
|
|
47
|
+
## The six modes
|
|
48
48
|
|
|
49
49
|
Each mode has a decision row: when to use, when not, and the expected
|
|
50
50
|
model pairing. Defaults come from
|
|
@@ -100,6 +100,38 @@ migration, public API) where a single judge is too easy to fool.
|
|
|
100
100
|
|---|---|---|
|
|
101
101
|
| Security, data integrity, public API change | Routine internal refactor | judges = same tier (2x); meta-judge = one tier up |
|
|
102
102
|
|
|
103
|
+
### 6. do-in-worktrees
|
|
104
|
+
|
|
105
|
+
Cross-wing or cross-skill chain executed across isolated git
|
|
106
|
+
worktrees — each handoff in the chain runs in its own worktree, so
|
|
107
|
+
the workspace state of one step never leaks into the next. Operationalizes
|
|
108
|
+
the worktree boundary clause in
|
|
109
|
+
[`docs/contracts/cross-wing-handoff.md`](../../../docs/contracts/cross-wing-handoff.md)
|
|
110
|
+
§ 3. State-machine layer only — worktree creation/destruction lives
|
|
111
|
+
in [`using-git-worktrees`](../using-git-worktrees/SKILL.md) and
|
|
112
|
+
[`finishing-a-development-branch`](../finishing-a-development-branch/SKILL.md).
|
|
113
|
+
|
|
114
|
+
| When to use | When not | Model pairing |
|
|
115
|
+
|---|---|---|
|
|
116
|
+
| Multi-step cross-wing chain (≥2 senior skills, each ≥30 min) where one step's open files / branch state would confuse the next | Fast iteration where each step < 30 min — worktree overhead exceeds isolation benefit | implementers = same tier per step; judge = one tier up at chain end |
|
|
117
|
+
|
|
118
|
+
**Handoff shape:** initiator-skill emits the typed output declared in
|
|
119
|
+
its `## Output` block → control passes to delegated-skill in a fresh
|
|
120
|
+
worktree → delegated-skill consumes the input shape declared in its
|
|
121
|
+
`## Input` (or `## When the agent should load this`) block. The
|
|
122
|
+
handoff is auditable; `lint_handoffs.py` validates the chain.
|
|
123
|
+
|
|
124
|
+
**Example chain (W3 launch):** `positioning` (worktree A) →
|
|
125
|
+
`messaging-architecture` (worktree B, consumes positioning's
|
|
126
|
+
`positioning-statement.md`) → `gtm-launch` (worktree C, consumes
|
|
127
|
+
both prior artifacts). Each worktree carries one branch; the chain
|
|
128
|
+
end produces a single integration PR.
|
|
129
|
+
|
|
130
|
+
**Anti-pattern:** do not use for fast iteration loops where each
|
|
131
|
+
step is under ~30 minutes. The branch-creation, context-switch, and
|
|
132
|
+
worktree-cleanup cost dominates. Stick with mode 1 (do-and-judge)
|
|
133
|
+
or mode 2 (do-in-steps) for those.
|
|
134
|
+
|
|
103
135
|
## Procedure
|
|
104
136
|
|
|
105
137
|
### 1. Inspect the task shape
|
|
@@ -106,8 +106,8 @@ Used for workers and schedulers:
|
|
|
106
106
|
|
|
107
107
|
### GitHub OIDC IAM role
|
|
108
108
|
|
|
109
|
-
Each
|
|
110
|
-
- OIDC trust policy (scoped to repo +
|
|
109
|
+
Each env has a GitHub IAM role with:
|
|
110
|
+
- OIDC trust policy (scoped to repo + env)
|
|
111
111
|
- Policies for ECR push/pull, ECS deployment, Secrets Manager read, CloudWatch logs
|
|
112
112
|
|
|
113
113
|
## Output format
|
|
@@ -12,7 +12,7 @@ Use this skill when working with Terragrunt configurations (`.hcl` files), manag
|
|
|
12
12
|
|
|
13
13
|
## Procedure: Write Terragrunt config
|
|
14
14
|
|
|
15
|
-
1. Read the `root.hcl` in the target
|
|
15
|
+
1. Read the `root.hcl` in the target env (`environments/pro/root.hcl` or `environments/sta/root.hcl`).
|
|
16
16
|
2. Check existing `terragrunt.hcl` files in sibling directories for patterns.
|
|
17
17
|
3. Read the target module's `variables.tf` to understand required inputs.
|
|
18
18
|
|
|
@@ -36,7 +36,7 @@ environments/
|
|
|
36
36
|
|
|
37
37
|
## Root configuration (`root.hcl`)
|
|
38
38
|
|
|
39
|
-
The root HCL defines shared settings for all modules in an
|
|
39
|
+
The root HCL defines shared settings for all modules in an env:
|
|
40
40
|
|
|
41
41
|
### Environment variables
|
|
42
42
|
|
|
@@ -50,9 +50,9 @@ locals {
|
|
|
50
50
|
}
|
|
51
51
|
```
|
|
52
52
|
|
|
53
|
-
- `.env.yaml` — committed, shared
|
|
53
|
+
- `.env.yaml` — committed, shared env config
|
|
54
54
|
- `.env.local.yaml` — gitignored, local overrides (AWS profiles, etc.)
|
|
55
|
-
- Real
|
|
55
|
+
- Real env variables take precedence over file values.
|
|
56
56
|
|
|
57
57
|
### Remote state
|
|
58
58
|
|
|
@@ -101,7 +101,7 @@ Each module directory contains a `terragrunt.hcl` that:
|
|
|
101
101
|
1. **Loads module-specific variables** from a YAML file
|
|
102
102
|
2. **Includes the root config** for backend and providers
|
|
103
103
|
3. **Points to the Terraform module source**
|
|
104
|
-
4. **Declares
|
|
104
|
+
4. **Declares deps** on other modules
|
|
105
105
|
5. **Passes inputs** by merging dependency outputs with local variables
|
|
106
106
|
|
|
107
107
|
### Example pattern
|
|
@@ -183,19 +183,19 @@ devbox run d # terragrunt destroy
|
|
|
183
183
|
|
|
184
184
|
## Output format
|
|
185
185
|
|
|
186
|
-
1. Terragrunt HCL files with DRY
|
|
186
|
+
1. Terragrunt HCL files with DRY env configuration
|
|
187
187
|
2. Dependency graph and remote state references
|
|
188
188
|
|
|
189
189
|
## Auto-trigger keywords
|
|
190
190
|
|
|
191
191
|
- Terragrunt
|
|
192
|
-
- multi-
|
|
192
|
+
- multi-env
|
|
193
193
|
- DRY config
|
|
194
194
|
- remote state
|
|
195
195
|
|
|
196
196
|
## Gotcha
|
|
197
197
|
|
|
198
|
-
- Terragrunt `dependency` blocks create implicit ordering — circular
|
|
198
|
+
- Terragrunt `dependency` blocks create implicit ordering — circular deps cause cryptic errors.
|
|
199
199
|
- Don't duplicate Terraform variables in terragrunt.hcl — use `inputs` to pass them through.
|
|
200
200
|
- The model tends to hardcode values that should come from `include` blocks — use DRY patterns.
|
|
201
201
|
|
|
@@ -15,7 +15,7 @@ Use this skill when:
|
|
|
15
15
|
- Parallel testing needs optimization
|
|
16
16
|
- Seeders need performance analysis
|
|
17
17
|
- CI pipeline test jobs need to be faster
|
|
18
|
-
- Investigating flaky tests caused by
|
|
18
|
+
- Investigating flaky tests caused by DB state
|
|
19
19
|
|
|
20
20
|
## Procedure: Analyze test performance
|
|
21
21
|
|
|
@@ -55,7 +55,7 @@ Check these areas in order of typical impact:
|
|
|
55
55
|
| **Migration count** | How many CREATE TABLE statements? | High if >20 |
|
|
56
56
|
| **Schema dump** | Is `database/schema/` used? | High if missing |
|
|
57
57
|
| **Seeder INSERT method** | Individual `save()` vs bulk insert? | Medium |
|
|
58
|
-
| **Truncation** | Per-seeder truncate vs centralized? | Low (but
|
|
58
|
+
| **Truncation** | Per-seeder truncate vs centralized? | Low (but → correctness issues) |
|
|
59
59
|
| **Connection discovery** | Dynamic `getPdo()` probing? | Low |
|
|
60
60
|
| **Parallel worker setup** | Does each worker re-migrate? | High |
|
|
61
61
|
|
|
@@ -76,7 +76,7 @@ php artisan schema:dump --database=api_database
|
|
|
76
76
|
#### B. Template DB Cloning (high ROI for parallel tests)
|
|
77
77
|
|
|
78
78
|
Instead of each parallel worker running migrate+seed independently:
|
|
79
|
-
1. Prepare ONE template
|
|
79
|
+
1. Prepare ONE template DB (migrate + seed)
|
|
80
80
|
2. Clone template for each worker via mysqldump
|
|
81
81
|
|
|
82
82
|
```bash
|
|
@@ -92,7 +92,7 @@ mysqldump template_db | mysql worker_db_test_1
|
|
|
92
92
|
|
|
93
93
|
#### C. Skip Migrate+Seed Flag (high ROI for local dev)
|
|
94
94
|
|
|
95
|
-
Add a config flag to skip
|
|
95
|
+
Add a config flag to skip DB setup when DB is already prepared:
|
|
96
96
|
|
|
97
97
|
```php
|
|
98
98
|
// config/testing.php
|
|
@@ -158,7 +158,7 @@ Replace dynamic `getPdo()` probing with explicit config:
|
|
|
158
158
|
## Gotcha
|
|
159
159
|
|
|
160
160
|
- Don't use RefreshDatabase when DatabaseTransactions suffices — full refresh is 10x slower.
|
|
161
|
-
- The model forgets that parallel tests share the
|
|
161
|
+
- The model forgets that parallel tests share the DB — use unique identifiers in test data.
|
|
162
162
|
- Seeder optimization has the highest ROI — a 2s seeder running 100 times = 200s wasted.
|
|
163
163
|
- Don't add indexes to test databases just for test performance — the real fix is better test design.
|
|
164
164
|
|
|
@@ -6,7 +6,7 @@ source: package
|
|
|
6
6
|
|
|
7
7
|
# threat-modeling
|
|
8
8
|
|
|
9
|
-
> You are a reviewer specialized in **pre-
|
|
9
|
+
> You are a reviewer specialized in **pre-impl threat analysis**.
|
|
10
10
|
> Your only job is to produce a compact threat model for a planned change —
|
|
11
11
|
> actors, assets, trust boundaries, abuse cases, and the minimum controls
|
|
12
12
|
> the implementer must add. You do **not** audit existing code end-to-end,
|
|
@@ -186,4 +186,4 @@ run tests**.
|
|
|
186
186
|
- [`authz-review`](../authz-review/SKILL.md),
|
|
187
187
|
[`data-exposure-review`](../data-exposure-review/SKILL.md),
|
|
188
188
|
[`security`](../security/SKILL.md),
|
|
189
|
-
[`security-audit`](../security-audit/SKILL.md) — sibling review /
|
|
189
|
+
[`security-audit`](../security-audit/SKILL.md) — sibling review / impl skills.
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: token-optimizer
|
|
3
|
+
description: "Use BEFORE any verbose CLI run, large file read, doc conversion, or near-context handoff — single decision tree keyed by intent that cites the canonical token-saving asset. Consult before the action."
|
|
4
|
+
source: package
|
|
5
|
+
execution:
|
|
6
|
+
type: assisted
|
|
7
|
+
handler: shell
|
|
8
|
+
allowed_tools: []
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Token Optimizer — decision tree + catalog
|
|
12
|
+
|
|
13
|
+
## Iron Law
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
CONSULT THIS SKILL BEFORE THE ACTION, NOT AFTER.
|
|
17
|
+
THE TREE NAMES THE CANONICAL ASSET — DO NOT RESTATE OR DUPLICATE IT.
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## When to use
|
|
21
|
+
|
|
22
|
+
Proactively, BEFORE you:
|
|
23
|
+
|
|
24
|
+
- Run a verbose CLI command (tests, linters, build, git log, large `grep`)
|
|
25
|
+
- Read or paste a large document, log, or tool dump
|
|
26
|
+
- Repeat the same tool call across many files / records
|
|
27
|
+
- Approach the context-window limit and need to hand off
|
|
28
|
+
- Make a cost-aware decision (which model, which budget, when to stop)
|
|
29
|
+
|
|
30
|
+
Reactively when output already burned tokens — record the lesson, do
|
|
31
|
+
not re-explore. Cite the leaf, move on.
|
|
32
|
+
|
|
33
|
+
## Procedure
|
|
34
|
+
|
|
35
|
+
1. **Classify intent** — match the situation to one branch of the tree below.
|
|
36
|
+
2. **Cite the leaf** — name the canonical asset (rule, skill, or upstream link).
|
|
37
|
+
3. **Apply** — execute the cited asset's contract; do NOT inline its content.
|
|
38
|
+
4. **Verify** — output respects the cited Iron Law (redirect, wrap, batch, etc.).
|
|
39
|
+
|
|
40
|
+
### Decision tree
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
INTENT
|
|
44
|
+
├── Verbose CLI output incoming
|
|
45
|
+
│ → cite [cli-output-handling](../../rules/cli-output-handling.md)
|
|
46
|
+
│ (Iron Law: redirect / tail / grep / wrap)
|
|
47
|
+
│ → cite [rtk-output-filtering](../rtk-output-filtering/SKILL.md)
|
|
48
|
+
│ (rtk wrapper, 60-90% savings on tests/linters/git)
|
|
49
|
+
│
|
|
50
|
+
├── Large document or paste (PDF, DOCX, HTML, transcript)
|
|
51
|
+
│ → cite markitdown (upstream: https://github.com/microsoft/markitdown)
|
|
52
|
+
│ Convert FIRST, then read the markdown — never paste raw binary.
|
|
53
|
+
│
|
|
54
|
+
├── Repeated tool-call across N targets
|
|
55
|
+
│ → cite [token-efficiency](../../rules/token-efficiency.md)
|
|
56
|
+
│ (batch, parallelize, prune; one tool call > many)
|
|
57
|
+
│
|
|
58
|
+
├── Near context limit, work not finished
|
|
59
|
+
│ → cite [agent-handoff](../../../.claude/skills/agent-handoff/SKILL.md)
|
|
60
|
+
│ (structured handoff envelope; resume in fresh chat)
|
|
61
|
+
│
|
|
62
|
+
└── Cost-aware decision (model pick, budget, stop-criterion)
|
|
63
|
+
→ cite /cost:report (when shipped) — until then, fall back to
|
|
64
|
+
[token-efficiency](../../rules/token-efficiency.md) and
|
|
65
|
+
[direct-answers § Brevity by Default](../../rules/direct-answers.md)
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Catalog
|
|
69
|
+
|
|
70
|
+
| Asset | Path | Trigger keywords | What it does |
|
|
71
|
+
|---|---|---|---|
|
|
72
|
+
| `cli-output-handling` | `.agent-src.uncompressed/rules/cli-output-handling.md` | `verbose`, `tail`, `grep`, `CLI` | Wrap-tail-grep contract for any verbose command |
|
|
73
|
+
| `rtk-output-filtering` | `.agent-src.uncompressed/skills/rtk-output-filtering/SKILL.md` | `rtk`, `verbose`, `filter`, `wrap` | Project-local rtk filters; wrapper command |
|
|
74
|
+
| `token-efficiency` | `.agent-src.uncompressed/rules/token-efficiency.md` | `redirect`, `verbose`, `concise`, `tool` | Batch + parallelize tool calls; brevity floor |
|
|
75
|
+
| `agent-handoff` | `.claude/skills/agent-handoff/SKILL.md` | `handoff`, `fresh`, `chat`, `context` | Context envelope for fresh-chat continuation |
|
|
76
|
+
| `direct-answers` | `.agent-src.uncompressed/rules/direct-answers.md` | `brevity`, `flattery`, `severity`, `tiered` | Iron-Law brevity floor (kernel) |
|
|
77
|
+
| `markitdown` | upstream: github.com/microsoft/markitdown | `PDF`, `DOCX`, `HTML`, `convert` | Document → markdown converter (authoritative-link only) |
|
|
78
|
+
| `/cost:report` | TBD — `road-to-ruflo-adoption.md § P1.2` | `cost`, `model spend`, `budget` | Per-session cost telemetry (planned) |
|
|
79
|
+
|
|
80
|
+
## Output format
|
|
81
|
+
|
|
82
|
+
1. Name the cited asset by its leaf id (e.g. `cli-output-handling`, `rtk-output-filtering`).
|
|
83
|
+
2. State the Iron Law in one line; do NOT inline the asset's body.
|
|
84
|
+
3. If multiple branches match, cite all relevant leaves (no merge, no rewrite).
|
|
85
|
+
4. End with the action you take next, citing the asset that authorizes it.
|
|
86
|
+
|
|
87
|
+
## Gotcha
|
|
88
|
+
|
|
89
|
+
- Catalog rows live and die with their target asset. If you edit a
|
|
90
|
+
cited asset's trigger keywords or scope, update the matching row in
|
|
91
|
+
this skill in the same commit (enforced by
|
|
92
|
+
[`token-optimizer-maintenance`](../../rules/token-optimizer-maintenance.md)
|
|
93
|
+
rule + `scripts/check_token_optimizer_freshness.py` CI gate).
|
|
94
|
+
- Tree must stay scannable (≤ 50 lines incl. labels). Catalog rows
|
|
95
|
+
carry the long form.
|
|
96
|
+
- Authoritative-link assets (`rtk` upstream, `markitdown` upstream,
|
|
97
|
+
pricing constants) are never copied — always linked.
|
|
98
|
+
|
|
99
|
+
## Do NOT
|
|
100
|
+
|
|
101
|
+
- Do NOT inline content from a cited asset. If the leaf is "rtk does X",
|
|
102
|
+
the agent reads `rtk-output-filtering`. Duplication = drift = stale.
|
|
103
|
+
- Do NOT replace any rule. The rules carry the Iron Laws; this skill
|
|
104
|
+
carries the lookup index.
|
|
105
|
+
- Do NOT define new policies — every leaf must cite an existing rule,
|
|
106
|
+
skill, or upstream asset.
|
|
107
|
+
- Do NOT consult this skill AFTER tokens were already burned — record
|
|
108
|
+
the lesson and move on.
|
|
109
|
+
|
|
110
|
+
<!-- TELEMETRY: consulted=[uncomment + ISO timestamp on each consult] context=[CLI|doc|repeat|handoff|cost] -->
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: unit-economics-modeling
|
|
3
|
+
description: "Use when modeling CAC, LTV, gross-margin payback, or contribution margin per customer — for SaaS, marketplace, or transactional businesses."
|
|
4
|
+
status: active
|
|
5
|
+
tier: senior
|
|
6
|
+
source: package
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# unit-economics-modeling
|
|
10
|
+
|
|
11
|
+
## When to use
|
|
12
|
+
|
|
13
|
+
- A board ask: "is this business unit-economic?" — needs CAC / LTV / payback, not vibes.
|
|
14
|
+
- A new channel is scaling and the question is whether the CAC payback period is sustainable.
|
|
15
|
+
- A pricing or packaging change needs to be tested against contribution margin per cohort.
|
|
16
|
+
|
|
17
|
+
Do NOT use for full-business intrinsic-value modeling, OKR setting, funnel-stage diagnosis, or backlog ranking (see Related Skills).
|
|
18
|
+
|
|
19
|
+
## Procedure
|
|
20
|
+
|
|
21
|
+
### Step 0: Inspect
|
|
22
|
+
|
|
23
|
+
1. Confirm the business shape — SaaS / marketplace / transactional. The three canonical cases differ in **revenue recognition** and **churn definition**, not in arithmetic.
|
|
24
|
+
2. Confirm a fully-loaded CAC is computable: paid spend + sales comp + content/SEO allocation + tooling. Marketing-spend-only CAC is a vanity metric.
|
|
25
|
+
|
|
26
|
+
### Step 1: Compute CAC per channel
|
|
27
|
+
|
|
28
|
+
1. CAC = `(fully-loaded acquisition spend in window) / (new paying customers acquired in same window)`. Match window to sales-cycle length, not calendar quarter.
|
|
29
|
+
2. Compute by channel **and** blended. Blended-only hides the channel that is breaking the average.
|
|
30
|
+
3. Anti-pattern: counting trial signups as customers. Customer = first paid charge cleared.
|
|
31
|
+
|
|
32
|
+
### Step 2: Compute gross margin
|
|
33
|
+
|
|
34
|
+
1. Gross margin = `(revenue − COGS) / revenue`. COGS includes hosting, payment fees, third-party APIs the customer's usage drives, and direct customer-success cost.
|
|
35
|
+
2. Gross margin must be **per dollar of revenue**, not per customer. Per-customer gross margin is contribution margin (Step 3).
|
|
36
|
+
3. SaaS healthy band: 70–85%. Marketplace: 15–40%. Transactional: 5–25%. Outside these — the business is mislabelled or the COGS allocation is wrong.
|
|
37
|
+
|
|
38
|
+
### Step 3: Compute LTV
|
|
39
|
+
|
|
40
|
+
1. Pick the canonical formula for the case:
|
|
41
|
+
- **SaaS:** `LTV = ARPA × gross_margin / monthly_churn_rate`. Use net-dollar churn for self-serve, gross logo churn for high-touch.
|
|
42
|
+
- **Marketplace:** `LTV = take_rate × GMV_per_user × retention_curve_AUC` over 24 months. Steady-state extrapolation is dishonest below 24 months of cohort data.
|
|
43
|
+
- **Transactional:** `LTV = avg_order_value × gross_margin × purchases_per_year × avg_lifetime_years`.
|
|
44
|
+
2. Cap implied lifetime at 5 years for any business with < 3 years of cohort history. Anything longer is a fairy tale.
|
|
45
|
+
3. State the formula used inline. Do not let the reader infer.
|
|
46
|
+
|
|
47
|
+
### Step 4: Compute payback and ratio
|
|
48
|
+
|
|
49
|
+
1. **CAC payback** (months) = `CAC / (ARPA × gross_margin)` for SaaS; analogue for marketplace and transactional. Healthy SaaS: ≤ 12 months.
|
|
50
|
+
2. **LTV / CAC ratio**: target ≥ 3.0. Below 1.5 is acquisition-loss territory; above 5.0 means under-investment in growth (or bad LTV math).
|
|
51
|
+
3. Both numbers, not one. Payback drives capital efficiency; ratio drives long-run economics.
|
|
52
|
+
|
|
53
|
+
### Step 5: Cohort the answer
|
|
54
|
+
|
|
55
|
+
1. Run Steps 1–4 by signup-quarter cohort. Trends matter more than the point estimate.
|
|
56
|
+
2. If LTV/CAC is improving but payback is lengthening, you are buying retention with discounting — flag.
|
|
57
|
+
3. If both deteriorate, the channel mix has shifted to a worse channel — segment by channel to find the leak.
|
|
58
|
+
|
|
59
|
+
### Step 6: Validate
|
|
60
|
+
|
|
61
|
+
1. Sanity-check LTV against revenue retention. If implied LTV > 8× annual revenue per customer with monthly churn > 2%, the math is wrong.
|
|
62
|
+
2. Sanity-check CAC against fully-loaded P&L. If channel CACs sum to less than total acquisition spend, allocations are missing.
|
|
63
|
+
|
|
64
|
+
## Gotcha
|
|
65
|
+
|
|
66
|
+
- Marketing-spend-only CAC is the most common deception. Sales comp, BDR salaries, content production, and tooling all belong in fully-loaded CAC.
|
|
67
|
+
- Net-dollar retention > 100% does not justify ignoring logo churn — they answer different questions.
|
|
68
|
+
- ARPA averaged across plan tiers hides churn concentrated in one tier. Compute per tier when tiers differ in price by more than 2×.
|
|
69
|
+
- Payback period using contribution margin (post variable-cost) is honest; payback using gross revenue is the kind of math VCs see in pitch decks and discount on sight.
|
|
70
|
+
|
|
71
|
+
## Do NOT
|
|
72
|
+
|
|
73
|
+
- Do NOT extrapolate LTV beyond observable cohort data without saying so explicitly.
|
|
74
|
+
- Do NOT mix freemium activation rates with paid CAC; they live in different universes.
|
|
75
|
+
- Do NOT report a single LTV/CAC for a business with multiple distinct customer segments — segment first.
|
|
76
|
+
|
|
77
|
+
## Related Skills
|
|
78
|
+
|
|
79
|
+
**WHEN to use this**
|
|
80
|
+
|
|
81
|
+
- The question is per-customer economics (CAC, LTV, payback, contribution margin).
|
|
82
|
+
- The decision is whether to scale a channel or pricing tier.
|
|
83
|
+
|
|
84
|
+
**WHEN NOT to use this**
|
|
85
|
+
|
|
86
|
+
- Whole-business intrinsic value with terminal value — route to [`dcf-modeling`](../dcf-modeling/SKILL.md).
|
|
87
|
+
- Diagnosing where conversion drops — route to [`funnel-analysis`](../funnel-analysis/SKILL.md).
|
|
88
|
+
- Ranking competing initiatives — route to [`rice-prioritization`](../rice-prioritization/SKILL.md).
|
|
89
|
+
- Setting team objectives that move these metrics — route to [`okr-tree-modeling`](../okr-tree-modeling/SKILL.md).
|
|
90
|
+
|
|
91
|
+
## When the agent should load this
|
|
92
|
+
|
|
93
|
+
- "What's our LTV / CAC?"
|
|
94
|
+
- "Is this channel paying back fast enough?"
|
|
95
|
+
- "Compute unit economics for this pricing tier."
|
|
96
|
+
- "Are we unit-economic at this CAC?"
|
|
97
|
+
- "Cohort our payback period."
|
|
98
|
+
|
|
99
|
+
## Output
|
|
100
|
+
|
|
101
|
+
1. **`unit-econ-table.md`** — table per channel and blended: CAC · ARPA · gross margin · payback months · LTV · LTV/CAC. With cohort columns (last 4 quarters).
|
|
102
|
+
2. **`assumptions.md`** — formula chosen (SaaS / marketplace / transactional), churn definition, COGS allocation method, lifetime cap. One bullet per choice.
|
|
103
|
+
3. **`cohort-trend.md`** — trend chart (ASCII or markdown table) of CAC, payback, LTV/CAC over the last 4–8 cohorts. Annotate channel-mix shifts.
|
|
104
|
+
4. **`sanity-checks.md`** — explicit cross-checks (LTV vs annual revenue, channel CAC sum vs P&L). Flag any that fail with a one-line investigation pointer.
|
|
@@ -71,7 +71,7 @@ Goal: understand structure, identify major components, detect investigation path
|
|
|
71
71
|
### Investigation mode
|
|
72
72
|
|
|
73
73
|
Use when there is a concrete issue inside a large or unclear system.
|
|
74
|
-
Goal: isolate the affected area, route into root-cause analysis, verify likely
|
|
74
|
+
Goal: isolate the affected area, route into root-cause analysis, verify likely → with evidence.
|
|
75
75
|
|
|
76
76
|
### Optimization mode
|
|
77
77
|
|
|
@@ -15,6 +15,7 @@ source: package
|
|
|
15
15
|
* Experimenting with a refactor that may be thrown away — a throwaway
|
|
16
16
|
worktree is cheaper than a throwaway commit
|
|
17
17
|
* A long-running build or test suite is busy in the current worktree
|
|
18
|
+
* `subagent-orchestration` mode 6 (`do-in-worktrees`) was selected for a cross-wing chain — this skill is the executor that creates the per-step isolated worktrees the chain expects
|
|
18
19
|
|
|
19
20
|
Do NOT use when:
|
|
20
21
|
|