@event4u/agent-config 3.0.0 → 3.1.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/.agent-src/commands/install-via-agent.md +129 -0
- package/.agent-src/commands/video/from-script.md +1 -1
- package/.agent-src/commands/video.md +1 -1
- package/.agent-src/contexts/execution/cheap-question-mechanics.md +81 -0
- package/.agent-src/rules/caveman-speak.md +2 -2
- package/.agent-src/rules/context-hygiene.md +36 -0
- package/.agent-src/rules/engineering-safety-floor.md +102 -0
- package/.agent-src/rules/finance-safety-floor.md +114 -0
- package/.agent-src/rules/git-history-discipline.md +1 -1
- package/.agent-src/rules/no-cheap-questions.md +34 -32
- package/.agent-src/rules/provider-lifecycle-discipline.md +4 -4
- package/.agent-src/rules/strategy-safety-floor.md +114 -0
- package/.agent-src/skills/agents-md-thin-root/SKILL.md +15 -9
- package/.agent-src/skills/async-python-patterns/SKILL.md +1 -1
- package/.agent-src/skills/project-analysis-node-express/SKILL.md +1 -1
- package/.agent-src/skills/readme-reviewer/SKILL.md +52 -3
- package/.agent-src/skills/readme-writing/SKILL.md +52 -4
- package/.agent-src/skills/readme-writing-package/SKILL.md +48 -5
- package/.agent-src/skills/systematic-debugging/SKILL.md +41 -0
- package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/.agent-src/templates/hooks/pre-commit-frontmatter +66 -0
- package/.agent-src/templates/hooks/pre-commit-roadmap-progress +78 -39
- package/.agent-src/templates/scripts/work_engine/_lib/agent_settings.py +4 -1
- package/.agent-src/templates/scripts/work_engine/orchestration.py +25 -11
- package/.claude-plugin/marketplace.json +2 -1
- package/AGENTS.md +10 -8
- package/CHANGELOG.md +233 -123
- package/README.md +165 -553
- package/config/agent-settings.template.yml +0 -7
- package/config/discovery/packs.yml +20 -0
- package/config/discovery/unassigned-artefacts.yml +2 -0
- package/config/gitignore-block.txt +19 -3
- package/dist/cli/commands/uiServe.js +13 -4
- package/dist/cli/commands/uiServe.js.map +1 -1
- package/dist/cli/registry.js +2 -0
- package/dist/cli/registry.js.map +1 -1
- package/dist/discovery/deprecation-report.md +7 -0
- package/dist/discovery/discovery-manifest.json +2107 -1409
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +9 -9
- package/dist/discovery/orphan-report.md +10 -0
- package/dist/discovery/packs.json +1002 -0
- package/dist/discovery/trust-report.md +26 -0
- package/dist/discovery/workspaces.json +705 -0
- package/dist/mcp/registry-manifest.json +4 -4
- package/dist/router.json +1623 -0
- package/dist/server/app.js +11 -3
- package/dist/server/app.js.map +1 -1
- package/dist/server/io/atomicMultiWrite.js +3 -1
- package/dist/server/io/atomicMultiWrite.js.map +1 -1
- package/dist/server/io/yamlIO.js +22 -0
- package/dist/server/io/yamlIO.js.map +1 -1
- package/dist/server/routes/ping.js +8 -0
- package/dist/server/routes/ping.js.map +1 -1
- package/dist/server/routes/schema.js +2 -2
- package/dist/server/routes/schema.js.map +1 -1
- package/dist/server/routes/settings.js +104 -23
- package/dist/server/routes/settings.js.map +1 -1
- package/dist/server/routes/userMd.js +37 -27
- package/dist/server/routes/userMd.js.map +1 -1
- package/dist/server/routes/wizard.js +256 -20
- package/dist/server/routes/wizard.js.map +1 -1
- package/dist/server/schemas/settings.js +0 -1
- package/dist/server/schemas/settings.js.map +1 -1
- package/dist/server/token.js +10 -3
- package/dist/server/token.js.map +1 -1
- package/dist/server/writeRoot.js +28 -11
- package/dist/server/writeRoot.js.map +1 -1
- package/dist/server/writeRoot.test.js +22 -4
- package/dist/server/writeRoot.test.js.map +1 -1
- package/dist/shared/userMd/formAdapter.js +29 -51
- package/dist/shared/userMd/formAdapter.js.map +1 -1
- package/dist/shared/userMd/schema.js +32 -104
- package/dist/shared/userMd/schema.js.map +1 -1
- package/dist/shared/userMd/utils.js +64 -50
- package/dist/shared/userMd/utils.js.map +1 -1
- package/dist/ui/assets/index-D-DY1ywI.js +35 -0
- package/dist/ui/assets/index-D-DY1ywI.js.map +1 -0
- package/dist/ui/index.html +1 -1
- package/docs/adrs/router/0001-three-tier-routing.md +5 -5
- package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +1 -1
- package/docs/architecture.md +3 -3
- package/docs/archive/CHANGELOG-pre-3.1.0.md +167 -0
- package/docs/catalog.md +30 -26
- package/docs/contracts/CHANGELOG-conventions.md +1 -1
- package/docs/contracts/agent-user-schema.md +6 -9
- package/docs/contracts/consumer-bridge.md +79 -0
- package/docs/contracts/discovery-manifest.md +209 -0
- package/docs/contracts/discovery-manifest.schema.json +77 -4
- package/docs/contracts/explain-trace.schema.json +1 -1
- package/docs/contracts/file-ownership-matrix.json +197 -13
- package/docs/contracts/frontmatter-contract.md +140 -0
- package/docs/contracts/gui-wizard.md +223 -0
- package/docs/contracts/installer-agent-mode.md +137 -0
- package/docs/contracts/kernel-membership.md +1 -1
- package/docs/contracts/mcp-tool-inventory.md +9 -9
- package/docs/contracts/namespace.md +6 -6
- package/docs/contracts/provider-lifecycle.md +5 -5
- package/docs/contracts/rule-router.md +4 -4
- package/docs/contracts/settings-api.md +53 -6
- package/docs/contracts/smoke-contracts.md +3 -3
- package/docs/contracts/trust-and-safety.md +144 -0
- package/docs/customization.md +2 -2
- package/docs/decisions/ADR-007-agent-discovery-scopes.md +12 -0
- package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +24 -0
- package/docs/decisions/ADR-015-discovery-manifest-contract.md +146 -0
- package/docs/decisions/ADR-016-installer-architecture.md +189 -0
- package/docs/decisions/ADR-017-monorepo-physical-layout.md +261 -0
- package/docs/decisions/ADR-018-trust-and-safety-layer.md +159 -0
- package/docs/decisions/ADR-019-router-json-dist-location.md +124 -0
- package/docs/decisions/ADR-020-global-only-consumer-scope.md +123 -0
- package/docs/decisions/ADR-021-deployment-shape.md +153 -0
- package/docs/decisions/INDEX.md +7 -0
- package/docs/deploy/connector-setup.md +129 -0
- package/docs/deploy/env-vars.md +70 -0
- package/docs/deploy/policy-cookbook.md +130 -0
- package/docs/deploy/quickstart.md +112 -0
- package/docs/distribution/public-install-smoke.md +68 -0
- package/docs/distribution/registries.md +55 -0
- package/docs/distribution/telemetry-privacy.md +128 -0
- package/docs/distribution/telemetry-schema.md +174 -0
- package/docs/featured-skills.md +95 -0
- package/docs/getting-started-by-role.md +19 -1
- package/docs/getting-started.md +2 -2
- package/docs/guidelines/agent-infra/installed-tools-manifest.md +11 -8
- package/docs/guidelines/docs/readme-size-and-splitting.md +53 -1
- package/docs/installation.md +27 -14
- package/docs/maintainers/dev-mode.md +105 -0
- package/docs/setup/per-ide/claude-desktop.md +3 -2
- package/docs/wizard.md +39 -4
- package/package.json +18 -1
- package/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
- package/scripts/_cli/cmd_doctor.py +150 -2
- package/scripts/_cli/cmd_explain.py +2 -1
- package/scripts/_cli/cmd_migrate_to_global.py +415 -0
- package/scripts/_cli/cmd_settings_migrate.py +146 -0
- package/scripts/_cli/explain_last/route.py +2 -1
- package/scripts/_dispatch.bash +36 -3
- package/scripts/_lib/__pycache__/__init__.cpython-312.pyc +0 -0
- package/scripts/_lib/__pycache__/agent_src.cpython-312.pyc +0 -0
- package/scripts/_lib/agent_settings.py +4 -1
- package/scripts/_lib/agent_src.py +157 -0
- package/scripts/agent-config +17 -6
- package/scripts/audit_skill_descriptions.py +18 -6
- package/scripts/build_discovery_manifest.py +373 -17
- package/scripts/check_artefact_checksums.py +104 -0
- package/scripts/check_cluster_patterns.py +20 -4
- package/scripts/check_command_count_messaging.py +33 -14
- package/scripts/check_council_references.py +43 -4
- package/scripts/check_overlay_cascade_subdirs.py +7 -3
- package/scripts/check_references.py +5 -2
- package/scripts/check_reply_consistency.py +32 -9
- package/scripts/check_template_pin_drift.py +24 -7
- package/scripts/check_token_optimizer_freshness.py +18 -3
- package/scripts/compile_router.py +34 -2
- package/scripts/compress.py +162 -44
- package/scripts/config/presets.py +19 -1
- package/scripts/config/profiles.py +16 -1
- package/scripts/discovery_stats.py +70 -0
- package/scripts/expected_perms.json +47 -0
- package/scripts/generate_index.py +78 -46
- package/scripts/generate_ownership_matrix.py +98 -43
- package/scripts/generate_pack_manifests.py +183 -0
- package/scripts/install +18 -1
- package/scripts/install.py +934 -59
- package/scripts/install.sh +27 -9
- package/scripts/lint_agents_layout.py +93 -13
- package/scripts/lint_agents_md.py +1 -1
- package/scripts/lint_archived_skills.py +32 -16
- package/scripts/lint_bench_corpus.py +14 -2
- package/scripts/lint_command_tiers.py +15 -2
- package/scripts/lint_featured_skills.py +139 -0
- package/scripts/lint_framework_leakage.py +33 -6
- package/scripts/lint_global_paths.py +147 -0
- package/scripts/lint_orchestration_dsl.py +6 -3
- package/scripts/lint_pack_boundaries.py +147 -0
- package/scripts/lint_pack_first_win.py +103 -0
- package/scripts/lint_readme_jargon.py +131 -0
- package/scripts/lint_readme_size.py +33 -0
- package/scripts/lint_rule_interactions.py +23 -5
- package/scripts/lint_rule_tiers.py +12 -3
- package/scripts/lint_trust_coherence.py +212 -0
- package/scripts/measure_rule_budget.py +22 -4
- package/scripts/move_artefact.py +143 -0
- package/scripts/new_skill.py +148 -0
- package/scripts/plan_physical_move.py +353 -0
- package/scripts/refine_ticket_detect.py +30 -7
- package/scripts/release.py +22 -2
- package/scripts/schemas/command.schema.json +4 -0
- package/scripts/skill_linter.py +248 -118
- package/scripts/skill_trigger_eval.py +28 -8
- package/scripts/smoke/kernel.sh +1 -1
- package/scripts/smoke/router.sh +24 -5
- package/scripts/smoke/skills.sh +15 -7
- package/scripts/smoke_quickstart.py +11 -2
- package/scripts/snapshot_agent_outputs.py +144 -0
- package/scripts/update_counts.py +45 -17
- package/scripts/validate_decision_engine.py +9 -1
- package/scripts/validate_discovery_manifest.py +94 -0
- package/scripts/validate_frontmatter.py +39 -20
- package/scripts/verify_physical_move.py +185 -0
- package/templates/agent-user.md +0 -1
- package/templates/agent-user.yml +21 -0
- package/templates/minimal/agents-overrides-readme.md +46 -0
- package/templates/minimal/overrides-gitkeep +2 -0
- package/dist/ui/assets/index-BTRcKDlB.js +0 -39
- package/dist/ui/assets/index-BTRcKDlB.js.map +0 -1
- package/templates/minimal/agents-gitkeep +0 -2
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# Install-Funnel Telemetry — Privacy
|
|
2
|
+
|
|
3
|
+
> **3-minute read.** This page explains what the `@event4u/agent-config`
|
|
4
|
+
> installer collects when you opt in, what it never collects, and how to
|
|
5
|
+
> opt out.
|
|
6
|
+
|
|
7
|
+
## TL;DR
|
|
8
|
+
|
|
9
|
+
- **Off by default.** You see one prompt during install. If you do nothing,
|
|
10
|
+
nothing is sent.
|
|
11
|
+
- **Anonymous.** No IP, no machine ID, no project name, no file paths.
|
|
12
|
+
- **Short retention.** Raw events live 14 days; sessions live 2 hours.
|
|
13
|
+
- **One-click off.** `--no-telemetry`, the wizard "No thanks" button, or
|
|
14
|
+
unsetting `TELEMETRY_OPT_IN=1` for the next install.
|
|
15
|
+
|
|
16
|
+
## 1. What we collect (only if you opt in)
|
|
17
|
+
|
|
18
|
+
Per install attempt, we send one event per funnel stage with these fields:
|
|
19
|
+
|
|
20
|
+
- **Funnel stage** — one of: `started`, `wizard_opt_in_seen`,
|
|
21
|
+
`wizard_opt_in_accepted`, `packs_selected`, `applied`,
|
|
22
|
+
`first_command_run`, `errored`.
|
|
23
|
+
- **Entry path** — `npx`, `curl`, or `gui`.
|
|
24
|
+
- **Host agent family** — coarse bucket: `vscode`, `jetbrains`, `cli`,
|
|
25
|
+
`browser`, or `unknown`. Specific tool names (Cursor, Copilot, Windsurf)
|
|
26
|
+
are collapsed into the family bucket.
|
|
27
|
+
- **Operating-system family** — `linux`, `macos`, or `windows`.
|
|
28
|
+
- **Node major version** — `20` or `22`.
|
|
29
|
+
- **agent-config version** — the semver string of the installer release.
|
|
30
|
+
- **Pack categories** — a list of broad categories from a fixed enum
|
|
31
|
+
(`finance`, `founder`, `engineering`, `content`, `consultant`, `meta`,
|
|
32
|
+
`other`). Specific pack names are never sent.
|
|
33
|
+
- **Wizard used** — boolean.
|
|
34
|
+
- **Duration bucket** — one of `<30s`, `30s-2m`, `2m-10m`, `>10m`. We never
|
|
35
|
+
send millisecond timings.
|
|
36
|
+
- **Error class** (only on `errored`) — one of `network`, `filesystem`,
|
|
37
|
+
`config_invalid`, `dependency`, `unknown`. Never a stack, never a
|
|
38
|
+
message.
|
|
39
|
+
- **Session ID** — a 128-bit random token issued by our server with a
|
|
40
|
+
2-hour time-to-live, used to stitch the funnel. It is never persisted
|
|
41
|
+
on your machine.
|
|
42
|
+
|
|
43
|
+
The full wire contract is in [`telemetry-schema.md`](telemetry-schema.md).
|
|
44
|
+
|
|
45
|
+
## 2. What we NEVER collect
|
|
46
|
+
|
|
47
|
+
- IP address. Cloudflare drops it before our worker reads the request body;
|
|
48
|
+
our code does not log `cf-connecting-ip`.
|
|
49
|
+
- Machine identifiers — no MAC, no hostname, no username, no home directory.
|
|
50
|
+
- Project name, project path, repository slug, git remote URL.
|
|
51
|
+
- Pack names (only the coarse `pack_categories` enum).
|
|
52
|
+
- File paths of any kind.
|
|
53
|
+
- Error stacks, error messages, or any freeform error text.
|
|
54
|
+
- Anything you typed: prompts, ticket IDs, ad-hoc commands.
|
|
55
|
+
- Sub-bucket timing (no `duration_ms`).
|
|
56
|
+
|
|
57
|
+
## 3. How to opt out
|
|
58
|
+
|
|
59
|
+
Three paths, any one works:
|
|
60
|
+
|
|
61
|
+
1. **Wizard (browser GUI)** — click "No thanks" on the telemetry screen.
|
|
62
|
+
This is the default focus; pressing Enter without picking declines.
|
|
63
|
+
2. **CLI / TUI** — answer `n` at the telemetry prompt (default `n`).
|
|
64
|
+
3. **CI / `--yes` mode** — telemetry is **always off** unless you pass
|
|
65
|
+
`--telemetry-opt-in` explicitly. There is no implicit consent in
|
|
66
|
+
non-interactive runs.
|
|
67
|
+
|
|
68
|
+
You can also disable telemetry for one specific install by setting
|
|
69
|
+
`AGENT_CONFIG_NO_TELEMETRY=1` in the environment.
|
|
70
|
+
|
|
71
|
+
## 4. Per-install scope — choice is never persisted
|
|
72
|
+
|
|
73
|
+
The opt-in choice applies **only to the current install session**. We do
|
|
74
|
+
not write a preference file under your project, your home directory, or
|
|
75
|
+
anywhere else. If you run the installer again, you will see the prompt
|
|
76
|
+
again. This is intentional — every install is an explicit consent moment.
|
|
77
|
+
|
|
78
|
+
## 5. How long we keep it
|
|
79
|
+
|
|
80
|
+
| What | Storage | Time to live |
|
|
81
|
+
|---|---|---|
|
|
82
|
+
| Session ID + stage events | Cloudflare KV | 14 days |
|
|
83
|
+
| Session token only | Cloudflare KV | 2 hours |
|
|
84
|
+
| Weekly aggregates (no session ID) | Cloudflare KV | 24 months |
|
|
85
|
+
|
|
86
|
+
Aggregates contain only counts — number of installs per stage, per OS, per
|
|
87
|
+
entry path. No identifier survives beyond 14 days.
|
|
88
|
+
|
|
89
|
+
## 6. Where the source lives, who can see the data
|
|
90
|
+
|
|
91
|
+
- Client SDK source — [`packages/core/installer/src/telemetry/`](../../packages/core/installer/src/telemetry/).
|
|
92
|
+
- Worker source — [`packages/cloud/telemetry-worker/`](../../packages/cloud/telemetry-worker/).
|
|
93
|
+
- Aggregates are visible only to the named maintainers of
|
|
94
|
+
`event4u/agent-config`. No third-party access. No advertising integration.
|
|
95
|
+
No resale.
|
|
96
|
+
|
|
97
|
+
## 7. Remote kill-switch
|
|
98
|
+
|
|
99
|
+
We host a public feature-flag JSON. If we ever need to disable telemetry
|
|
100
|
+
across all installs — for an incident, a privacy concern, or a deprecation
|
|
101
|
+
— we flip the flag to `enabled: false`. The installer reads the flag
|
|
102
|
+
before opening a session; if disabled, no events are sent regardless of
|
|
103
|
+
your opt-in choice. The flag defaults to `false` when unreachable.
|
|
104
|
+
|
|
105
|
+
## 8. Legal basis
|
|
106
|
+
|
|
107
|
+
Lawful basis under the General Data Protection Regulation is consent
|
|
108
|
+
under Article 6(1)(a). You give consent by clicking "opt in" or passing
|
|
109
|
+
`--telemetry-opt-in`; you withdraw consent by choosing any of the opt-out
|
|
110
|
+
paths in §3. Withdrawal applies to all future installs immediately.
|
|
111
|
+
|
|
112
|
+
Because session IDs are server-issued, short-lived (2 hours), and not
|
|
113
|
+
combined with re-identifying quasi-identifiers, the resulting records are
|
|
114
|
+
designed to fall outside the GDPR Art. 4(1) definition of personal data.
|
|
115
|
+
We treat them as personal data anyway for safety.
|
|
116
|
+
|
|
117
|
+
## 9. Changes to this policy
|
|
118
|
+
|
|
119
|
+
Material changes ship as a new section in this file plus a bump of
|
|
120
|
+
`schema_version` in the wire format. Non-material changes (typo fixes,
|
|
121
|
+
clearer wording) ship as plain edits. The current version corresponds to
|
|
122
|
+
`schema_version: "1"` in [`telemetry-schema.md`](telemetry-schema.md).
|
|
123
|
+
|
|
124
|
+
## See also
|
|
125
|
+
|
|
126
|
+
- [`telemetry-schema.md`](telemetry-schema.md) — full wire contract.
|
|
127
|
+
- `agents/roadmaps/road-to-product-adoption.md § Phase 4`.
|
|
128
|
+
- `non-destructive-by-default` — why worker deploy is a separate PR.
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# Install-Funnel Telemetry — Wire Schema
|
|
2
|
+
|
|
3
|
+
> **Status: source-only / inert.** This document specifies the install-funnel
|
|
4
|
+
> telemetry contract. The client SDK ships in this repository with the remote
|
|
5
|
+
> kill-switch defaulting to **off** and the production endpoint unset, so no
|
|
6
|
+
> traffic is emitted from any consumer install until the maintainer deploys
|
|
7
|
+
> the worker under a separate PR. See `non-destructive-by-default` — worker
|
|
8
|
+
> deploy is Hard-Floor and requires explicit per-turn maintainer authorization.
|
|
9
|
+
|
|
10
|
+
This is **install-funnel** telemetry. It is distinct from
|
|
11
|
+
`telemetry.artifact_engagement` (agent-runtime skill/rule/command usage,
|
|
12
|
+
stored locally per consumer project — see
|
|
13
|
+
[`artifact-engagement-flow`](../../packages/core/.agent-src.uncompressed/contexts/contracts/artifact-engagement-flow.md)).
|
|
14
|
+
The two systems do not share storage, transport, or opt-in state.
|
|
15
|
+
|
|
16
|
+
## Goals
|
|
17
|
+
|
|
18
|
+
Close the "we have no idea where consumers drop in the install funnel" blind
|
|
19
|
+
spot named in `feedback6.txt § 10`, while staying inside three hard
|
|
20
|
+
constraints:
|
|
21
|
+
|
|
22
|
+
1. **Privacy-by-default** — opt-in, off by default, anonymous beyond
|
|
23
|
+
reasonable doubt, no PII, no quasi-IDs that re-identify under combination.
|
|
24
|
+
2. **GDPR-fit out of the box** — lawful basis is consent under
|
|
25
|
+
Art. 6(1)(a); short retention; no cross-session linkability beyond a
|
|
26
|
+
2-hour server-issued session.
|
|
27
|
+
3. **Cheap to drop** — if we kill the system we leave no orphan data.
|
|
28
|
+
|
|
29
|
+
## Funnel stages (one event per stage)
|
|
30
|
+
|
|
31
|
+
```text
|
|
32
|
+
started
|
|
33
|
+
└→ wizard_opt_in_seen (browser GUI only)
|
|
34
|
+
└→ wizard_opt_in_accepted (browser GUI only)
|
|
35
|
+
└→ packs_selected
|
|
36
|
+
└→ applied
|
|
37
|
+
└→ first_command_run (optional, ≤ 7 days after applied)
|
|
38
|
+
└→ errored (terminal; mutually exclusive with applied)
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Wire shape (one POST per stage event)
|
|
42
|
+
|
|
43
|
+
`POST <worker-base-url>/install-event` with JSON body:
|
|
44
|
+
|
|
45
|
+
```jsonc
|
|
46
|
+
{
|
|
47
|
+
"schema_version": "1",
|
|
48
|
+
"event": "install_stage",
|
|
49
|
+
"stage": "started" | "wizard_opt_in_seen" | "wizard_opt_in_accepted"
|
|
50
|
+
| "packs_selected" | "applied" | "first_command_run" | "errored",
|
|
51
|
+
"ts": "2026-05-24T10:00:00Z",
|
|
52
|
+
"session_id": "<server-issued, 128-bit, 2h TTL; omit on first event>",
|
|
53
|
+
"entry_path": "npx" | "curl" | "gui",
|
|
54
|
+
"host_agent_family": "vscode" | "jetbrains" | "cli" | "browser" | "unknown",
|
|
55
|
+
"os": "linux" | "macos" | "windows",
|
|
56
|
+
"node_major": "20" | "22",
|
|
57
|
+
"agent_config_version": "<semver>",
|
|
58
|
+
"pack_categories": ["finance" | "founder" | "engineering" | "content"
|
|
59
|
+
| "consultant" | "meta" | "other"],
|
|
60
|
+
"wizard_used": true | false,
|
|
61
|
+
"duration_bucket": "<30s" | "30s-2m" | "2m-10m" | ">10m",
|
|
62
|
+
"error_class": "network" | "filesystem" | "config_invalid"
|
|
63
|
+
| "dependency" | "unknown"
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### `session_id` is server-issued, not client-issued
|
|
68
|
+
|
|
69
|
+
Per the AI Council Round-2 verdict, the client never generates an identifier.
|
|
70
|
+
The first event in a session POSTs **without** `session_id`. The worker
|
|
71
|
+
generates a random 128-bit token, writes it to KV with a 2-hour TTL, and
|
|
72
|
+
returns it in the response. Subsequent stage events include the returned
|
|
73
|
+
`session_id` so the worker can stitch the funnel.
|
|
74
|
+
|
|
75
|
+
Sessions that exceed 2 hours appear as two unstitched events. This is
|
|
76
|
+
acceptable — sessions that long are statistical outliers.
|
|
77
|
+
|
|
78
|
+
### Field-by-field rationale
|
|
79
|
+
|
|
80
|
+
| Field | Rationale | Re-identification risk |
|
|
81
|
+
|---|---|---|
|
|
82
|
+
| `session_id` | Server-controlled session stitching; 2h TTL; never persisted client-side | None (auto-expires) |
|
|
83
|
+
| `entry_path` | Required to compare npx vs curl vs GUI funnels | None (3 buckets) |
|
|
84
|
+
| `host_agent_family` | Required to compare IDE vs CLI completion rates | Low (4 buckets) |
|
|
85
|
+
| `os` | Required to spot OS-specific install failures | Low (3 buckets) |
|
|
86
|
+
| `node_major` | Required to spot Node version issues | Low (2 buckets) |
|
|
87
|
+
| `agent_config_version` | Required to spot regression on a new release | Low |
|
|
88
|
+
| `pack_categories` | Actionable funnel signal (which packs convert?) | Low (small fixed enum, no pack names) |
|
|
89
|
+
| `wizard_used` | Wizard vs TUI completion comparison | None |
|
|
90
|
+
| `duration_bucket` | Coarse timing; 4 buckets; no side-channel | None (vs `duration_ms` which leaks CI vs human) |
|
|
91
|
+
| `error_class` | 5 buckets; never freeform; never a stack | None |
|
|
92
|
+
|
|
93
|
+
## What we NEVER send
|
|
94
|
+
|
|
95
|
+
- IP address (Cloudflare drops it before the worker reads the request body;
|
|
96
|
+
the worker code does not log or persist `cf-connecting-ip`).
|
|
97
|
+
- Any machine identifier, MAC, hostname, username, home-directory path.
|
|
98
|
+
- Project name, project path, repository slug, git remote URL.
|
|
99
|
+
- Pack **names** (only the small fixed `pack_categories` enum is sent).
|
|
100
|
+
- File paths of any kind.
|
|
101
|
+
- Error stacks, error messages, or freeform `error_class` strings.
|
|
102
|
+
- Anything the user typed (prompts, ticket IDs, ad-hoc commands).
|
|
103
|
+
- Any timing field with sub-bucket precision (no `duration_ms`).
|
|
104
|
+
|
|
105
|
+
## Retention
|
|
106
|
+
|
|
107
|
+
| Tier | Storage | TTL | Notes |
|
|
108
|
+
|---|---|---|---|
|
|
109
|
+
| Raw stage events | Cloudflare KV | 14 days | Keyed by `event:<session_id>:<stage>` |
|
|
110
|
+
| Sessions | Cloudflare KV | 2 hours | Keyed by `session:<session_id>` |
|
|
111
|
+
| Weekly aggregates | Cloudflare KV | 24 months | Keyed by `funnel:weekly:<iso-week>`, no `session_id` |
|
|
112
|
+
|
|
113
|
+
Aggregates contain only stage counts and bucketed dimension counts. No
|
|
114
|
+
`session_id` is retained beyond 14 days.
|
|
115
|
+
|
|
116
|
+
## Authentication and abuse resistance
|
|
117
|
+
|
|
118
|
+
- **Per-channel HMAC signing.** Each entry path (`npx`, `curl`, `gui`) ships
|
|
119
|
+
with its own pre-shared HMAC secret embedded at build time. The installer
|
|
120
|
+
computes `HMAC-SHA256(secret, body)` and sends it in the `x-install-sig`
|
|
121
|
+
header. The worker validates the signature before parsing the body.
|
|
122
|
+
Rotation is handled by shipping a new installer release.
|
|
123
|
+
- **Rate-limit per `session_id`.** The worker caps each session at 20 events
|
|
124
|
+
total. Excess events return `429`.
|
|
125
|
+
- **Body size cap.** Bodies > 4 KB are rejected with `413`.
|
|
126
|
+
- **Schema strictness.** Unknown fields cause `400`. Validators run before
|
|
127
|
+
KV writes.
|
|
128
|
+
|
|
129
|
+
## Remote kill-switch
|
|
130
|
+
|
|
131
|
+
The installer reads a Cloudflare-hosted feature-flag JSON
|
|
132
|
+
(`https://<flag-host>/install-telemetry-flags.json`, cached for 1 hour,
|
|
133
|
+
default `enabled=false` if unreachable) before each session. If the flag
|
|
134
|
+
returns `enabled: false`, the SDK is a no-op for the entire session — no
|
|
135
|
+
session is opened, no `started` event is sent, no opt-in prompt is shown.
|
|
136
|
+
|
|
137
|
+
This gives the maintainer a one-line config change to disable telemetry
|
|
138
|
+
across all consumers within 1 hour, independent of installer releases.
|
|
139
|
+
|
|
140
|
+
## Worker contract
|
|
141
|
+
|
|
142
|
+
`POST /install-event` — see fields above. Returns:
|
|
143
|
+
|
|
144
|
+
- `200 { session_id }` on the first event of a session.
|
|
145
|
+
- `204 No Content` on subsequent stage events.
|
|
146
|
+
- `400 { error }` on schema mismatch or unknown fields.
|
|
147
|
+
- `401` on missing or invalid HMAC.
|
|
148
|
+
- `413` on body > 4 KB.
|
|
149
|
+
- `429` on per-session rate limit.
|
|
150
|
+
- `5xx` on worker error — the SDK fails open (no retry, no log).
|
|
151
|
+
|
|
152
|
+
`GET /install-telemetry-flags.json` — see kill-switch above. Returns
|
|
153
|
+
`{ enabled: bool, schema_version: "1" }`.
|
|
154
|
+
|
|
155
|
+
## Versioning
|
|
156
|
+
|
|
157
|
+
`schema_version: "1"` is the contract above. A breaking change ships
|
|
158
|
+
`schema_version: "2"` alongside `/install-event/v2`. The worker maintains v1
|
|
159
|
+
for ≥ 90 days after v2 ships. The installer always reports the version it
|
|
160
|
+
was built with — no client-side migration.
|
|
161
|
+
|
|
162
|
+
## Open questions for a follow-up PR
|
|
163
|
+
|
|
164
|
+
- Should `pack_categories` include `other` or omit unknown? Currently `other`
|
|
165
|
+
is included to avoid silent loss.
|
|
166
|
+
- Should `errored` events be retained longer (30 days) for incident
|
|
167
|
+
investigation? Decision deferred to first operational quarter.
|
|
168
|
+
|
|
169
|
+
## See also
|
|
170
|
+
|
|
171
|
+
- [`telemetry-privacy.md`](telemetry-privacy.md) — reader-facing privacy doc.
|
|
172
|
+
- [AI Council Round-2 transcript](../../agents/runtime/council/responses/install-telemetry.json) — verdict + revisions.
|
|
173
|
+
- `agents/roadmaps/road-to-product-adoption.md § Phase 4`.
|
|
174
|
+
- `non-destructive-by-default` — worker deploy is Hard-Floor.
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Featured Skills
|
|
2
|
+
|
|
3
|
+
A curated subset of the ~218 active skills. Three tiers, one per primary audience. Full catalog lives in [`.agent-src/skills/`](../.agent-src/skills/); see also [`docs/catalog.md`](catalog.md) for the complete index and [`docs/featured-commands.md`](featured-commands.md) for command-level highlights.
|
|
4
|
+
|
|
5
|
+
> **Eval-gated messaging note.** Until `task bench --corpus non-dev` reports `selection_accuracy >= 0.60` (see `road-to-product-adoption.md` Phase 1), this page is documentation, not marketing. The entries below are the candidates the corpus tests against; their description quality is what the eval validates.
|
|
6
|
+
|
|
7
|
+
Each row links to the canonical artefact under `.agent-src/`. Substitutions vs. the original roadmap proposal: `pitch-narrative` → [`fundraising-narrative`](../.agent-src/skills/fundraising-narrative/SKILL.md) (closest existing skill; pitch-narrative is not yet authored).
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Featured for Founders & Consultants
|
|
12
|
+
|
|
13
|
+
**Install:** `npx -y @event4u/agent-config init --pack founder-strategy`
|
|
14
|
+
(Consultants: pair with `--pack product-discovery` for discovery / interview tooling.)
|
|
15
|
+
|
|
16
|
+
**You reach for this when:** you switch between investor pitch, hiring decision, product spec, and unit-economics modeling in the same week — and need cross-domain skills that respect a board-defensible bar.
|
|
17
|
+
|
|
18
|
+
| Artefact | What it does |
|
|
19
|
+
|---|---|
|
|
20
|
+
| [`/refine-prompt`](../.agent-src/skills/refine-prompt/SKILL.md) | Reconstruct a free-form prompt into actionable AC + assumptions + confidence band before the engine plans |
|
|
21
|
+
| [`/work`](../.agent-src/commands/work.md) | Drive a free-form prompt end-to-end through refine → score → plan → implement → test → verify → report |
|
|
22
|
+
| [`/grill-me`](../.agent-src/commands/grill-me.md) | Interactive grill-style interview that sharpens a fuzzy plan / idea into a copyable Markdown pitch |
|
|
23
|
+
| [`/optimize-prompt`](../.agent-src/commands/optimize-prompt.md) | Optimize a raw prompt for ChatGPT / Claude / Gemini via the 4-D methodology |
|
|
24
|
+
| [`decision-record`](../.agent-src/skills/decision-record/SKILL.md) | Lock a trade-off — options · trade-offs · consequences — before the ADR file is written |
|
|
25
|
+
| [`fundraising-narrative`](../.agent-src/skills/fundraising-narrative/SKILL.md) | Why-now / why-us / why-this framing, market-size reasoning, traction-story construction |
|
|
26
|
+
| [`okr-tree-modeling`](../.agent-src/skills/okr-tree-modeling/SKILL.md) | Decompose a company objective into team OKRs; audit a draft tree for measurability and laddering |
|
|
27
|
+
| [`voc-extract`](../.agent-src/skills/voc-extract/SKILL.md) | Extract Voice-of-Customer themes from existing artefacts — GH issues, PR threads, Sentry patterns |
|
|
28
|
+
| [`dcf-modeling`](../.agent-src/skills/dcf-modeling/SKILL.md) | Valuation cognition for a CFO / finance-partner — DCF, WACC, terminal value, sensitivity |
|
|
29
|
+
| [`runway-cognition`](../.agent-src/skills/runway-cognition/SKILL.md) | Cash runway, burn shape, fundraise triggers, layoff-vs-cut-vs-grow decisions |
|
|
30
|
+
|
|
31
|
+
→ Pack details: [`packages/founder-strategy/`](../packages/founder-strategy/) · Role guide: [`docs/getting-started-by-role.md#founder`](getting-started-by-role.md#founder-early-stage-operator-wearing-every-hat)
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Featured for Content Creators
|
|
36
|
+
|
|
37
|
+
**Install:** `npx -y @event4u/agent-config init --pack ai-video`
|
|
38
|
+
(Writers / marketers without video: pair with `--pack gtm-marketing` for editorial / brand tooling.)
|
|
39
|
+
|
|
40
|
+
**You reach for this when:** you draft blog posts, marketing emails, launch copy, release announcements, or produce AI-generated video — and need brand-voice discipline plus a cinematic-grade prompting pipeline more than code-quality enforcement.
|
|
41
|
+
|
|
42
|
+
| Artefact | What it does |
|
|
43
|
+
|---|---|
|
|
44
|
+
| [`/video:from-script`](../.agent-src/commands/video/from-script.md) | End-to-end pipeline: script → character-locked image → motion + audio prompt → provider render → stitched clip |
|
|
45
|
+
| [`/video:scene`](../.agent-src/commands/video/scene.md) | Render a single scene from an existing blueprint against the configured provider adapter |
|
|
46
|
+
| [`/video:storyboard`](../.agent-src/commands/video/storyboard.md) | Expand a one-line idea into the 12-block Cinematic Scene Blueprint (provider-agnostic) |
|
|
47
|
+
| [`pixar-storyteller`](../.agent-src/skills/pixar-storyteller/SKILL.md) | Turn an idea into a Pixar-style animation prompt — character sheet, scene, image, video — anchored in emotional beat, want, obstacle |
|
|
48
|
+
| [`motion-choreographer`](../.agent-src/skills/motion-choreographer/SKILL.md) | Turn a locked still + blueprint into a provider-tuned motion prompt — camera, primary + secondary motion, physics, native-audio sync |
|
|
49
|
+
| [`canvas-design`](../.agent-src/skills/canvas-design/SKILL.md) | Create static visual art — posters, marketing visuals, brand assets, PDF / PNG design pieces |
|
|
50
|
+
| [`voice-and-tone-design`](../.agent-src/skills/voice-and-tone-design/SKILL.md) | Define and audit brand voice — voice attributes, tone-by-context matrix, consistency review |
|
|
51
|
+
| [`editorial-calendar`](../.agent-src/skills/editorial-calendar/SKILL.md) | Cadence shape — evergreen vs campaign vs reactive, beat-mapping across channel stages, content-debt management |
|
|
52
|
+
|
|
53
|
+
`AIV_DRYRUN=true` is the mandatory default for video pipelines — no provider call, no spend until you opt in.
|
|
54
|
+
|
|
55
|
+
→ Pack details: [`packages/ai-video/`](../packages/ai-video/) · Role guide: [`docs/getting-started-by-role.md#creator`](getting-started-by-role.md#creator-writer-marketer-indie-content-shop)
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Featured for Engineering Leads
|
|
60
|
+
|
|
61
|
+
**Install:** `npx -y @event4u/agent-config init --pack engineering-base`
|
|
62
|
+
(Stack-specific add-ons: `--pack laravel`, `--pack nextjs`, `--pack symfony`, `--pack react`, `--pack typescript`.)
|
|
63
|
+
|
|
64
|
+
**You reach for this when:** you write code daily and want testing / quality / git / CI / security guardrails baked into the agent's behavior — covering both the daily loop (`/work`, `/commit`) and the review surface (`/review-changes`, judges).
|
|
65
|
+
|
|
66
|
+
| Artefact | What it does |
|
|
67
|
+
|---|---|
|
|
68
|
+
| [`/work`](../.agent-src/commands/work.md) | Free-form prompt end-to-end loop — refine → plan → implement → test → verify, confidence-band gated |
|
|
69
|
+
| [`/implement-ticket`](../.agent-src/commands/implement-ticket.md) | Drive a Jira / Linear ticket end-to-end — same loop, ticket-anchored |
|
|
70
|
+
| [`/review-changes`](../.agent-src/commands/review-changes.md) | Self-review local changes before creating a PR — dispatches to five specialized judges and consolidates verdicts |
|
|
71
|
+
| [`/commit`](../.agent-src/commands/commit.md) | Stage and commit all uncommitted changes — splits into logical commits following Conventional Commits |
|
|
72
|
+
| [`judge-bug-hunter`](../.agent-src/skills/judge-bug-hunter/SKILL.md) | Correctness review — null-safety, edge cases, off-by-one, races, error handling |
|
|
73
|
+
| [`judge-code-quality`](../.agent-src/skills/judge-code-quality/SKILL.md) | Readability review — naming, single-responsibility, DRY, dead code, codebase-convention drift |
|
|
74
|
+
| [`judge-security-auditor`](../.agent-src/skills/judge-security-auditor/SKILL.md) | Security review — authZ, injection, secrets, unsafe deserialization, SSRF, XSS, mass assignment |
|
|
75
|
+
| [`judge-test-coverage`](../.agent-src/skills/judge-test-coverage/SKILL.md) | Test review — missing assertions, uncovered branches, over-mocking, regression coverage |
|
|
76
|
+
| [`playwright-architect`](../.agent-src/skills/playwright-architect/SKILL.md) | Shape a Playwright suite — locator strategy, Page Object boundaries, fixture composition, flake prevention |
|
|
77
|
+
| [`threat-modeling`](../.agent-src/skills/threat-modeling/SKILL.md) | Pre-implementation threat model — trust boundaries + abuse cases mapped to files, BEFORE the first line of code |
|
|
78
|
+
|
|
79
|
+
→ Pack details: [`packages/engineering-base/`](../packages/engineering-base/) · Role guide: [`docs/getting-started-by-role.md#developer`](getting-started-by-role.md#developer-the-original-audience)
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Lint contract
|
|
84
|
+
|
|
85
|
+
Every entry above MUST resolve in [`dist/discovery/discovery-manifest.json`](../dist/discovery/discovery-manifest.json). The check is automated:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
task lint-featured-skills
|
|
89
|
+
# or directly:
|
|
90
|
+
python3 scripts/lint_featured_skills.py
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
CI runs this in `taskfiles/ci-fast.yml`. Stale entries (renamed / removed skill or command) fail the build. See [`scripts/lint_featured_skills.py`](../scripts/lint_featured_skills.py) for the matcher.
|
|
94
|
+
|
|
95
|
+
→ Browse all ~218 active skills: [`.agent-src/skills/`](../.agent-src/skills/) · all ~129 commands: [`.agent-src/commands/`](../.agent-src/commands/)
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
`agent-config` ships ~210 skills, ~67 rules, and ~124 commands. You do not need all of them. Each role below filters to the slice that pays back in week one; the rest stays available and shows up on demand when a task references it.
|
|
6
6
|
|
|
7
|
+
> **Quickstart for every role.** Run `npx -y @event4u/agent-config init` — the browser wizard auto-launches and walks you through role, pack, and identity. Headless install path lives at [`docs/wizard.md`](wizard.md#headless--ci--no-browser). The wizard writes `.agent-settings.yml`, `.augment/`, and `.claude/` atomically; nothing leaves your disk.
|
|
8
|
+
|
|
7
9
|
> **Eval-gated messaging note.** Until `task bench --corpus non-dev` reports `selection_accuracy >= 0.60` (step-12 Phase 1 exit), this page is documentation, not marketing. The skills listed below are the candidates the corpus tests against; their description quality is what the eval validates.
|
|
8
10
|
|
|
9
11
|
---
|
|
@@ -16,7 +18,9 @@
|
|
|
16
18
|
- [`messaging-architecture`](../.agent-src/skills/messaging-architecture/SKILL.md) — primary message + supporting proofs + audience-by-message matrix.
|
|
17
19
|
- [`editorial-calendar`](../.agent-src/skills/editorial-calendar/SKILL.md) — evergreen vs campaign vs reactive cadence across channels.
|
|
18
20
|
|
|
19
|
-
### Video
|
|
21
|
+
### AI Video Pipeline
|
|
22
|
+
|
|
23
|
+
Cinematic-blueprint approach: the agent expands your script into a 12-block scene plan, locks a character identity, then drives the rendering provider you have chosen. Provider-agnostic and dry-run-by-default.
|
|
20
24
|
|
|
21
25
|
- [`/video:from-script`](../.agent-src/commands/video/from-script.md) — end-to-end pipeline: script → character-locked image → motion+audio prompt → provider render → stitched clip.
|
|
22
26
|
- [`/video:storyboard`](../.agent-src/commands/video/storyboard.md) — expand a one-line idea into the 12-block Cinematic Scene Blueprint (provider-agnostic).
|
|
@@ -26,6 +30,10 @@
|
|
|
26
30
|
|
|
27
31
|
`AIV_DRYRUN=true` is the mandatory default — no provider call, no spend until you opt in.
|
|
28
32
|
|
|
33
|
+
**Try the first win →** [`pack-ai-video/FIRST_WIN.md`](../packages/pack-ai-video/FIRST_WIN.md) — one-line idea to a provider-tuned motion prompt in ~12 minutes.
|
|
34
|
+
|
|
35
|
+
> **What this is not:** the package does **not** host a video model. It orchestrates prompts against the provider you select (Veo, Kling, Sora, Runway, …). Trust level is set by the provider's adapter lifecycle tier — see [`provider-lifecycle-discipline`](../.agent-src/rules/provider-lifecycle-discipline.md). You pay the provider directly, the package never sees your API key.
|
|
36
|
+
|
|
29
37
|
**Install path:** **MCP recommended.** Claude Desktop is the lowest-friction entry; no terminal required. See [`docs/mcp.md`](mcp.md). CLI install works too if you already use a code editor.
|
|
30
38
|
|
|
31
39
|
---
|
|
@@ -38,6 +46,8 @@
|
|
|
38
46
|
- [`unit-economics-modeling`](../.agent-src/skills/unit-economics-modeling/SKILL.md) — CAC, LTV, payback, contribution margin per customer.
|
|
39
47
|
- [`fundraising-narrative`](../.agent-src/skills/fundraising-narrative/SKILL.md) — why-now / why-us / why-this framing, market-size reasoning.
|
|
40
48
|
|
|
49
|
+
**Try the first win →** [`pack-founder-strategy/FIRST_WIN.md`](../packages/pack-founder-strategy/FIRST_WIN.md) — investor question reshaped into a defensible memo in ~10 minutes.
|
|
50
|
+
|
|
41
51
|
**Install path:** **MCP for advisory work, CLI when you touch code.** Claude Desktop covers strategy / finance / narrative; CLI is needed only when you sit in the repo with the dev team.
|
|
42
52
|
|
|
43
53
|
---
|
|
@@ -74,6 +84,10 @@
|
|
|
74
84
|
- [`deal-qualification-meddic`](../.agent-src/skills/deal-qualification-meddic/SKILL.md) — MEDDIC slots with evidence, inversion test, disqualification heuristic.
|
|
75
85
|
- [`release-comms`](../.agent-src/skills/release-comms/SKILL.md) — value-not-feature framing, audience-segmented surfaces.
|
|
76
86
|
|
|
87
|
+
Use the AI Video skills (see [Creator → AI Video Pipeline](#ai-video-pipeline)) when you need a launch asset, not a documentary — 8-second hero clips, social cutdowns, or feature-announcement teasers.
|
|
88
|
+
|
|
89
|
+
**Try the first win →** [`pack-gtm-sales/FIRST_WIN.md`](../packages/pack-gtm-sales/FIRST_WIN.md) — single deal to a MEDDIC scorecard with inversion test in ~7 minutes.
|
|
90
|
+
|
|
77
91
|
**Install path:** **MCP recommended.** GTM artifacts are documents, decks, and Notion pages; Claude Desktop is the natural home.
|
|
78
92
|
|
|
79
93
|
---
|
|
@@ -86,6 +100,10 @@
|
|
|
86
100
|
- [`scenario-modeling`](../.agent-src/skills/scenario-modeling/SKILL.md) — base / upside / downside, three-statement modeling, sensitivity.
|
|
87
101
|
- [`privacy-review`](../.agent-src/skills/privacy-review/SKILL.md) — GDPR / CCPA / HIPAA fit, cross-border transfer, breach-impact triage.
|
|
88
102
|
|
|
103
|
+
Outputs are flagged for human-accountant review by default — the agent surfaces a trust banner on every forecast / scenario reply so downstream readers see the human-in-the-loop expectation. See [`finance-safety-floor`](../.agent-src/rules/finance-safety-floor.md).
|
|
104
|
+
|
|
105
|
+
**Try the first win →** [`pack-finance-basic/FIRST_WIN.md`](../packages/pack-finance-basic/FIRST_WIN.md) — runway question to a base/upside/downside narrative with trust banner in ~8 minutes. People-leaders running 1:1s: [`pack-ops-people/FIRST_WIN.md`](../packages/pack-ops-people/FIRST_WIN.md) — 1:1 cadence audit to a concrete recommendation in ~6 minutes.
|
|
106
|
+
|
|
89
107
|
**Install path:** **MCP recommended.** Finance / ops workflows are spreadsheet- and document-heavy; the CLI buys nothing here unless you also export models into a code repo.
|
|
90
108
|
|
|
91
109
|
---
|
package/docs/getting-started.md
CHANGED
|
@@ -106,7 +106,7 @@ Your agent is now:
|
|
|
106
106
|
- **Respecting your codebase** — no conflicting patterns
|
|
107
107
|
- **Following standards** — consistent code quality
|
|
108
108
|
|
|
109
|
-
This is enforced automatically by
|
|
109
|
+
This is enforced automatically by 75 rules. No configuration needed.
|
|
110
110
|
|
|
111
111
|
---
|
|
112
112
|
|
|
@@ -146,7 +146,7 @@ Your agent now understands slash commands:
|
|
|
146
146
|
| `/quality-fix` | Run and fix all quality checks |
|
|
147
147
|
| `/chat-history` | Inspect the persistent chat-history log (read-only `show`) |
|
|
148
148
|
|
|
149
|
-
→ [Browse all
|
|
149
|
+
→ [Browse all 129 active commands](../.agent-src/commands/)
|
|
150
150
|
|
|
151
151
|
---
|
|
152
152
|
|
|
@@ -86,14 +86,17 @@ intentionally pin an older version of the manifest.
|
|
|
86
86
|
|
|
87
87
|
## Scope migration
|
|
88
88
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
89
|
+
Under [ADR-020](../../decisions/ADR-020-global-only-consumer-scope.md)
|
|
90
|
+
global is the only consumer scope. Consumers carrying a pre-2.5
|
|
91
|
+
project-scope payload move to global with the one-shot
|
|
92
|
+
`npx @event4u/agent-config migrate-to-global` subcommand — it copies
|
|
93
|
+
each tool's project payload into the matching user-scope path, drops
|
|
94
|
+
the bridge marker, and removes the legacy project artefacts.
|
|
95
|
+
|
|
96
|
+
For maintainers running `AGENT_CONFIG_DEV_MODE=1`, project-scope
|
|
97
|
+
re-installs remain available; the installer still detects scope
|
|
98
|
+
conflicts and refuses to rewrite without `--force`. `validate`
|
|
99
|
+
afterwards confirms the new state.
|
|
97
100
|
|
|
98
101
|
Reasoning: scope is a project-wide decision; flipping it silently
|
|
99
102
|
would surprise other team members who never asked for the change. The
|
|
@@ -142,9 +142,61 @@ in the other audience must find their link within the first screen too.
|
|
|
142
142
|
|
|
143
143
|
---
|
|
144
144
|
|
|
145
|
+
## First-screen contract
|
|
146
|
+
|
|
147
|
+
The "first screen" is roughly the **first ~40 rendered lines** (one
|
|
148
|
+
laptop viewport on GitHub at default zoom). Every README must place
|
|
149
|
+
the following inside the first screen:
|
|
150
|
+
|
|
151
|
+
1. **Project name** as `# H1`
|
|
152
|
+
2. **One-sentence pitch** — what it is, who it's for
|
|
153
|
+
3. **Status badges** (CI, version, license) when they exist
|
|
154
|
+
4. **Primary CTA** — either the install command or an explicit deep
|
|
155
|
+
link to the install section
|
|
156
|
+
5. **Audience marker** — at least a chip / sentence telling the reader
|
|
157
|
+
which audience this README is written for
|
|
158
|
+
|
|
159
|
+
What does **not** belong on the first screen: feature lists longer
|
|
160
|
+
than a single line, architecture diagrams, contributor notes, license
|
|
161
|
+
boilerplate.
|
|
162
|
+
|
|
163
|
+
The skills `readme-writing`, `readme-writing-package`, and
|
|
164
|
+
`readme-reviewer` enforce this checklist verbatim. Drift here is a
|
|
165
|
+
hard finding, not a stylistic preference.
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## Banner / visual-identity preservation
|
|
170
|
+
|
|
171
|
+
When a README already carries a banner, hero image, badge row, or
|
|
172
|
+
official logo lockup, the rewrite must preserve it **byte-identical**
|
|
173
|
+
unless the user explicitly asks to change it. This includes:
|
|
174
|
+
|
|
175
|
+
- The `<p align="center">` / banner image block (with its surrounding
|
|
176
|
+
HTML and the source URL of the image asset)
|
|
177
|
+
- The status / npm / build badge block, including the exact badge
|
|
178
|
+
order if it was deliberate
|
|
179
|
+
- Any profile / role / persona grid that establishes audience routing
|
|
180
|
+
|
|
181
|
+
The re-analysis gate in each writing skill captures the exact line
|
|
182
|
+
range as `visual_keep:` in the evidence ledger; the rewrite must
|
|
183
|
+
echo those lines without paraphrase. If the badges' **counts** are
|
|
184
|
+
out of date, propose new counts via the link-delta / currency-check
|
|
185
|
+
output — do not silently rewrite the badge HTML to update numbers
|
|
186
|
+
without surfacing the diff.
|
|
187
|
+
|
|
188
|
+
Visual changes that are allowed without explicit user opt-in:
|
|
189
|
+
|
|
190
|
+
- Repointing a badge whose `href` 404s to its current location
|
|
191
|
+
- Repointing a banner image whose source path moved, when the file
|
|
192
|
+
is unambiguously the same asset
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
145
196
|
## Validation checklist
|
|
146
197
|
|
|
147
|
-
- [ ] First screen answers what / why / install
|
|
198
|
+
- [ ] First screen answers what / why / install (see *First-screen contract*)
|
|
199
|
+
- [ ] Banner / badge block preserved byte-identical (see *Banner / visual-identity preservation*)
|
|
148
200
|
- [ ] Size is below the "overloaded" threshold, or splitting is in place
|
|
149
201
|
- [ ] ToC present if > 150 lines or > 6 top-level sections
|
|
150
202
|
- [ ] No duplication between README and `/docs/`
|
package/docs/installation.md
CHANGED
|
@@ -1,23 +1,27 @@
|
|
|
1
1
|
# Installation
|
|
2
2
|
|
|
3
|
-
**Principle:** Global
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
>
|
|
11
|
-
>
|
|
12
|
-
>
|
|
13
|
-
|
|
14
|
-
|
|
3
|
+
**Principle:** Global is the only consumer scope. `init` writes to
|
|
4
|
+
user-scope paths (`~/.event4u/agent-config/`, `~/.claude/`,
|
|
5
|
+
`~/.cursor/`, …); the project tree only gets `agents/overrides/`
|
|
6
|
+
and `agents/.event4u-bridge.yml`. Opt-in `export` if a team wants
|
|
7
|
+
a tool's config committed to a repo. No Task, no Make, no build
|
|
8
|
+
tools required.
|
|
9
|
+
|
|
10
|
+
> **v2.5+** — `npx @event4u/agent-config init` always installs
|
|
11
|
+
> globally. The `--project` / `--scope=project` flag is no longer
|
|
12
|
+
> exposed to consumers; project-scope survives only behind the
|
|
13
|
+
> maintainer-only `AGENT_CONFIG_DEV_MODE=1` flag (see
|
|
14
|
+
> [`docs/maintainers/dev-mode.md`](maintainers/dev-mode.md)). The
|
|
15
|
+
> legacy `--global` flag is accepted as a no-op for back-compat.
|
|
16
|
+
> Rationale: [ADR-020](decisions/ADR-020-global-only-consumer-scope.md).
|
|
17
|
+
|
|
18
|
+
The install records itself in `~/.event4u/agent-config/installed.lock`
|
|
15
19
|
(schema_version, agent_config_version, installed_at, tools[]; the legacy
|
|
16
20
|
`~/.config/agent-config/installed.lock` is read as a fallback). `npx
|
|
17
21
|
@event4u/agent-config update` keeps that manifest in lockstep
|
|
18
22
|
with the project pin in `.agent-settings.yml`. A version-mismatched
|
|
19
|
-
re-run of `init
|
|
20
|
-
|
|
23
|
+
re-run of `init` is refused with exit code 1 until you `update` or
|
|
24
|
+
pass `--force`.
|
|
21
25
|
|
|
22
26
|
To commit a specific tool's config into a project repo, use:
|
|
23
27
|
|
|
@@ -311,6 +315,15 @@ Under the hood:
|
|
|
311
315
|
|
|
312
316
|
- `scripts/install.sh` — payload sync (callable directly for sync-only runs).
|
|
313
317
|
- `scripts/install.py` — bridge files (callable directly for bridge-only runs).
|
|
318
|
+
Two install.py-specific flags worth knowing:
|
|
319
|
+
- `--dry-run` prints a plan summary (profile · scope · tools · target ·
|
|
320
|
+
wizard auto-launch decision) and exits 0 without writing files or
|
|
321
|
+
spawning subprocesses. Distinct from the bash wrapper's `--dry-run`,
|
|
322
|
+
which only skips bridges.
|
|
323
|
+
- `--no-ui` suppresses the post-install browser-wizard auto-launch.
|
|
324
|
+
Also honored via `AGENT_CONFIG_NO_UI=1`. CI runners (`CI=1`) and
|
|
325
|
+
non-TTY stdouts auto-suppress regardless. See
|
|
326
|
+
[`docs/wizard.md § Auto-launch`](wizard.md#auto-launch-from-npx--init).
|
|
314
327
|
|
|
315
328
|
A full run creates:
|
|
316
329
|
|