@event4u/agent-config 2.6.1 → 2.8.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 +1 -0
- package/.agent-src/commands/agent-status.md +1 -0
- package/.agent-src/commands/agents/audit.md +1 -0
- package/.agent-src/commands/agents/init.md +1 -0
- package/.agent-src/commands/agents/optimize.md +1 -0
- package/.agent-src/commands/agents.md +1 -0
- package/.agent-src/commands/analyze-reference-repo.md +1 -0
- package/.agent-src/commands/bug-fix.md +1 -0
- package/.agent-src/commands/bug-investigate.md +1 -0
- package/.agent-src/commands/challenge-me/vision.md +1 -0
- package/.agent-src/commands/challenge-me/with-docs.md +1 -0
- package/.agent-src/commands/challenge-me.md +1 -0
- package/.agent-src/commands/chat-history/import.md +1 -0
- package/.agent-src/commands/chat-history/learn.md +1 -0
- package/.agent-src/commands/chat-history/show.md +1 -0
- package/.agent-src/commands/chat-history.md +1 -0
- package/.agent-src/commands/check-current-md.md +1 -0
- package/.agent-src/commands/commit/in-chunks.md +1 -0
- package/.agent-src/commands/commit.md +1 -0
- package/.agent-src/commands/compress.md +1 -0
- package/.agent-src/commands/context/create.md +1 -0
- package/.agent-src/commands/context/refactor.md +1 -0
- package/.agent-src/commands/context.md +1 -0
- package/.agent-src/commands/cost-report.md +1 -0
- package/.agent-src/commands/council/default.md +1 -0
- package/.agent-src/commands/council/design.md +1 -0
- package/.agent-src/commands/council/optimize.md +1 -0
- package/.agent-src/commands/council/pr.md +1 -0
- package/.agent-src/commands/council.md +1 -0
- package/.agent-src/commands/create-pr/description-only.md +1 -0
- package/.agent-src/commands/create-pr.md +1 -0
- package/.agent-src/commands/e2e-heal.md +1 -0
- package/.agent-src/commands/e2e-plan.md +1 -0
- package/.agent-src/commands/estimate-ticket.md +1 -0
- package/.agent-src/commands/feature/dev.md +1 -0
- package/.agent-src/commands/feature/explore.md +1 -0
- package/.agent-src/commands/feature/plan.md +1 -0
- package/.agent-src/commands/feature/refactor.md +1 -0
- package/.agent-src/commands/feature/roadmap.md +1 -0
- package/.agent-src/commands/feature.md +1 -0
- package/.agent-src/commands/fix/ci.md +1 -0
- package/.agent-src/commands/fix/portability.md +1 -0
- package/.agent-src/commands/fix/pr-bot-comments.md +1 -0
- package/.agent-src/commands/fix/pr-comments.md +1 -0
- package/.agent-src/commands/fix/pr-developer-comments.md +1 -0
- package/.agent-src/commands/fix/refs.md +1 -0
- package/.agent-src/commands/fix/seeder.md +1 -0
- package/.agent-src/commands/fix.md +1 -0
- package/.agent-src/commands/grill-me.md +1 -0
- package/.agent-src/commands/implement-ticket.md +1 -0
- package/.agent-src/commands/jira-ticket.md +1 -0
- package/.agent-src/commands/judge/on-diff.md +1 -0
- package/.agent-src/commands/judge/solo.md +1 -0
- package/.agent-src/commands/judge/steps.md +1 -0
- package/.agent-src/commands/judge.md +1 -0
- package/.agent-src/commands/memory/add.md +1 -0
- package/.agent-src/commands/memory/load.md +1 -0
- package/.agent-src/commands/memory/mine-session.md +1 -0
- package/.agent-src/commands/memory/promote.md +1 -0
- package/.agent-src/commands/memory/propose.md +1 -0
- package/.agent-src/commands/memory.md +1 -0
- package/.agent-src/commands/mode.md +1 -0
- package/.agent-src/commands/module/create.md +1 -0
- package/.agent-src/commands/module/explore.md +1 -0
- package/.agent-src/commands/module.md +1 -0
- package/.agent-src/commands/onboard.md +1 -0
- package/.agent-src/commands/optimize/agents-dir.md +1 -0
- package/.agent-src/commands/optimize/augmentignore.md +1 -0
- package/.agent-src/commands/optimize/rtk.md +1 -0
- package/.agent-src/commands/optimize/skills.md +1 -0
- package/.agent-src/commands/optimize-prompt.md +1 -0
- package/.agent-src/commands/optimize.md +1 -0
- package/.agent-src/commands/orchestrate.md +1 -0
- package/.agent-src/commands/override/create.md +1 -0
- package/.agent-src/commands/override/manage.md +1 -0
- package/.agent-src/commands/override.md +1 -0
- package/.agent-src/commands/package-reset.md +1 -0
- package/.agent-src/commands/package-test.md +1 -0
- package/.agent-src/commands/prepare-for-review.md +1 -0
- package/.agent-src/commands/project-analyze.md +1 -0
- package/.agent-src/commands/project-health.md +1 -0
- package/.agent-src/commands/quality-fix.md +1 -0
- package/.agent-src/commands/refine-ticket.md +1 -0
- package/.agent-src/commands/research/deep.md +1 -0
- package/.agent-src/commands/research/report.md +1 -0
- package/.agent-src/commands/research.md +1 -0
- package/.agent-src/commands/review-changes.md +1 -0
- package/.agent-src/commands/review-routing.md +1 -0
- package/.agent-src/commands/roadmap/ai-council.md +1 -0
- package/.agent-src/commands/roadmap/create.md +1 -0
- package/.agent-src/commands/roadmap/process-full.md +1 -0
- package/.agent-src/commands/roadmap/process-phase.md +1 -0
- package/.agent-src/commands/roadmap/process-step.md +1 -0
- package/.agent-src/commands/roadmap.md +1 -0
- package/.agent-src/commands/rule-compliance-audit.md +1 -0
- package/.agent-src/commands/set-cost-profile.md +1 -0
- package/.agent-src/commands/sync-agent-settings.md +1 -0
- package/.agent-src/commands/sync-gitignore/fix.md +1 -0
- package/.agent-src/commands/sync-gitignore.md +1 -0
- package/.agent-src/commands/tests/create.md +1 -0
- package/.agent-src/commands/tests/execute.md +1 -0
- package/.agent-src/commands/tests.md +1 -0
- package/.agent-src/commands/threat-model.md +1 -0
- package/.agent-src/commands/update-form-request-messages.md +1 -0
- package/.agent-src/commands/upstream-contribute.md +1 -0
- package/.agent-src/commands/work.md +1 -0
- package/.agent-src/personas/cmo.md +122 -0
- package/.agent-src/personas/customer-success-lead.md +126 -0
- package/.agent-src/personas/growth-pm.md +134 -0
- package/.agent-src/personas/revops.md +125 -0
- package/.agent-src/skills/activation-design/SKILL.md +160 -0
- package/.agent-src/skills/churn-prevention/SKILL.md +156 -0
- package/.agent-src/skills/content-funnel-design/SKILL.md +170 -0
- package/.agent-src/skills/deal-qualification-meddic/SKILL.md +165 -0
- package/.agent-src/skills/editorial-calendar/SKILL.md +161 -0
- package/.agent-src/skills/expansion-playbook/SKILL.md +171 -0
- package/.agent-src/skills/forecast-accuracy/SKILL.md +157 -0
- package/.agent-src/skills/fundraising-narrative/SKILL.md +189 -0
- package/.agent-src/skills/funnel-analysis/SKILL.md +26 -2
- package/.agent-src/skills/gtm-launch/SKILL.md +165 -0
- package/.agent-src/skills/messaging-architecture/SKILL.md +184 -0
- package/.agent-src/skills/onboarding-design/SKILL.md +158 -0
- package/.agent-src/skills/pipeline-strategy/SKILL.md +159 -0
- package/.agent-src/skills/positioning-strategy/SKILL.md +177 -0
- package/.agent-src/skills/retention-loops/SKILL.md +161 -0
- package/.agent-src/skills/subagent-orchestration/SKILL.md +1 -1
- package/.agent-src/skills/voice-and-tone-design/SKILL.md +163 -0
- package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/.claude-plugin/marketplace.json +17 -2
- package/AGENTS.md +4 -4
- package/CHANGELOG.md +60 -2257
- package/README.md +59 -33
- package/docs/architecture/augment-projection.md +70 -0
- package/docs/architecture/claude-bundle.md +77 -0
- package/docs/architecture/compression.md +67 -0
- package/docs/architecture/multi-tool-projection.md +72 -0
- package/docs/architecture.md +32 -55
- package/docs/archive/CHANGELOG-pre-2.2.0.md +2138 -0
- package/docs/archive/CHANGELOG-pre-2.7.0.md +185 -0
- package/docs/catalog.md +19 -3
- package/docs/contracts/CHANGELOG-conventions.md +121 -0
- package/docs/contracts/adr-gtm-context-spine.md +115 -0
- package/docs/contracts/command-surface-tiers.md +145 -0
- package/docs/contracts/context-spine.md +50 -12
- package/docs/contracts/cross-wing-handoff.md +3 -3
- package/docs/contracts/mcp-cloud-scope.md +193 -21
- package/docs/contracts/mcp-phase-1-scope.md +1 -0
- package/docs/contracts/persona-schema.md +20 -3
- package/docs/decisions/ADR-007-agent-discovery-scopes.md +67 -0
- package/docs/guidelines/gtm-handoff.md +114 -0
- package/docs/setup/enterprise-and-offline.md +201 -0
- package/docs/setup/per-ide/augment.md +37 -25
- package/package.json +1 -1
- package/scripts/_bootstrap_tier_frontmatter.py +151 -0
- package/scripts/agent-config +146 -83
- package/scripts/hermetic-install.sh +235 -0
- package/scripts/install.py +8 -1
- package/scripts/lint_command_tiers.py +115 -0
- package/scripts/lint_context_spine_usage.py +4 -1
- package/scripts/mcp_server/__init__.py +5 -0
- package/scripts/schemas/command.schema.json +5 -0
- package/scripts/schemas/persona.schema.json +5 -0
- package/scripts/schemas/skill.schema.json +2 -2
- package/scripts/skill_linter.py +177 -3
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# GTM Handoff
|
|
2
|
+
|
|
3
|
+
Wing-3-specific prose for the three load-bearing senior-skill chains
|
|
4
|
+
in the GTM + Growth cluster. The mechanical contract — initiator →
|
|
5
|
+
delegated(input) → output-artifact, lint rules, worktree boundary —
|
|
6
|
+
lives in [`docs/contracts/cross-wing-handoff.md`](../contracts/cross-wing-handoff.md).
|
|
7
|
+
The cross-wing routing prose (when to hand off at all, L4 / C8
|
|
8
|
+
boundary, decision tree) lives in
|
|
9
|
+
[`docs/guidelines/cross-role-handoff.md`](cross-role-handoff.md).
|
|
10
|
+
This guideline covers **what crosses each Wing-3 boundary**, **what
|
|
11
|
+
the typed artifact looks like**, and **who owns the failure mode
|
|
12
|
+
when the chain breaks**.
|
|
13
|
+
|
|
14
|
+
Cycle / dangling / tier-mismatch enforcement is not duplicated here —
|
|
15
|
+
`task lint-handoffs` (per cross-wing-handoff § 4) is the mechanical
|
|
16
|
+
gate.
|
|
17
|
+
|
|
18
|
+
## Chain 1 — brand → channel
|
|
19
|
+
|
|
20
|
+
Five-step chain that turns a category point-of-view into a shipped
|
|
21
|
+
funnel of channel artifacts. CMO cluster owns every step.
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
positioning-strategy (H1)
|
|
25
|
+
→ messaging-architecture (H2)
|
|
26
|
+
→ gtm-launch (H3)
|
|
27
|
+
→ editorial-calendar (H4)
|
|
28
|
+
→ content-funnel-design (H5)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
| Step | Hands off when | Typed artifact crossing the boundary | Failure-mode owner |
|
|
32
|
+
|---|---|---|---|
|
|
33
|
+
| H1 → H2 | Category framing + opposable-positioning audit locked. | `positioning-statement.md` — "we are X for Y, not Z" + point-of-view paragraph + opposable-positioning matrix. | H1 owns drift: if H2 cannot derive proofs from the statement, H1's POV is too soft. |
|
|
34
|
+
| H2 → H3 | Primary message + supporting proofs + audience-by-message matrix locked. | `messaging-stack.md` — primary message, three supporting proofs, audience-message matrix, narrative beats. | H2 owns drift: if H3's wave-by-wave narrative drifts, the proofs were the wrong shape. |
|
|
35
|
+
| H3 → H4 | Launch sequencing (alpha → beta → GA) + audience-wave logic locked; engineering-readiness signals attached. | `launch-plan.md` — wave list, narrative beats per wave, dependency map, go / no-go signals. | H3 owns drift: missing engineering-readiness signal = H3 shipped a plan that cannot land. |
|
|
36
|
+
| H4 → H5 | Cadence cognition (evergreen vs campaign vs reactive) + beat-mapping locked. | `editorial-calendar.md` — cadence per audience, beat-to-asset map, content-debt ledger. | H4 owns drift: a calendar that does not map beats to funnel stages cannot be designed against. |
|
|
37
|
+
| H5 self-closes | Funnel-stage-to-content-shape mapping + conversion-pathway design locked. | `content-funnel.md` — per-stage asset shapes, conversion pathways, leading indicators. | H5 owns drift: any stage without a content shape is a broken funnel hand-back to H4. |
|
|
38
|
+
|
|
39
|
+
H5 also **composes** `funnel-analysis` (H14, Chain 3) — the funnel
|
|
40
|
+
diagnostic feeds the conversion-pathway design without H5 absorbing
|
|
41
|
+
funnel-diagnostic cognition.
|
|
42
|
+
|
|
43
|
+
## Chain 2 — discovery → pipeline
|
|
44
|
+
|
|
45
|
+
Five-step chain that turns customer research into a forecast-able
|
|
46
|
+
pipeline. Spans the Discovery → RevOps boundary inside Wing 3 and
|
|
47
|
+
hands the forecast call back to the Wing-4 finance-partner.
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
customer-research (L1, shipped)
|
|
51
|
+
→ ideal-customer-profile artifact
|
|
52
|
+
→ pipeline-strategy (H8)
|
|
53
|
+
→ deal-qualification-meddic (H9)
|
|
54
|
+
→ forecast-accuracy (H10) → forecasting (Wing-4 O2)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
| Step | Hands off when | Typed artifact crossing the boundary | Failure-mode owner |
|
|
58
|
+
|---|---|---|---|
|
|
59
|
+
| `customer-research` → H8 | Switch-event interviews + JTBD framing complete; ICP synthesized from verbatims. | `icp.md` — segment definition, switch events, JTBD frame, anti-ICP. | `customer-research` owns drift: an ICP without anti-ICP boundaries leaks into H8 stage definitions. |
|
|
60
|
+
| H8 → H9 | Stage definitions + conversion-rate targets + coverage reasoning locked. | `pipeline-shape.md` — stage list, per-stage conversion target, coverage ratio, leak map. | H8 owns drift: stages H9 cannot disqualify against = H8 stage definitions were not orthogonal. |
|
|
61
|
+
| H9 → H10 | MEDDIC qualification rubric + disqualification heuristics locked. | `qualification-rubric.md` — MEDDIC fields per stage, disqualification triggers, champion-test. | H9 owns drift: forecasts that ignore disqualification heuristics inflate; H9 owns the rubric. |
|
|
62
|
+
| H10 → Wing-4 O2 | Forecast call constructed (commit / best-case / pipeline) against the `forecast-construction-shape` ADR. | `forecast-band.json` — commit value, best-case value, pipeline value, confidence band, retro signature. | **Interface contract owned by O2** (per cross-wing-handoff § 5 / W4 chain): if the ADR drifts, O2 breaks the contract, not H10. |
|
|
63
|
+
|
|
64
|
+
H10's parallel-development rule (starts after O2-interface ≥ 100 %,
|
|
65
|
+
runs in parallel with O2 implementation) is recorded in the roadmap
|
|
66
|
+
H10 entry and the contract — not duplicated here.
|
|
67
|
+
|
|
68
|
+
## Chain 3 — funnel → retention
|
|
69
|
+
|
|
70
|
+
Six-step chain that turns funnel diagnostics into a retention and
|
|
71
|
+
expansion system. Growth PM cluster owns the first three steps,
|
|
72
|
+
Customer Success cluster owns the last three; the H15 → H12 boundary
|
|
73
|
+
crosses the cluster line inside Wing 3.
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
funnel-analysis (H14)
|
|
77
|
+
→ activation-design (H16)
|
|
78
|
+
→ onboarding-design (H11)
|
|
79
|
+
→ retention-loops (H15)
|
|
80
|
+
→ churn-prevention (H12)
|
|
81
|
+
→ expansion-playbook (H13)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
| Step | Hands off when | Typed artifact crossing the boundary | Failure-mode owner |
|
|
85
|
+
|---|---|---|---|
|
|
86
|
+
| H14 → H16 | Funnel-stage diagnostics + leaky-bucket-vs-growth-loop classification + leading-indicator selection locked. | `funnel-diagnostic.md` — per-stage drop-off, loop classification, leading indicators, cohort behavior. | H14 owns drift: an unselected leading indicator leaves H16 without an aha-moment signal. |
|
|
87
|
+
| H16 → H11 | Aha-moment definition + activation-event selection + activation-funnel construction locked. | `activation-spec.md` — aha-moment, activation event, activation-funnel stages, leading-vs-lagging indicators. | H16 owns drift: an activation event H11 cannot instrument is the wrong event. |
|
|
88
|
+
| H11 → H15 | Time-to-first-value reasoning + milestone design + friction audit locked. | `onboarding-flow.md` — milestone list, time-to-value target, friction-audit findings, drop-off diagnosis. | H11 owns drift: milestones without retention hooks force H15 to re-derive habit cognition. |
|
|
89
|
+
| H15 → H12 | Habit-formation reasoning + trigger-action-reward design + loop classification locked. | `retention-loop.md` — trigger / action / reward triple, loop classification, network-vs-single-user signal. | H15 owns drift: a loop that does not surface a health signal leaves H12 without an early warning. |
|
|
90
|
+
| H12 → H13 | Health-score signal design + churn-cause classification + early-warning loop locked. | `churn-signals.md` — health-score schema, churn-cause buckets, early-warning thresholds. | H12 owns drift: a health signal H13 cannot read against expansion triggers blocks NRR cognition. Also feeds **back to Wing-4 forecasting** per the cross-skill map. |
|
|
91
|
+
| H13 self-closes | Account-expansion patterns + upsell-vs-cross-sell reasoning + NRR cognition locked. | `expansion-playbook.md` — expansion patterns, trigger signals, NRR levers. | H13 owns drift: expansion triggers that ignore churn signals double-count growth. |
|
|
92
|
+
|
|
93
|
+
## Reading the failure-mode column
|
|
94
|
+
|
|
95
|
+
The column answers one question: **when a downstream skill cannot
|
|
96
|
+
do its job, which upstream skill rewrites its artifact?** The owner
|
|
97
|
+
is the **upstream** skill, not the consumer — drift is always a
|
|
98
|
+
producer-side fix. This mirrors the W4 / W3 forecasting chain in
|
|
99
|
+
the contract (O2 owns the interface; H10 only consumes it).
|
|
100
|
+
|
|
101
|
+
## See also
|
|
102
|
+
|
|
103
|
+
- [`docs/contracts/cross-wing-handoff.md`](../contracts/cross-wing-handoff.md)
|
|
104
|
+
— typed-handoff mechanical contract; `task lint-handoffs` enforces
|
|
105
|
+
cycles, dangling references, and tier mismatches over the graph.
|
|
106
|
+
- [`docs/guidelines/cross-role-handoff.md`](cross-role-handoff.md)
|
|
107
|
+
— when to hand off at all, how to phrase the routing, L4 / C8
|
|
108
|
+
boundary.
|
|
109
|
+
- [`docs/contracts/context-spine.md`](../contracts/context-spine.md)
|
|
110
|
+
§ Wing-3 slots — `channel-stage`, `funnel-stage`,
|
|
111
|
+
`customer-segment`; every chain step opts into ≥ 1 slot.
|
|
112
|
+
- `agents/roadmaps/` § Block H (archived after merge) — the
|
|
113
|
+
sixteen H-skills this guideline maps; pending skills appear here
|
|
114
|
+
as backtick slugs until shipped.
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
# Enterprise & offline installation
|
|
2
|
+
|
|
3
|
+
> **Status:** experimental · contract-shaped output of
|
|
4
|
+
> `agents/roadmaps/road-to-distribution-maturity.md` Phase 2. Four
|
|
5
|
+
> documented happy-paths for environments where the public npm
|
|
6
|
+
> registry is not freely reachable from the developer's machine, plus
|
|
7
|
+
> a "no-internet developer" runbook.
|
|
8
|
+
|
|
9
|
+
## Why no Composer fallback
|
|
10
|
+
|
|
11
|
+
Re-introducing a Composer-published distribution was evaluated in the
|
|
12
|
+
Phase 0 council session
|
|
13
|
+
(`agents/council-questions/composer-fallback-feasibility.md`) and
|
|
14
|
+
**rejected** on three grounds:
|
|
15
|
+
|
|
16
|
+
1. **Lock-shape mismatch.** `installed.lock` is npm-shaped (flat dep
|
|
17
|
+
model + npm pin in `.agent-settings.yml`). A Composer fallback
|
|
18
|
+
would need either a parallel manifest (breaks the "lock is
|
|
19
|
+
canonical" invariant) or a translation layer (defeats the
|
|
20
|
+
"minimal" claim).
|
|
21
|
+
2. **Dual-distribution attack surface.** Two pipelines means two
|
|
22
|
+
SBOMs, two CVE response surfaces, two signing roots. Supply-chain
|
|
23
|
+
risk doubles for a fallback most operators will never use.
|
|
24
|
+
3. **"Minimal fallback" is an oxymoron.** Partial functionality
|
|
25
|
+
shipped on a parallel pipeline confuses operators more than it
|
|
26
|
+
helps — the failure mode of a half-working Composer install is
|
|
27
|
+
worse than a documented npm-only path.
|
|
28
|
+
|
|
29
|
+
The supported alternative is the **four-path enterprise/offline
|
|
30
|
+
matrix** below, all of which keep npm as the single distribution
|
|
31
|
+
channel.
|
|
32
|
+
|
|
33
|
+
## Path A — pinned-npx via internal registry
|
|
34
|
+
|
|
35
|
+
For environments where the public registry is unreachable but an
|
|
36
|
+
internal mirror (Verdaccio, Nexus, JFrog, Sonatype) is configured:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# .npmrc at repo root or ~/.npmrc
|
|
40
|
+
registry=https://npm.internal.example.com/
|
|
41
|
+
@event4u:registry=https://npm.internal.example.com/
|
|
42
|
+
always-auth=true
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Pin the consumed version in the consumer project's
|
|
46
|
+
`.agent-settings.yml`:
|
|
47
|
+
|
|
48
|
+
```yaml
|
|
49
|
+
# .agent-settings.yml
|
|
50
|
+
agent_config_version: "2.6.1" # matches the version your mirror has indexed
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
`scripts/install.py` reads `agent_config_version` at install time and
|
|
54
|
+
records it in `~/.event4u/agent-config/installed.lock` per ADR-007.
|
|
55
|
+
The registry-mirror caveat: your mirror **must** index the
|
|
56
|
+
`@event4u/agent-config` scope before the first `npx` call — `npx`
|
|
57
|
+
does not transparently fall back from a private mirror to the public
|
|
58
|
+
registry.
|
|
59
|
+
|
|
60
|
+
> **Consumer npm-pinning ≠ release-shape pinning.** This path pins
|
|
61
|
+
> what the consumer's `npx` resolves to. The package's own release
|
|
62
|
+
> cadence (semver, tags, deprecation windows) is not pinned here per
|
|
63
|
+
> `.augment/rules/scope-control.md` § "no version pinning in
|
|
64
|
+
> roadmaps". The `agent_config_version` field is a consumer choice.
|
|
65
|
+
|
|
66
|
+
## Path B — offline cache strategy
|
|
67
|
+
|
|
68
|
+
For environments where the developer's machine has no network egress
|
|
69
|
+
at all but a pre-staged npm cache is delivered out-of-band:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# On a machine with internet access:
|
|
73
|
+
npm cache add @event4u/agent-config@2.6.1
|
|
74
|
+
tar -czf agent-config-npm-cache.tgz ~/.npm/_cacache
|
|
75
|
+
|
|
76
|
+
# On the offline machine:
|
|
77
|
+
tar -xzf agent-config-npm-cache.tgz -C ~/
|
|
78
|
+
npx --prefer-offline @event4u/agent-config init
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Corepack-pinning the npm version makes the cache reproducible across
|
|
82
|
+
developers:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
corepack enable
|
|
86
|
+
corepack prepare npm@10.5.0 --activate # whatever version your cache was built with
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
`agent_config_version` in `.agent-settings.yml` must match the cached
|
|
90
|
+
version exactly — otherwise `npx` will try (and fail) to resolve a
|
|
91
|
+
different version from the registry.
|
|
92
|
+
|
|
93
|
+
## Path C — CI-safe install pattern
|
|
94
|
+
|
|
95
|
+
CI agents (GitHub Actions runners, GitLab runners, Jenkins agents
|
|
96
|
+
behind a corporate proxy) get a narrower happy-path:
|
|
97
|
+
|
|
98
|
+
- **Cached tarball** in the runner's artifact store
|
|
99
|
+
(`actions/cache@v4` or equivalent), keyed on
|
|
100
|
+
`agent_config_version`.
|
|
101
|
+
- **`npm install --offline`** against the cache so the runner never
|
|
102
|
+
hits the registry.
|
|
103
|
+
- **`scripts/install.py validate`** instead of `init` — `validate`
|
|
104
|
+
re-reads `installed.lock` and checks the worktree matches; `init`
|
|
105
|
+
scaffolds tool directories which a CI agent typically does not
|
|
106
|
+
need.
|
|
107
|
+
- **No global writes.** CI runners are ephemeral; the
|
|
108
|
+
`~/.event4u/agent-config/installed.lock` write is harmless but the
|
|
109
|
+
CI job should not rely on it persisting between runs.
|
|
110
|
+
|
|
111
|
+
## Path D — verified-offline install (`scripts/hermetic-install.sh`)
|
|
112
|
+
|
|
113
|
+
> **Naming note.** The file name is `scripts/hermetic-install.sh` for
|
|
114
|
+
> roadmap continuity (Phase 2 Step 5). The **semantic** per the
|
|
115
|
+
> Anthropic council verdict is **verified-offline install** — the
|
|
116
|
+
> checksum manifest is delivered via a separate channel (not bundled
|
|
117
|
+
> in the tarball), so the trust model is not circular. "Hermetic" is
|
|
118
|
+
> used in the colloquial sense (reproducible + verifiable), not the
|
|
119
|
+
> Bazel-strict sense.
|
|
120
|
+
|
|
121
|
+
For air-gapped or strict-supply-chain environments where (a) network
|
|
122
|
+
egress is fully blocked, (b) tarball integrity must be verifiable
|
|
123
|
+
against an external manifest, and (c) installation must be auditable
|
|
124
|
+
end-to-end:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
# 1. Out-of-band: operator obtains
|
|
128
|
+
# - agent-config-2.6.1.tgz (from a separate channel)
|
|
129
|
+
# - agent-config-2.6.1.sha256 (separate-channel manifest, GPG-signed)
|
|
130
|
+
# - public.gpg (operator-supplied trust root)
|
|
131
|
+
|
|
132
|
+
# 2. On the target machine:
|
|
133
|
+
bash scripts/hermetic-install.sh \
|
|
134
|
+
--tarball ./agent-config-2.6.1.tgz \
|
|
135
|
+
--manifest ./agent-config-2.6.1.sha256 \
|
|
136
|
+
--gpg-key ./public.gpg
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Outcomes recorded in `~/.event4u/agent-config/installed.lock`:
|
|
140
|
+
|
|
141
|
+
```yaml
|
|
142
|
+
schema_version: 1
|
|
143
|
+
agent_config_version: "2.6.1"
|
|
144
|
+
installation_mode: "hermetic" # additive field (schema_v1 + extension)
|
|
145
|
+
package_checksum: "sha256:<hex>" # sha256 of the verified tarball
|
|
146
|
+
signature_verified: true # GPG verification result
|
|
147
|
+
installed_at: "2026-05-13T09:42:00Z"
|
|
148
|
+
tools:
|
|
149
|
+
- claude
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
> **Platform support.** Unix-only (macOS + Linux). The script depends
|
|
153
|
+
> on `bash`, `sha256sum`/`shasum`, and `gpg`. Windows support is
|
|
154
|
+
> future scope per the Phase 2 council session (o1 verdict). Windows
|
|
155
|
+
> users go through Path B (offline cache) on WSL.
|
|
156
|
+
|
|
157
|
+
> **Schema cadence.** The three additional fields are written under
|
|
158
|
+
> `schema_version: 1` as additive keys. The bump to
|
|
159
|
+
> `schema_version: 2` is captured as a deferred ADR candidate in
|
|
160
|
+
> `agents/roadmaps/road-to-distribution-maturity.md` Notes § "Phase 2
|
|
161
|
+
> lock-schema extension — ADR candidate" — not opened this PR.
|
|
162
|
+
|
|
163
|
+
## No-internet developer runbook
|
|
164
|
+
|
|
165
|
+
A developer arrives on Monday with no network and finds a broken
|
|
166
|
+
`npx` cache (corrupted, stale, or never staged). Recovery:
|
|
167
|
+
|
|
168
|
+
1. **Confirm no-network.** `curl -m 5 https://registry.npmjs.org/ ||
|
|
169
|
+
echo "offline as expected"`.
|
|
170
|
+
2. **Inventory what is local.**
|
|
171
|
+
- `ls ~/.npm/_cacache/` — is the offline cache present?
|
|
172
|
+
- `cat ~/.event4u/agent-config/installed.lock` — was a prior
|
|
173
|
+
install successful?
|
|
174
|
+
3. **Pick a path:**
|
|
175
|
+
- Cache present + lock present → **Path B**, `npx --prefer-offline`.
|
|
176
|
+
- Cache present + lock missing → **Path B**, then `validate`.
|
|
177
|
+
- Cache missing + tarball + manifest present → **Path D**.
|
|
178
|
+
- Cache missing + nothing else → ask the IT contact to deliver
|
|
179
|
+
either a fresh tarball (for Path D) or a fresh cache archive
|
|
180
|
+
(for Path B). Do not attempt to bridge to the registry.
|
|
181
|
+
4. **Verify.** After whichever path, run `npx --prefer-offline
|
|
182
|
+
@event4u/agent-config validate` and confirm exit code zero. If
|
|
183
|
+
`validate` fails on a checksum or version mismatch, the cache
|
|
184
|
+
or tarball is stale — re-acquire, do not edit `installed.lock`
|
|
185
|
+
by hand.
|
|
186
|
+
|
|
187
|
+
> No code recovery path goes through editing `installed.lock`
|
|
188
|
+
> manually. The file is atomic (`os.replace`) by design — hand-edits
|
|
189
|
+
> bypass the schema invariant and will be overwritten on the next
|
|
190
|
+
> `init`/`update`.
|
|
191
|
+
|
|
192
|
+
## See also
|
|
193
|
+
|
|
194
|
+
- `agents/roadmaps/road-to-distribution-maturity.md` § Phase 2 — the
|
|
195
|
+
roadmap entry that produced this document.
|
|
196
|
+
- `agents/council-questions/composer-fallback-feasibility.md` — the
|
|
197
|
+
question that rejected the Composer path.
|
|
198
|
+
- `agents/council-questions/hermetic-install-scaffolding.md` — the
|
|
199
|
+
question that shaped Path D.
|
|
200
|
+
- `docs/decisions/ADR-007-agent-discovery-scopes.md` — the lock
|
|
201
|
+
manifest contract that Phase 2 extends additively.
|
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
# Augment Code Setup
|
|
2
2
|
|
|
3
|
-
Augment Code is
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
`.augment
|
|
7
|
-
`.augment/
|
|
3
|
+
Augment Code is **global-only** in this package — content ships from a
|
|
4
|
+
single user-scope tree at `~/.augment/` and the Augment extension
|
|
5
|
+
(VS Code, JetBrains) reads it on every workspace. Per-project
|
|
6
|
+
`.augment/` content is not installed; project `init` writes only the
|
|
7
|
+
`.augment/settings.json` marker that authorizes the plugin for the
|
|
8
|
+
workspace.
|
|
9
|
+
|
|
10
|
+
> **Why global-only?** Augment counts the full body of every file in
|
|
11
|
+
> `.augment/rules/` against its 49,512-char workspace-guidelines limit.
|
|
12
|
+
> The package-wide rule set exceeds that limit on every workspace, so
|
|
13
|
+
> a single user-scope install is the canonical surface and the
|
|
14
|
+
> overflow is a known, accepted trade-off. See
|
|
15
|
+
> [`ADR-007 § Amendment 2026-05-13 — global-only`](../../decisions/ADR-007-agent-discovery-scopes.md#amendment-2026-05-13--augment-global-only).
|
|
8
16
|
|
|
9
17
|
## Prerequisites
|
|
10
18
|
|
|
@@ -13,28 +21,31 @@ extension (VS Code, JetBrains) reads `.augment/rules/`,
|
|
|
13
21
|
|
|
14
22
|
## Install
|
|
15
23
|
|
|
16
|
-
|
|
24
|
+
Global scope (the only supported path — deploys the full bundle to
|
|
25
|
+
`~/.augment/`):
|
|
17
26
|
|
|
18
27
|
```bash
|
|
19
|
-
npx @event4u/agent-config init --tools=augment
|
|
28
|
+
npx @event4u/agent-config init --tools=augment --global
|
|
20
29
|
```
|
|
21
30
|
|
|
22
|
-
|
|
31
|
+
`--tools=augment` without `--global` is rejected with a directive
|
|
32
|
+
error; `--tools=all` (project scope) silently filters `augment` out.
|
|
23
33
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
34
|
+
Populates (`~/.augment/`):
|
|
35
|
+
|
|
36
|
+
- `~/.augment/rules/` — kernel (9 Iron-Law rules) + tier-1/2 routed rules
|
|
37
|
+
- `~/.augment/skills/` — domain skills
|
|
38
|
+
- `~/.augment/commands/` — slash commands
|
|
39
|
+
- `~/.augment/personas/` — review-lens personas
|
|
40
|
+
- `~/.augment/contexts/` — knowledge-layer contexts
|
|
41
|
+
- `~/.augment/templates/` — scaffolds for AGENTS.md, copilot-instructions, etc.
|
|
27
42
|
|
|
28
|
-
|
|
43
|
+
A project-scope `init` (any `--tools=…` selection except `augment`)
|
|
44
|
+
still writes:
|
|
29
45
|
|
|
30
|
-
- `.augment/
|
|
31
|
-
-
|
|
32
|
-
- `.
|
|
33
|
-
- `.augment/personas/` — review-lens personas
|
|
34
|
-
- `.augment/contexts/` — knowledge-layer contexts
|
|
35
|
-
- `.augment/templates/` — scaffolds for AGENTS.md, copilot-instructions, etc.
|
|
36
|
-
- `AGENTS.md` — canonical agent self-orientation
|
|
37
|
-
- `.agent-settings.yml` — per-project knobs
|
|
46
|
+
- `.augment/settings.json` — plugin activation marker for the workspace
|
|
47
|
+
- `AGENTS.md` — canonical agent self-orientation
|
|
48
|
+
- `.agent-settings.yml` — per-project knobs
|
|
38
49
|
|
|
39
50
|
## How to use
|
|
40
51
|
|
|
@@ -53,9 +64,9 @@ Populates (project):
|
|
|
53
64
|
## Verification
|
|
54
65
|
|
|
55
66
|
```bash
|
|
56
|
-
test -d
|
|
57
|
-
test -d
|
|
58
|
-
test -d
|
|
67
|
+
test -d ~/.augment/rules
|
|
68
|
+
test -d ~/.augment/skills
|
|
69
|
+
test -d ~/.augment/commands
|
|
59
70
|
test -f AGENTS.md
|
|
60
71
|
```
|
|
61
72
|
|
|
@@ -67,8 +78,9 @@ should cite the AGENTS.md emergency triage block.
|
|
|
67
78
|
| Symptom | Fix |
|
|
68
79
|
|---|---|
|
|
69
80
|
| Skills not surfaced | Reload the Augment workspace; skills are indexed on session start. |
|
|
70
|
-
|
|
|
71
|
-
|
|
|
81
|
+
| `~/.augment/rules/` missing | Re-run `npx @event4u/agent-config init --tools=augment --global`. |
|
|
82
|
+
| Workspace-guidelines overflow warning | Expected — the package rule set exceeds Augment's 49,512-char budget. See [`ADR-007 § Amendment 2026-05-13`](../../decisions/ADR-007-agent-discovery-scopes.md#amendment-2026-05-13--augment-global-only). |
|
|
83
|
+
| Iron Laws not firing | Confirm `~/.augment/rules/` contains 9 kernel files. |
|
|
72
84
|
|
|
73
85
|
## Cross-references
|
|
74
86
|
|
package/package.json
CHANGED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""One-shot bootstrap — inject `tier: N` frontmatter into every slash command.
|
|
3
|
+
|
|
4
|
+
Per Phase 4 Step 3 of `agents/roadmaps/road-to-distribution-maturity.md`.
|
|
5
|
+
|
|
6
|
+
Walks `.agent-src.uncompressed/commands/**.md`. For each file:
|
|
7
|
+
|
|
8
|
+
- Tier-0 promotions match TIER_0 below — typed by hand.
|
|
9
|
+
- Tier-1 promotions match TIER_1 below — typed by hand.
|
|
10
|
+
- Everything else defaults to **Tier-2** (per the contract).
|
|
11
|
+
|
|
12
|
+
Idempotent — re-running is a no-op once tiers are tagged. The lint
|
|
13
|
+
script `scripts/lint_command_tiers.py` enforces drift from here on.
|
|
14
|
+
|
|
15
|
+
Run from repo root: `python3 scripts/_bootstrap_tier_frontmatter.py`.
|
|
16
|
+
"""
|
|
17
|
+
from __future__ import annotations
|
|
18
|
+
|
|
19
|
+
import re
|
|
20
|
+
from pathlib import Path
|
|
21
|
+
|
|
22
|
+
REPO_ROOT = Path(__file__).resolve().parent.parent
|
|
23
|
+
COMMANDS_DIRS = (
|
|
24
|
+
REPO_ROOT / ".agent-src.uncompressed" / "commands",
|
|
25
|
+
REPO_ROOT / ".agent-src" / "commands",
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
# Tier-0 — daily-driver slash commands (per docs/contracts/command-surface-tiers.md).
|
|
29
|
+
# Paths are relative to COMMANDS_DIR.
|
|
30
|
+
TIER_0 = {
|
|
31
|
+
"onboard.md",
|
|
32
|
+
"commit.md",
|
|
33
|
+
"work.md",
|
|
34
|
+
"implement-ticket.md",
|
|
35
|
+
"agent-status.md",
|
|
36
|
+
"agent-handoff.md",
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
# Tier-1 — power-user / maintainer / orchestrator slash commands.
|
|
40
|
+
TIER_1 = {
|
|
41
|
+
"create-pr.md",
|
|
42
|
+
"review-changes.md",
|
|
43
|
+
"optimize.md",
|
|
44
|
+
"roadmap.md",
|
|
45
|
+
"feature.md",
|
|
46
|
+
"fix.md",
|
|
47
|
+
"judge.md",
|
|
48
|
+
"memory.md",
|
|
49
|
+
"council.md",
|
|
50
|
+
"agents.md",
|
|
51
|
+
"commit/in-chunks.md",
|
|
52
|
+
"create-pr/description-only.md",
|
|
53
|
+
"quality-fix.md",
|
|
54
|
+
"prepare-for-review.md",
|
|
55
|
+
"estimate-ticket.md",
|
|
56
|
+
"refine-ticket.md",
|
|
57
|
+
"bug-fix.md",
|
|
58
|
+
"bug-investigate.md",
|
|
59
|
+
"jira-ticket.md",
|
|
60
|
+
"compress.md",
|
|
61
|
+
"mode.md",
|
|
62
|
+
"project-analyze.md",
|
|
63
|
+
"project-health.md",
|
|
64
|
+
"rule-compliance-audit.md",
|
|
65
|
+
"threat-model.md",
|
|
66
|
+
"set-cost-profile.md",
|
|
67
|
+
"sync-agent-settings.md",
|
|
68
|
+
"sync-gitignore.md",
|
|
69
|
+
"upstream-contribute.md",
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
FRONTMATTER_RE = re.compile(r"^---\n(.*?)\n---\n", re.DOTALL)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def classify(rel_path: str) -> int:
|
|
76
|
+
if rel_path in TIER_0:
|
|
77
|
+
return 0
|
|
78
|
+
if rel_path in TIER_1:
|
|
79
|
+
return 1
|
|
80
|
+
return 2
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def inject_tier(text: str, tier: int) -> tuple[str, bool]:
|
|
84
|
+
"""Inject `tier: N` into the frontmatter block. Returns (new_text, changed).
|
|
85
|
+
|
|
86
|
+
If frontmatter already contains `tier:`, the existing value wins
|
|
87
|
+
(idempotent — bootstrap never overrides a manual tag).
|
|
88
|
+
"""
|
|
89
|
+
m = FRONTMATTER_RE.match(text)
|
|
90
|
+
if not m:
|
|
91
|
+
return text, False
|
|
92
|
+
block = m.group(1)
|
|
93
|
+
if re.search(r"^tier:\s*[012]\s*$", block, re.MULTILINE):
|
|
94
|
+
return text, False
|
|
95
|
+
# Insert `tier: N` right after the `name:` line if present, else at
|
|
96
|
+
# the top of the block.
|
|
97
|
+
name_match = re.search(r"^(name:\s*\S+)$", block, re.MULTILINE)
|
|
98
|
+
if name_match:
|
|
99
|
+
new_block = (
|
|
100
|
+
block[: name_match.end()]
|
|
101
|
+
+ f"\ntier: {tier}"
|
|
102
|
+
+ block[name_match.end() :]
|
|
103
|
+
)
|
|
104
|
+
else:
|
|
105
|
+
new_block = f"tier: {tier}\n{block}"
|
|
106
|
+
new_fm = f"---\n{new_block}\n---\n"
|
|
107
|
+
return new_fm + text[m.end() :], True
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def main() -> int:
|
|
111
|
+
overall_tagged = 0
|
|
112
|
+
overall_skipped = 0
|
|
113
|
+
for commands_dir in COMMANDS_DIRS:
|
|
114
|
+
if not commands_dir.is_dir():
|
|
115
|
+
print(f"[bootstrap-tier] no commands dir: {commands_dir}")
|
|
116
|
+
continue
|
|
117
|
+
files = sorted(commands_dir.rglob("*.md"))
|
|
118
|
+
tagged = 0
|
|
119
|
+
skipped = 0
|
|
120
|
+
by_tier = {0: 0, 1: 0, 2: 0}
|
|
121
|
+
for path in files:
|
|
122
|
+
rel = path.relative_to(commands_dir).as_posix()
|
|
123
|
+
# Sub-AGENTS.md files are not slash commands.
|
|
124
|
+
if rel.endswith("AGENTS.md"):
|
|
125
|
+
continue
|
|
126
|
+
tier = classify(rel)
|
|
127
|
+
by_tier[tier] += 1
|
|
128
|
+
text = path.read_text(encoding="utf-8")
|
|
129
|
+
new_text, changed = inject_tier(text, tier)
|
|
130
|
+
if changed:
|
|
131
|
+
path.write_text(new_text, encoding="utf-8")
|
|
132
|
+
tagged += 1
|
|
133
|
+
else:
|
|
134
|
+
skipped += 1
|
|
135
|
+
overall_tagged += tagged
|
|
136
|
+
overall_skipped += skipped
|
|
137
|
+
rel_label = commands_dir.relative_to(REPO_ROOT)
|
|
138
|
+
print(
|
|
139
|
+
f"[bootstrap-tier] dir={rel_label} tagged={tagged} "
|
|
140
|
+
f"skipped={skipped} tier-0={by_tier[0]} "
|
|
141
|
+
f"tier-1={by_tier[1]} tier-2={by_tier[2]}"
|
|
142
|
+
)
|
|
143
|
+
print(
|
|
144
|
+
f"[bootstrap-tier] total: tagged={overall_tagged} "
|
|
145
|
+
f"skipped={overall_skipped}"
|
|
146
|
+
)
|
|
147
|
+
return 0
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
if __name__ == "__main__":
|
|
151
|
+
raise SystemExit(main())
|