@event4u/agent-config 1.15.0 → 1.16.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/bug-fix.md +1 -1
- package/.agent-src/commands/bug-investigate.md +2 -2
- package/.agent-src/commands/chat-history-checkpoint.md +1 -1
- package/.agent-src/commands/chat-history-clear.md +1 -1
- package/.agent-src/commands/chat-history.md +1 -1
- package/.agent-src/commands/check-current-md.md +1 -1
- package/.agent-src/commands/council-design.md +96 -0
- package/.agent-src/commands/council-optimize.md +115 -0
- package/.agent-src/commands/council-pr.md +123 -0
- package/.agent-src/commands/council.md +219 -0
- package/.agent-src/commands/create-pr.md +23 -0
- package/.agent-src/commands/do-and-judge.md +3 -3
- package/.agent-src/commands/do-in-steps.md +4 -4
- 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 +8 -0
- package/.agent-src/commands/feature-explore.md +6 -1
- package/.agent-src/commands/feature-plan.md +33 -2
- package/.agent-src/commands/feature-refactor.md +5 -0
- package/.agent-src/commands/feature-roadmap.md +6 -1
- package/.agent-src/commands/feature.md +58 -0
- package/.agent-src/commands/fix-ci.md +5 -0
- package/.agent-src/commands/fix-portability.md +5 -0
- package/.agent-src/commands/fix-pr-bot-comments.md +5 -0
- package/.agent-src/commands/fix-pr-comments.md +5 -0
- package/.agent-src/commands/fix-pr-developer-comments.md +5 -0
- package/.agent-src/commands/fix-references.md +5 -0
- package/.agent-src/commands/fix-seeder.md +5 -0
- package/.agent-src/commands/fix.md +60 -0
- package/.agent-src/commands/jira-ticket.md +1 -1
- package/.agent-src/commands/judge.md +1 -1
- package/.agent-src/commands/memory-add.md +3 -3
- package/.agent-src/commands/memory-full.md +2 -2
- package/.agent-src/commands/memory-promote.md +2 -2
- package/.agent-src/commands/mode.md +5 -5
- package/.agent-src/commands/onboard.md +3 -3
- package/.agent-src/commands/optimize-agents.md +6 -1
- package/.agent-src/commands/optimize-augmentignore.md +5 -0
- package/.agent-src/commands/optimize-rtk-filters.md +5 -0
- package/.agent-src/commands/optimize-skills.md +6 -1
- package/.agent-src/commands/optimize.md +54 -0
- package/.agent-src/commands/propose-memory.md +2 -2
- package/.agent-src/commands/review-changes.md +26 -1
- package/.agent-src/commands/review-routing.md +1 -1
- package/.agent-src/commands/roadmap-create.md +29 -2
- package/.agent-src/commands/set-cost-profile.md +3 -3
- package/.agent-src/commands/sync-agent-settings.md +2 -2
- package/.agent-src/commands/tests-create.md +1 -1
- package/.agent-src/commands/upstream-contribute.md +1 -1
- package/.agent-src/contexts/authority/commit-mechanics.md +57 -0
- package/.agent-src/contexts/authority/destructive-mechanics.md +66 -0
- package/.agent-src/contexts/authority/scope-mechanics.md +87 -0
- package/.agent-src/contexts/execution/autonomy-detection.md +54 -0
- package/.agent-src/contexts/execution/autonomy-examples.md +90 -0
- package/.agent-src/contexts/execution/autonomy-mechanics.md +29 -0
- package/.agent-src/contexts/execution/verification-mechanics.md +80 -0
- package/.agent-src/personas/README.md +1 -1
- package/.agent-src/rules/agent-authority.md +24 -0
- package/.agent-src/rules/architecture.md +1 -1
- package/.agent-src/rules/artifact-drafting-protocol.md +1 -1
- package/.agent-src/rules/artifact-engagement-recording.md +1 -1
- package/.agent-src/rules/ask-when-uncertain.md +1 -1
- package/.agent-src/rules/autonomous-execution.md +78 -114
- package/.agent-src/rules/capture-learnings.md +1 -1
- package/.agent-src/rules/chat-history-cadence.md +3 -3
- package/.agent-src/rules/chat-history-ownership.md +3 -3
- package/.agent-src/rules/chat-history-visibility.md +3 -3
- package/.agent-src/rules/{command-suggestion.md → command-suggestion-policy.md} +7 -7
- package/.agent-src/rules/commit-conventions.md +1 -1
- package/.agent-src/rules/commit-policy.md +14 -42
- package/.agent-src/rules/context-hygiene.md +3 -3
- package/.agent-src/rules/direct-answers.md +1 -1
- package/.agent-src/rules/docs-sync.md +1 -1
- package/.agent-src/rules/e2e-testing.md +1 -1
- package/.agent-src/rules/guidelines.md +4 -4
- package/.agent-src/rules/improve-before-implement.md +2 -2
- package/.agent-src/rules/language-and-tone.md +37 -96
- package/.agent-src/rules/minimal-safe-diff.md +3 -3
- package/.agent-src/rules/model-recommendation.md +4 -4
- package/.agent-src/rules/no-cheap-questions.md +89 -0
- package/.agent-src/rules/non-destructive-by-default.md +15 -49
- package/.agent-src/rules/onboarding-gate.md +5 -5
- package/.agent-src/rules/review-routing-awareness.md +9 -9
- package/.agent-src/rules/roadmap-progress-sync.md +26 -33
- package/.agent-src/rules/role-mode-adherence.md +2 -2
- package/.agent-src/rules/scope-control.md +65 -46
- package/.agent-src/rules/security-sensitive-stop.md +2 -2
- package/.agent-src/rules/size-enforcement.md +1 -1
- package/.agent-src/rules/think-before-action.md +5 -5
- package/.agent-src/rules/token-efficiency.md +4 -4
- package/.agent-src/rules/{ui-audit-before-build.md → ui-audit-gate.md} +3 -3
- package/.agent-src/rules/user-interaction.md +3 -3
- package/.agent-src/rules/verify-before-complete.md +12 -67
- package/.agent-src/scripts/update_roadmap_progress.py +9 -4
- package/.agent-src/skills/ai-council/SKILL.md +333 -0
- package/.agent-src/skills/api-endpoint/SKILL.md +2 -2
- package/.agent-src/skills/blade-ui/SKILL.md +1 -1
- package/.agent-src/skills/blast-radius-analyzer/SKILL.md +1 -1
- package/.agent-src/skills/bug-analyzer/SKILL.md +1 -1
- package/.agent-src/skills/command-routing/SKILL.md +1 -1
- package/.agent-src/skills/command-writing/SKILL.md +1 -1
- package/.agent-src/skills/conventional-commits-writing/SKILL.md +1 -1
- package/.agent-src/skills/copilot-agents-optimization/SKILL.md +2 -2
- package/.agent-src/skills/developer-like-execution/SKILL.md +2 -2
- package/.agent-src/skills/flux/SKILL.md +1 -1
- package/.agent-src/skills/git-workflow/SKILL.md +1 -1
- package/.agent-src/skills/guideline-writing/SKILL.md +11 -11
- package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +4 -4
- package/.agent-src/skills/livewire/SKILL.md +1 -1
- package/.agent-src/skills/override-management/SKILL.md +2 -2
- package/.agent-src/skills/php-coder/SKILL.md +1 -1
- package/.agent-src/skills/playwright-testing/SKILL.md +2 -2
- package/.agent-src/skills/readme-reviewer/SKILL.md +1 -1
- package/.agent-src/skills/readme-writing/SKILL.md +1 -1
- package/.agent-src/skills/readme-writing-package/SKILL.md +1 -1
- package/.agent-src/skills/receiving-code-review/SKILL.md +1 -1
- package/.agent-src/skills/review-routing/SKILL.md +2 -2
- package/.agent-src/skills/rule-writing/SKILL.md +1 -1
- package/.agent-src/skills/skill-reviewer/SKILL.md +1 -1
- package/.agent-src/skills/skill-writing/SKILL.md +3 -3
- package/.agent-src/skills/subagent-orchestration/SKILL.md +1 -0
- package/.agent-src/skills/systematic-debugging/SKILL.md +1 -1
- package/.agent-src/skills/upstream-contribute/SKILL.md +1 -1
- package/.agent-src/skills/validate-feature-fit/SKILL.md +2 -2
- package/.agent-src/skills/{verify-before-complete → verify-completion-evidence}/SKILL.md +2 -2
- package/.agent-src/templates/agent-settings.md +8 -8
- package/.agent-src/templates/contexts/auth-model.md +1 -1
- package/.agent-src/templates/scripts/README.md +2 -2
- package/.agent-src/templates/scripts/telemetry/aggregator.py +16 -1
- package/.agent-src/templates/scripts/telemetry/engagement.py +59 -0
- package/.agent-src/templates/scripts/telemetry/report_renderer.py +28 -1
- package/.agent-src/templates/scripts/telemetry_record.py +14 -1
- package/.claude-plugin/marketplace.json +10 -2
- package/AGENTS.md +11 -9
- package/CHANGELOG.md +123 -1
- package/README.md +28 -30
- package/config/agent-settings.template.yml +58 -1
- package/config/gitignore-block.txt +3 -0
- package/docs/architecture.md +4 -4
- package/docs/catalog.md +331 -0
- package/docs/contracts/STABILITY.md +39 -0
- package/docs/contracts/adr-command-suggestion.md +3 -3
- package/docs/contracts/adr-product-ui-track.md +2 -2
- package/docs/contracts/agent-memory-contract.md +2 -2
- package/docs/contracts/artifact-engagement-flow.md +1 -1
- package/docs/contracts/command-clusters.md +2 -2
- package/docs/contracts/command-suggestion-flow.md +3 -3
- package/docs/contracts/implement-ticket-flow.md +2 -2
- package/docs/contracts/linear-ai-rules-inclusion.md +1 -1
- package/docs/contracts/load-context-schema.md +186 -0
- package/docs/contracts/rule-interactions.yml +96 -0
- package/docs/contracts/rule-priority-hierarchy.md +87 -0
- package/docs/contracts/ui-track-flow.md +1 -1
- package/docs/customization.md +14 -0
- package/docs/end-to-end-walkthroughs.md +165 -0
- package/docs/getting-started.md +26 -8
- package/docs/github-topics.md +12 -3
- package/docs/guidelines/agent-infra/language-and-tone-examples.md +79 -0
- package/{.agent-src → docs}/guidelines/docs/readme-size-and-splitting.md +26 -25
- package/docs/guidelines/php/git.md +164 -0
- package/docs/migrations/commands-1.15.0.md +1 -1
- package/docs/showcase.md +9 -4
- package/docs/skills-catalog.md +14 -8
- package/docs/ui-track-mental-model.md +2 -2
- package/llms.txt +13 -7
- package/package.json +1 -1
- package/scripts/agent-config +23 -0
- package/scripts/ai_council/__init__.py +39 -0
- package/scripts/ai_council/_default_prices.py +41 -0
- package/scripts/ai_council/_one_off_rebalancing_audit.py +149 -0
- package/scripts/ai_council/_one_off_roundtrip.py +106 -0
- package/scripts/ai_council/budget_guard.py +172 -0
- package/scripts/ai_council/bundler.py +261 -0
- package/scripts/ai_council/clients.py +381 -0
- package/scripts/ai_council/modes.py +127 -0
- package/scripts/ai_council/orchestrator.py +350 -0
- package/scripts/ai_council/pricing.py +213 -0
- package/scripts/ai_council/project_context.py +159 -0
- package/scripts/ai_council/prompts.py +232 -0
- package/scripts/ai_council/session.py +144 -0
- package/scripts/check_always_budget.py +126 -0
- package/scripts/check_augmentignore.py +69 -0
- package/scripts/check_command_count_messaging.py +120 -0
- package/scripts/check_portability.py +55 -0
- package/scripts/check_public_catalog_links.py +122 -0
- package/scripts/check_references.py +4 -1
- package/scripts/check_roadmap_trackable.py +111 -0
- package/scripts/command_suggester/cooldown.py +1 -1
- package/scripts/generate_index.py +266 -0
- package/scripts/install_anthropic_key.sh +5 -0
- package/scripts/install_openai_key.sh +106 -0
- package/scripts/lint_load_context.py +163 -0
- package/scripts/schemas/command.schema.json +20 -0
- package/scripts/schemas/rule.schema.json +10 -0
- package/scripts/skill_linter.py +12 -4
- package/scripts/sync_agent_settings.py +1 -1
- package/scripts/update_counts.py +9 -4
- package/scripts/update_prices.py +124 -0
- package/.agent-src/guidelines/php/git.md +0 -96
- /package/.agent-src/rules/{slash-commands.md → slash-command-routing-policy.md} +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/agent-interaction-and-decision-quality.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/break-glass-usage.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/developer-judgment.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/engineering-memory-data-format.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/layered-settings.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/memory-access.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/naming.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/output-patterns.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/review-routing-data-format.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/role-contracts.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/role-mode-router.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/runtime-layer.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/self-improvement-pipeline.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/size-and-scope.md +0 -0
- /package/{.agent-src → docs}/guidelines/agent-infra/tool-integration.md +0 -0
- /package/{.agent-src → docs}/guidelines/e2e/playwright.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/api-design.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/artisan-commands.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/blade-ui.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/controllers.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/database.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/eloquent.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/flux.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/general.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/jobs.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/livewire.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/logging.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/naming.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/patterns/dependency-injection.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/patterns/dtos.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/patterns/events.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/patterns/factory.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/patterns/pipelines.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/patterns/policies.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/patterns/repositories.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/patterns/service-layer.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/patterns/strategy.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/patterns.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/performance.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/resources.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/security.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/sql.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/validations.md +0 -0
- /package/{.agent-src → docs}/guidelines/php/websocket.md +0 -0
|
@@ -101,7 +101,7 @@ These reference Augment-only mechanics — model identity in Augment's
|
|
|
101
101
|
system prompt, Augment's `/slash` command surface, and the Augment
|
|
102
102
|
onboarding flow gated by `.agent-settings.yml`.
|
|
103
103
|
|
|
104
|
-
`model-recommendation`, `onboarding-gate`, `slash-
|
|
104
|
+
`model-recommendation`, `onboarding-gate`, `slash-command-routing-policy`.
|
|
105
105
|
|
|
106
106
|
### Skill-routing only (1)
|
|
107
107
|
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
---
|
|
2
|
+
stability: beta
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# `load_context:` Frontmatter Schema
|
|
6
|
+
|
|
7
|
+
> **Audience:** rule authors and reviewers who want to keep an Always-rule
|
|
8
|
+
> small while making deeper reasoning available on demand.
|
|
9
|
+
> **Linter:** `scripts/lint_load_context.py` (run via `task lint-load-context`).
|
|
10
|
+
> **Companion:** [`rule-priority-hierarchy.md`](rule-priority-hierarchy.md) —
|
|
11
|
+
> hierarchy that decides *which* rule wins when several fire on the same turn.
|
|
12
|
+
|
|
13
|
+
This contract defines the frontmatter convention by which a rule (or
|
|
14
|
+
another context) declares the deeper reading material it relies on.
|
|
15
|
+
The convention is **lazy by default**: declared entries are *available
|
|
16
|
+
to load* when the situation demands them, never auto-loaded into every
|
|
17
|
+
turn.
|
|
18
|
+
|
|
19
|
+
## Schema
|
|
20
|
+
|
|
21
|
+
Two keys, both optional, both top-level frontmatter:
|
|
22
|
+
|
|
23
|
+
```yaml
|
|
24
|
+
---
|
|
25
|
+
type: "always"
|
|
26
|
+
description: "..."
|
|
27
|
+
load_context: # lazy — on-demand reference list
|
|
28
|
+
- .agent-src.uncompressed/contexts/<file>.md
|
|
29
|
+
- agents/contexts/<file>.md
|
|
30
|
+
load_context_eager: # opt-in eager — auto-loaded on rule fire
|
|
31
|
+
- .agent-src.uncompressed/contexts/<file>.md
|
|
32
|
+
---
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
| Key | Loading | When to use |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| `load_context:` | **Lazy.** The agent reads the entry only when the rule's reasoning needs it. | Default. Use for everything that is "available knowledge" rather than "on every turn". |
|
|
38
|
+
| `load_context_eager:` | **Eager.** The entry is concatenated into the active context whenever the rule fires. | Only when the deeper material is needed *every single time* the rule fires. Counts against the combined char budget. |
|
|
39
|
+
|
|
40
|
+
**No default eager-load.** A rule with `load_context:` only does **not**
|
|
41
|
+
auto-load anything; the agent decides per turn. Eager loading is
|
|
42
|
+
opt-in and budget-gated.
|
|
43
|
+
|
|
44
|
+
## Path rules
|
|
45
|
+
|
|
46
|
+
- Paths are repo-root relative.
|
|
47
|
+
- Paths MUST end in `.md`.
|
|
48
|
+
- Allowed roots: `.agent-src.uncompressed/contexts/`, `agents/contexts/`,
|
|
49
|
+
`.agent-src/contexts/` (compressed mirror). Any other root → linter
|
|
50
|
+
error.
|
|
51
|
+
- A rule MAY reference contexts under either tree, but a
|
|
52
|
+
`.agent-src.uncompressed/` rule SHOULD NOT eager-load an
|
|
53
|
+
`agents/contexts/` file (project-local leak into shared package).
|
|
54
|
+
Linter warns on this combination.
|
|
55
|
+
- A context file may itself declare `load_context:` (chain reasoning).
|
|
56
|
+
The linter rejects cycles.
|
|
57
|
+
|
|
58
|
+
## Subdirectory conventions
|
|
59
|
+
|
|
60
|
+
Subdirectories under `contexts/` are **conventional, not enforced**.
|
|
61
|
+
The linter only validates the root prefix; subdirectory layout is a
|
|
62
|
+
documentation contract for human reviewers.
|
|
63
|
+
|
|
64
|
+
Two canonical subdirectories are in production:
|
|
65
|
+
|
|
66
|
+
| Subdir | Holds | First consumer |
|
|
67
|
+
|---|---|---|
|
|
68
|
+
| `contexts/execution/` | runtime decision logic, mechanics, and examples for execution-time rules (autonomy detection, verification mechanics, etc.) | `autonomous-execution` (Phase 2 of `road-to-pr-34-followups`) |
|
|
69
|
+
| `contexts/authority/` | mechanics behind authority gates — what makes commits, scope changes, and git ops legal vs. illegal | `commit-policy` and `scope-control` (Phase 6 of `road-to-pr-34-followups`) |
|
|
70
|
+
|
|
71
|
+
A third subdirectory, `contexts/communication/`, was proposed by the
|
|
72
|
+
PR #34 round-6 review for user-interaction and language-and-tone
|
|
73
|
+
mechanics. It is **not yet created** — the anti-speculation guard in
|
|
74
|
+
Phase 6 forbids creating a context root before its triggering rule
|
|
75
|
+
exists. Add it the same turn as the first migrating rule, not before.
|
|
76
|
+
|
|
77
|
+
A new subdirectory is justified when:
|
|
78
|
+
|
|
79
|
+
- A second rule needs to share contexts with the first one, AND
|
|
80
|
+
- The contexts have a coherent topic (execution, authority, communication, …), AND
|
|
81
|
+
- The triggering rule and its content move at the same time
|
|
82
|
+
(no empty subdir reservations).
|
|
83
|
+
|
|
84
|
+
Single-rule contexts that don't fit one of the canonical topics live
|
|
85
|
+
directly under `contexts/` (see `contexts/model-recommendations.md`,
|
|
86
|
+
`contexts/skills-and-commands.md`).
|
|
87
|
+
|
|
88
|
+
## Combined char-budget guard
|
|
89
|
+
|
|
90
|
+
`load_context_eager:` triggers a budget check:
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
chars(rule.md) + sum(chars(eager_target.md) for each entry) ≤ rule_cap
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
`rule_cap` is the per-rule budget from
|
|
97
|
+
[`road-to-rebalancing.md`](../../agents/roadmaps/road-to-rebalancing.md)
|
|
98
|
+
§ Target architecture:
|
|
99
|
+
|
|
100
|
+
- Always rule: 2,500
|
|
101
|
+
- Auto rule: 4,000
|
|
102
|
+
- Safety rule (`type: "always"` AND covers Hard-Floor topics): 5,000
|
|
103
|
+
|
|
104
|
+
Linter computes the rule's class from frontmatter `type:` and the
|
|
105
|
+
hard-floor allowlist (`non-destructive-by-default`,
|
|
106
|
+
`security-sensitive-stop`). Exceeding the cap → linter error.
|
|
107
|
+
|
|
108
|
+
Lazy `load_context:` does **not** count against the budget — by
|
|
109
|
+
definition it is not loaded into every turn.
|
|
110
|
+
|
|
111
|
+
## Public-vs-internal leak
|
|
112
|
+
|
|
113
|
+
A rule shipped to consumers (`.agent-src.uncompressed/rules/`) may
|
|
114
|
+
declare `load_context:` entries pointing at:
|
|
115
|
+
|
|
116
|
+
- `.agent-src.uncompressed/contexts/` — public, OK.
|
|
117
|
+
- `agents/contexts/` — package-internal, **lint warning** (the entry
|
|
118
|
+
will not exist in consumer projects).
|
|
119
|
+
|
|
120
|
+
Project-local rules may reference either. The linter classifies by
|
|
121
|
+
the rule's tree, not by the target's tree.
|
|
122
|
+
|
|
123
|
+
## No circular references
|
|
124
|
+
|
|
125
|
+
A `load_context:` graph that cycles fails the linter. Cycles are
|
|
126
|
+
defined across both `load_context:` and `load_context_eager:` edges.
|
|
127
|
+
|
|
128
|
+
## Examples
|
|
129
|
+
|
|
130
|
+
### Real consumer — `autonomous-execution`
|
|
131
|
+
|
|
132
|
+
`.agent-src.uncompressed/rules/autonomous-execution.md` is the first
|
|
133
|
+
production rule to declare `load_context:`. Its frontmatter:
|
|
134
|
+
|
|
135
|
+
```yaml
|
|
136
|
+
---
|
|
137
|
+
type: "auto"
|
|
138
|
+
description: "Deciding whether to ask the user or just act on a workflow step — trivial-vs-blocking classification, autonomy opt-in detection, commit default; defers to non-destructive-by-default for the Hard Floor"
|
|
139
|
+
alwaysApply: false
|
|
140
|
+
source: package
|
|
141
|
+
load_context:
|
|
142
|
+
- .agent-src.uncompressed/contexts/execution/autonomy-detection.md
|
|
143
|
+
- .agent-src.uncompressed/contexts/execution/autonomy-mechanics.md
|
|
144
|
+
- .agent-src.uncompressed/contexts/execution/autonomy-examples.md
|
|
145
|
+
---
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Three lazy-loaded contexts, no `load_context_eager:`. The agent reads
|
|
149
|
+
each context only when the corresponding section of the slim rule
|
|
150
|
+
points at it (the rule body cites the same paths in prose so the
|
|
151
|
+
load is intent-driven, not blanket).
|
|
152
|
+
|
|
153
|
+
Pattern proven by this consumer:
|
|
154
|
+
|
|
155
|
+
- **Slim the rule to obligations only** — the 192-line pre-split
|
|
156
|
+
source dropped to 119 lines (≤ 120 target met) by extracting LOGIC
|
|
157
|
+
(detection algorithm), MECHANICS (setting table, cloud behavior),
|
|
158
|
+
and EXAMPLES (anchor phrases, worked cases, failure modes) into
|
|
159
|
+
three separate context files.
|
|
160
|
+
- **Cite, don't duplicate** — the slim rule contains zero
|
|
161
|
+
algorithm/mechanics/example prose; everything moved was physically
|
|
162
|
+
removed (verified by Phase 2.5 obligation diff:
|
|
163
|
+
[`agents/reports/pr-34-phase-2-5-autonomous-execution-obligation-check.md`](../../agents/reports/pr-34-phase-2-5-autonomous-execution-obligation-check.md)).
|
|
164
|
+
- **Lazy by default** — no eager-load is declared; the budget guard
|
|
165
|
+
is therefore a no-op for this rule.
|
|
166
|
+
|
|
167
|
+
`task lint-load-context` reports **1 declarer**, all paths resolve,
|
|
168
|
+
no cycles.
|
|
169
|
+
|
|
170
|
+
## Stability
|
|
171
|
+
|
|
172
|
+
`beta` — schema is settled and serves one production rule
|
|
173
|
+
(`autonomous-execution`). A breaking schema change is a SemVer-minor
|
|
174
|
+
pre-1.0 bump. Adding a new optional key is non-breaking. The first
|
|
175
|
+
consumer surfaced no schema gaps; the next migration batch (roadmap
|
|
176
|
+
`road-to-pr-34-followups` Phase 6 — `commit-policy`, `scope-control`,
|
|
177
|
+
`verify-before-complete`) is the next stress test.
|
|
178
|
+
|
|
179
|
+
## Cross-references
|
|
180
|
+
|
|
181
|
+
- [`rule-priority-hierarchy.md`](rule-priority-hierarchy.md) — which
|
|
182
|
+
rule wins on conflict; this schema is orthogonal (depth, not
|
|
183
|
+
priority).
|
|
184
|
+
- [`rule-interactions.yml`](rule-interactions.yml) — pairwise rule
|
|
185
|
+
interaction matrix.
|
|
186
|
+
- [`STABILITY.md`](STABILITY.md) — beta-tag implications.
|
|
@@ -30,6 +30,9 @@ rules:
|
|
|
30
30
|
- commit-policy
|
|
31
31
|
- ask-when-uncertain
|
|
32
32
|
- verify-before-complete
|
|
33
|
+
- agent-authority
|
|
34
|
+
- language-and-tone
|
|
35
|
+
- direct-answers
|
|
33
36
|
|
|
34
37
|
pairs:
|
|
35
38
|
|
|
@@ -140,3 +143,96 @@ pairs:
|
|
|
140
143
|
evidence:
|
|
141
144
|
- .agent-src.uncompressed/rules/commit-policy.md#the-iron-law
|
|
142
145
|
- .agent-src.uncompressed/rules/autonomous-execution.md#commit-policy--see-commit-policy
|
|
146
|
+
|
|
147
|
+
- id: authority-x-ndd
|
|
148
|
+
rules: [agent-authority, non-destructive-by-default]
|
|
149
|
+
relation: defers_to
|
|
150
|
+
conflict: >-
|
|
151
|
+
Both rules speak to "may the agent do this autonomously?" — the
|
|
152
|
+
Priority Index points to the Hard Floor as Band 1.
|
|
153
|
+
resolution: >-
|
|
154
|
+
`agent-authority` is a router, never a source of truth. The Hard
|
|
155
|
+
Floor's Iron Law lives verbatim in `non-destructive-by-default`
|
|
156
|
+
and wins every conflict. The index points; it never restates.
|
|
157
|
+
evidence:
|
|
158
|
+
- .agent-src.uncompressed/rules/agent-authority.md#index-rules
|
|
159
|
+
- .agent-src.uncompressed/rules/non-destructive-by-default.md#the-iron-law
|
|
160
|
+
|
|
161
|
+
- id: authority-x-scope-control
|
|
162
|
+
rules: [agent-authority, scope-control]
|
|
163
|
+
relation: defers_to
|
|
164
|
+
conflict: >-
|
|
165
|
+
Permission Gate questions (push, branch, PR, architectural change)
|
|
166
|
+
surface during routine work — the index labels Band 2.
|
|
167
|
+
resolution: >-
|
|
168
|
+
The Priority Index routes to `scope-control` for git-shape and
|
|
169
|
+
scope-expansion decisions. Index never narrows or weakens the
|
|
170
|
+
gate; canonical rule wins on any wording divergence.
|
|
171
|
+
evidence:
|
|
172
|
+
- .agent-src.uncompressed/rules/agent-authority.md#index-rules
|
|
173
|
+
- .agent-src.uncompressed/rules/scope-control.md#git-operations--permission-gated
|
|
174
|
+
|
|
175
|
+
- id: authority-x-commit-policy
|
|
176
|
+
rules: [agent-authority, commit-policy]
|
|
177
|
+
relation: defers_to
|
|
178
|
+
conflict: >-
|
|
179
|
+
The "about to commit" decision arises — the index labels it Band 3
|
|
180
|
+
(Commit Default = never, with four exceptions).
|
|
181
|
+
resolution: >-
|
|
182
|
+
`commit-policy` Iron Law is canonical. The Priority Index points
|
|
183
|
+
to it; it does not enumerate the four exceptions itself. Future
|
|
184
|
+
edits to commit-policy do not require Index updates unless the
|
|
185
|
+
band ordering changes.
|
|
186
|
+
evidence:
|
|
187
|
+
- .agent-src.uncompressed/rules/agent-authority.md#index-rules
|
|
188
|
+
- .agent-src.uncompressed/rules/commit-policy.md#exceptions--when-committing-is-allowed
|
|
189
|
+
|
|
190
|
+
- id: scope-x-commit-policy
|
|
191
|
+
rules: [scope-control, commit-policy]
|
|
192
|
+
relation: narrows
|
|
193
|
+
conflict: >-
|
|
194
|
+
`scope-control` § "Git operations" forbids committing without
|
|
195
|
+
explicit permission as one of several git-op gates; `commit-policy`
|
|
196
|
+
narrows the commit case to a never-ask default with four named
|
|
197
|
+
exceptions.
|
|
198
|
+
resolution: >-
|
|
199
|
+
`commit-policy` is the narrower, canonical rule for the commit
|
|
200
|
+
sub-case. `scope-control` continues to govern push, branch, PR,
|
|
201
|
+
tag operations. On commit specifics, defer to `commit-policy`;
|
|
202
|
+
on other git ops, defer to `scope-control`.
|
|
203
|
+
evidence:
|
|
204
|
+
- .agent-src.uncompressed/rules/scope-control.md#git-operations--permission-gated
|
|
205
|
+
- .agent-src.uncompressed/rules/commit-policy.md#the-iron-law
|
|
206
|
+
|
|
207
|
+
- id: ask-x-direct-answers
|
|
208
|
+
rules: [ask-when-uncertain, direct-answers]
|
|
209
|
+
relation: complements
|
|
210
|
+
conflict: >-
|
|
211
|
+
A vague request triggers `ask-when-uncertain` (must ask), but
|
|
212
|
+
`direct-answers` Iron Law 3 (brevity by default) discourages
|
|
213
|
+
overlong replies; could read as tension when the question needs
|
|
214
|
+
framing.
|
|
215
|
+
resolution: >-
|
|
216
|
+
Both rules apply. `ask-when-uncertain` decides *whether* to ask
|
|
217
|
+
and demands one question per turn with numbered options.
|
|
218
|
+
`direct-answers` shapes *how* the question reads — no flattery,
|
|
219
|
+
no padding, shortest form that fully states the choice.
|
|
220
|
+
evidence:
|
|
221
|
+
- .agent-src.uncompressed/rules/ask-when-uncertain.md#iron-law--one-question-per-turn-always
|
|
222
|
+
- .agent-src.uncompressed/rules/direct-answers.md#iron-law-3--brevity-by-default
|
|
223
|
+
|
|
224
|
+
- id: language-x-direct-answers
|
|
225
|
+
rules: [language-and-tone, direct-answers]
|
|
226
|
+
relation: complements
|
|
227
|
+
conflict: >-
|
|
228
|
+
User writes German; agent must mirror language AND avoid flattery,
|
|
229
|
+
invented facts, padding. Both rules speak to reply shape.
|
|
230
|
+
resolution: >-
|
|
231
|
+
`language-and-tone` decides the language token (mirror user's last
|
|
232
|
+
chat message); `direct-answers` decides content discipline (no
|
|
233
|
+
flattery, verified facts, brevity). They compose: a brief, direct,
|
|
234
|
+
flattery-free reply in the user's language. Neither weakens the
|
|
235
|
+
other.
|
|
236
|
+
evidence:
|
|
237
|
+
- .agent-src.uncompressed/rules/language-and-tone.md#iron-law--mirror-the-users-language-always
|
|
238
|
+
- .agent-src.uncompressed/rules/direct-answers.md#iron-law-1--no-flattery
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
stability: beta
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Rule Priority Hierarchy
|
|
6
|
+
|
|
7
|
+
> **Audience:** anyone reading or editing `.agent-src.uncompressed/rules/*.md`,
|
|
8
|
+
> or trying to predict which rule wins when several fire on the same turn.
|
|
9
|
+
> **Machine-readable counterpart:** [`rule-interactions.yml`](rule-interactions.yml)
|
|
10
|
+
> (linted by `scripts/lint_rule_interactions.py`).
|
|
11
|
+
> **Diagram + pair-by-pair narrative:** [`rule-interactions.md`](rule-interactions.md).
|
|
12
|
+
|
|
13
|
+
This document is the **ordered list** view. The matrix files describe
|
|
14
|
+
how *pairs* of rules interact; this file states **which band wins**
|
|
15
|
+
when the bands themselves disagree.
|
|
16
|
+
|
|
17
|
+
## The four-line principle
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
Safety beats autonomy.
|
|
21
|
+
Scope beats helpfulness.
|
|
22
|
+
Verification beats completion.
|
|
23
|
+
User intent beats command suggestion.
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Every band below is a concrete instance of one of those four lines.
|
|
27
|
+
When in doubt, walk the list top-down and stop at the first band that
|
|
28
|
+
fires — that band's canonical rule decides the turn.
|
|
29
|
+
|
|
30
|
+
## The ordered list
|
|
31
|
+
|
|
32
|
+
| Band | Rule | What it gates | Lifts under |
|
|
33
|
+
|---|---|---|---|
|
|
34
|
+
| 1 | [`non-destructive-by-default`](../../.agent-src.uncompressed/rules/non-destructive-by-default.md) | Prod-trunk merge · deploy · push · prod data/infra · whimsical bulk deletion · bulk-deletion or infra commit | **Never.** Explicit user confirmation *this turn* only. |
|
|
35
|
+
| 2 | [`security-sensitive-stop`](../../.agent-src.uncompressed/rules/security-sensitive-stop.md) | Auth · billing · tenant boundaries · secrets · file uploads · webhooks · public endpoints | Threat-model pass completed and recorded *before* the edit. |
|
|
36
|
+
| 3 | [`scope-control`](../../.agent-src.uncompressed/rules/scope-control.md) | Git ops (branch · PR · tag · push · merge · rebase) · architectural changes · new libraries · scope expansion | Explicit user permission *this turn* or unrevoked standing instruction. |
|
|
37
|
+
| 4 | [`ask-when-uncertain`](../../.agent-src.uncompressed/rules/ask-when-uncertain.md) | Ambiguous requirements · vague-request triggers · fenced steps | Concrete evidence resolves the ambiguity, **or** user answers the single question. |
|
|
38
|
+
| 5 | [`commit-policy`](../../.agent-src.uncompressed/rules/commit-policy.md) | Any `git commit` | Four exceptions only — explicit "commit now", standing instruction, `/commit*` invocation, roadmap authorization. |
|
|
39
|
+
| 6 | [`verify-before-complete`](../../.agent-src.uncompressed/rules/verify-before-complete.md) | "Done" / "complete" claims · suggestions to commit, push, or PR | Fresh verification evidence in *this* message. |
|
|
40
|
+
| 7 | [`autonomous-execution`](../../.agent-src.uncompressed/rules/autonomous-execution.md) | Trivial-vs-blocking classification · autonomy opt-in detection | Per-step decision; never above bands 1–6. |
|
|
41
|
+
| 8 | [`command-suggestion-policy`](../../.agent-src.uncompressed/rules/command-suggestion-policy.md) | Surfacing slash-command matches as numbered options | User always picks; nothing auto-executes. |
|
|
42
|
+
| 9 | [`language-and-tone`](../../.agent-src.uncompressed/rules/language-and-tone.md) | First-token language of every reply · `.md` always English | Mirror the user's last chat message — no momentum exception. |
|
|
43
|
+
|
|
44
|
+
**Read direction:** top-to-bottom is *priority on conflict*, not chronology.
|
|
45
|
+
A turn typically touches several bands at once; the hierarchy decides
|
|
46
|
+
which one's Iron Law gets the final say.
|
|
47
|
+
|
|
48
|
+
## Index rules
|
|
49
|
+
|
|
50
|
+
- **Higher band wins.** A band-3 permission does not lift band-1; a band-5
|
|
51
|
+
commit exception does not lift band-3. Each band's "Lifts under" column
|
|
52
|
+
is its own escape hatch and only its own.
|
|
53
|
+
- **No band restates an Iron Law.** Iron Laws live verbatim in the
|
|
54
|
+
canonical rule files. This hierarchy points; it does not paraphrase.
|
|
55
|
+
- **Bands 1–2 are *Hard Floors*.** No autonomy setting, no roadmap step,
|
|
56
|
+
no standing instruction lifts them. See
|
|
57
|
+
[`agent-authority`](../../.agent-src.uncompressed/rules/agent-authority.md)
|
|
58
|
+
§ Index rules for the matching authority statement.
|
|
59
|
+
- **Unsure → ask.** [`ask-when-uncertain`](../../.agent-src.uncompressed/rules/ask-when-uncertain.md)
|
|
60
|
+
is the universal escape hatch when the band is unclear.
|
|
61
|
+
|
|
62
|
+
## Worked examples
|
|
63
|
+
|
|
64
|
+
| Situation | Bands that fire | Winner | Why |
|
|
65
|
+
|---|---|---|---|
|
|
66
|
+
| Standing autonomy + roadmap step says "merge to `main`" | 1, 7 | **1** | Hard Floor predates and outranks autonomy; surface the merge, ask. |
|
|
67
|
+
| `/commit-in-chunks` on a diff that removes a directory | 1, 5 | **1** | Commit exception authorizes *commits*, not *bulk deletions*. Confirm diff this turn. |
|
|
68
|
+
| User asks "improve this" with no metric named | 4, 7 | **4** | Vague-request trigger fires before any autonomy decision; ask the one clarifying question. |
|
|
69
|
+
| Editing `app/Auth/PasswordReset.php` mid-feature | 2, 7 | **2** | Security-sensitive surface stops the edit until threat-model is recorded. |
|
|
70
|
+
| Agent about to claim "ready to merge" with no fresh test output | 5, 6 | **6** | Verification gate fires before the commit/push question is even valid. |
|
|
71
|
+
| User types free-form prompt that matches `/refine-ticket` | 8, 9 | **8 + 9** | Suggestion runs as numbered options, mirrored to user's language. No conflict. |
|
|
72
|
+
|
|
73
|
+
## Cross-references
|
|
74
|
+
|
|
75
|
+
- [`agent-authority`](../../.agent-src.uncompressed/rules/agent-authority.md) — the four-band authority router (bands 1–3 + 7 of this hierarchy).
|
|
76
|
+
- [`rule-interactions.md`](rule-interactions.md) — pairwise interaction narrative + Mermaid diagram.
|
|
77
|
+
- [`rule-interactions.yml`](rule-interactions.yml) — machine-readable, CI-linted matrix.
|
|
78
|
+
- [`STABILITY.md`](STABILITY.md) — what the `stability: beta` tag means for breaking changes.
|
|
79
|
+
|
|
80
|
+
## Stability
|
|
81
|
+
|
|
82
|
+
`beta` — the band ordering and four-line principle are settled, but
|
|
83
|
+
the *worked examples* and the inclusion of band 8 (`command-suggestion-policy`)
|
|
84
|
+
in the public hierarchy have not yet shipped through one major release.
|
|
85
|
+
A breaking change to the band ordering is a SemVer-minor-pre-1.0 bump
|
|
86
|
+
or a SemVer-major bump after 1.0. Adding a row, refining a "Lifts under"
|
|
87
|
+
clause, or expanding the worked-examples table is non-breaking.
|
|
@@ -334,5 +334,5 @@ suite asserts every `BLOCKED` path has a matching declaration.
|
|
|
334
334
|
GT-U15 (preview render failure).
|
|
335
335
|
- [`existing-ui-audit` SKILL](../../.agent-src.uncompressed/skills/existing-ui-audit/SKILL.md)
|
|
336
336
|
— producer of `state.ui_audit`.
|
|
337
|
-
- [`ui-audit-
|
|
337
|
+
- [`ui-audit-gate` rule](../../.agent-src.uncompressed/rules/ui-audit-gate.md)
|
|
338
338
|
— the always-on rule that mirrors the audit gate at the agent layer.
|
package/docs/customization.md
CHANGED
|
@@ -58,6 +58,20 @@ those sections.
|
|
|
58
58
|
| `chat_history.max_size_kb` | per profile | Max file size before overflow handling (see matrix below). |
|
|
59
59
|
| `chat_history.on_overflow` | per profile | `rotate` drops oldest, `compress` marks for summarization (see matrix below). |
|
|
60
60
|
| `onboarding.onboarded` | `false` | Whether `/onboard` has run. The `onboarding-gate` rule prompts for `/onboard` while this is `false`. |
|
|
61
|
+
| `ai_council.enabled` | `false` | Master switch for the `/council` command. Even when enabled, every consultation asks before spending tokens. |
|
|
62
|
+
| `ai_council.members.<provider>.enabled` | `false` | Per-provider opt-in (`anthropic`, `openai`). Tokens live in `~/.config/agent-config/<provider>.key` (mode 0600), never in this file. |
|
|
63
|
+
| `ai_council.members.<provider>.model` | per provider | Which model the provider sends the query to (e.g. `claude-sonnet-4-5`, `gpt-4o`). |
|
|
64
|
+
| `ai_council.cost_budget.max_input_tokens` | `50000` | Hard cap on summed input tokens per `/council` invocation. |
|
|
65
|
+
| `ai_council.cost_budget.max_output_tokens` | `20000` | Hard cap on summed output tokens per `/council` invocation. |
|
|
66
|
+
| `ai_council.cost_budget.max_calls` | `10` | Maximum council members per invocation. |
|
|
67
|
+
| `ai_council.cost_budget.max_total_usd` | `0.0` | Per-invocation USD ceiling. `0` disables (token caps still apply). |
|
|
68
|
+
| `ai_council.cost_budget.daily_limit_usd` | `0.0` | Rolling 24h USD ceiling across all `/council` calls. `0` disables. Ledger lives at `~/.config/agent-config/council-spend.jsonl` (mode 0600). |
|
|
69
|
+
|
|
70
|
+
Council API tokens are installed via `./agent-config keys:install-anthropic`
|
|
71
|
+
and `./agent-config keys:install-openai` — they prompt on `/dev/tty`, write to
|
|
72
|
+
`~/.config/agent-config/<provider>.key` with mode `0600`, and never accept env
|
|
73
|
+
vars. The `/council` command refuses to run if the key file's permissions
|
|
74
|
+
drift.
|
|
61
75
|
|
|
62
76
|
### Cost profiles
|
|
63
77
|
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# End-to-end walkthroughs
|
|
2
|
+
|
|
3
|
+
Four cycle-by-cycle traces of the engine commands — backend ticket,
|
|
4
|
+
free-form prompt, UI track, and a blocked path. Each walkthrough cites
|
|
5
|
+
a checked-in **golden transcript** under [`tests/golden/baseline/`](../tests/golden/baseline/);
|
|
6
|
+
the transcripts are regenerated by `python3 -m tests.golden.capture` and
|
|
7
|
+
diffed in CI, so the cycle counts and directive names below stay
|
|
8
|
+
in sync with the engine's actual behavior.
|
|
9
|
+
|
|
10
|
+
> Behavior demos (autonomy, commit policy, hard floor, verification)
|
|
11
|
+
> live in [`showcase.md`](showcase.md). This file is the cycle-trace
|
|
12
|
+
> companion: input → directives → outcome.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 1. Backend ticket → ship — `/implement-ticket`
|
|
17
|
+
|
|
18
|
+
**Anchor:** [`tests/golden/baseline/GT-1/`](../tests/golden/baseline/GT-1/) ·
|
|
19
|
+
[`tickets/gt-1-happy.json`](../tests/golden/sandbox/tickets/gt-1-happy.json)
|
|
20
|
+
|
|
21
|
+
**Input** — a ticket payload with three concrete acceptance criteria:
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
GT-1-MULT — Add multiply(a, b) to the toy calculator
|
|
25
|
+
AC: signature multiply(a: int, b: int) -> int returning the product;
|
|
26
|
+
edge cases multiply(0, n)=0, multiply(-2, 3)=-6;
|
|
27
|
+
pytest test_multiply_returns_product in tests/test_calculator.py.
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**Trace** — five cycles, exit code `0` on the last:
|
|
31
|
+
|
|
32
|
+
| Cycle | Directive | What the agent does |
|
|
33
|
+
|---|---|---|
|
|
34
|
+
| c1 | `create-plan` | Builds the three-step plan (impl, test, run) |
|
|
35
|
+
| c2 | `apply-plan` | Edits `src/calculator.py` and `tests/test_calculator.py` |
|
|
36
|
+
| c3 | `run-tests` | `pytest` — `4 passed` (targeted scope) |
|
|
37
|
+
| c4 | `review-changes` | Four judges (bug, security, test-coverage, code-quality) — `success` |
|
|
38
|
+
| c5 | _(none)_ | Engine emits the delivery report, exits `0` |
|
|
39
|
+
|
|
40
|
+
**Outcome** — verified delivery report at
|
|
41
|
+
[`GT-1/delivery-report.md`](../tests/golden/baseline/GT-1/delivery-report.md):
|
|
42
|
+
plan, changes, test verdict, judge findings, suggested next command
|
|
43
|
+
(`/commit`).
|
|
44
|
+
|
|
45
|
+
**Anchored in:** [`commands/implement-ticket.md`](../.agent-src/commands/implement-ticket.md)
|
|
46
|
+
(eight-step contract) · [`work_engine/dispatcher.py`](../.agent-src/templates/scripts/work_engine/dispatcher.py)
|
|
47
|
+
(`STEP_ORDER`).
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 2. Free-form prompt → ship — `/work`
|
|
52
|
+
|
|
53
|
+
**Anchor:** [`tests/golden/baseline/GT-P1/`](../tests/golden/baseline/GT-P1/) ·
|
|
54
|
+
[`prompts/gt-p1-high.txt`](../tests/golden/sandbox/prompts/gt-p1-high.txt)
|
|
55
|
+
|
|
56
|
+
**Input** — one line, no AC, no ticket:
|
|
57
|
+
|
|
58
|
+
```text
|
|
59
|
+
Add modulo(a, b) to src/calculator.py — return a % b for ints
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Trace** — six cycles. The extra cycle vs. GT-1 is the
|
|
63
|
+
`refine-prompt` step that reconstructs the prompt into AC + assumptions
|
|
64
|
+
+ confidence band before any plan runs:
|
|
65
|
+
|
|
66
|
+
| Cycle | Directive | Effect |
|
|
67
|
+
|---|---|---|
|
|
68
|
+
| c1 | `refine-prompt` | High confidence — AC reconstructed, no halt |
|
|
69
|
+
| c2 | `create-plan` | Two-step plan |
|
|
70
|
+
| c3 | `apply-plan` | Edits `src/calculator.py` |
|
|
71
|
+
| c4 | `run-tests` | targeted pass |
|
|
72
|
+
| c5 | `review-changes` | judges green |
|
|
73
|
+
| c6 | _(none)_ | delivery report, exit `0` |
|
|
74
|
+
|
|
75
|
+
**Outcome** — `success`. The same dispatcher and judges as GT-1; only
|
|
76
|
+
the input envelope (`input.kind="prompt"` vs `"ticket"`) differs.
|
|
77
|
+
|
|
78
|
+
**Anchored in:** [`commands/work.md`](../.agent-src/commands/work.md) ·
|
|
79
|
+
[`skills/refine-prompt/SKILL.md`](../.agent-src/skills/refine-prompt/SKILL.md)
|
|
80
|
+
· [`docs/contracts/adr-prompt-driven-execution.md`](contracts/adr-prompt-driven-execution.md).
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## 3. UI improvement → review-loop ship — `/work` (UI track)
|
|
85
|
+
|
|
86
|
+
**Anchor:** [`tests/golden/baseline/GT-U2/`](../tests/golden/baseline/GT-U2/) ·
|
|
87
|
+
[`diffs/gt-u2-improve-diff.diff`](../tests/golden/sandbox/diffs/gt-u2-improve-diff.diff)
|
|
88
|
+
|
|
89
|
+
**Input** — a Blade diff that adds a `<label>` and a heading change to
|
|
90
|
+
`resources/views/contact.blade.php`. The input shape (a diff, not a
|
|
91
|
+
prompt) routes the engine onto the **UI track** instead of the
|
|
92
|
+
generic implement loop.
|
|
93
|
+
|
|
94
|
+
**Trace** — six cycles, none of them `create-plan` / `apply-plan` /
|
|
95
|
+
`run-tests`. The UI track has its own directive set:
|
|
96
|
+
|
|
97
|
+
| Cycle | Directive | Effect |
|
|
98
|
+
|---|---|---|
|
|
99
|
+
| c1 | `existing-ui-audit` | Inventory existing components / tokens before any new design |
|
|
100
|
+
| c2 | `ui-design-brief` | Brief for the proposed change |
|
|
101
|
+
| c3 | _(none — `_no_directive`)_ | Engine threads forward to the apply step |
|
|
102
|
+
| c4 | `ui-apply-plain` | Apply the diff |
|
|
103
|
+
| c5 | `ui-design-review-plain` | Design review judge |
|
|
104
|
+
| c6 | _(none)_ | delivery report, exit `0` |
|
|
105
|
+
|
|
106
|
+
**Outcome** — `success`. The audit-first ordering is enforced by the
|
|
107
|
+
[`ui-audit-gate`](../.agent-src/rules/ui-audit-gate.md) rule: any
|
|
108
|
+
non-trivial UI change without `state.ui_audit` halts before design.
|
|
109
|
+
|
|
110
|
+
**Anchored in:** [`docs/ui-track-mental-model.md`](ui-track-mental-model.md) ·
|
|
111
|
+
[`rules/ui-audit-gate.md`](../.agent-src/rules/ui-audit-gate.md) ·
|
|
112
|
+
[`skills/existing-ui-audit/SKILL.md`](../.agent-src/skills/existing-ui-audit/SKILL.md).
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## 4. Blocked on ambiguity — `/implement-ticket` halts
|
|
117
|
+
|
|
118
|
+
**Anchor:** [`tests/golden/baseline/GT-2/`](../tests/golden/baseline/GT-2/) ·
|
|
119
|
+
[`tickets/gt-2-ambiguity.json`](../tests/golden/sandbox/tickets/gt-2-ambiguity.json)
|
|
120
|
+
|
|
121
|
+
**Input** — a ticket whose AC list contains a vague entry:
|
|
122
|
+
|
|
123
|
+
```text
|
|
124
|
+
GT-2-DIV — divide(a, b)
|
|
125
|
+
AC: ... vague acceptance criteria at position(s) 2 ...
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**Trace** — one cycle, exit code `1`:
|
|
129
|
+
|
|
130
|
+
| Cycle | Directive | Effect |
|
|
131
|
+
|---|---|---|
|
|
132
|
+
| c1 | _(none)_ | Engine refuses to plan; surfaces refine prompt |
|
|
133
|
+
|
|
134
|
+
**Halt surface** — the engine does not write a plan, does not edit any
|
|
135
|
+
file, and emits a numbered-options block (verbatim from
|
|
136
|
+
[`GT-2/halt-markers.json`](../tests/golden/baseline/GT-2/halt-markers.json)):
|
|
137
|
+
|
|
138
|
+
```text
|
|
139
|
+
> Ticket GT-2-DIV is missing: vague acceptance criteria at position(s) 2.
|
|
140
|
+
> 1. Run `/refine-ticket GT-2-DIV` and re-invoke `/implement-ticket`
|
|
141
|
+
> 2. Provide the missing details in chat — I'll merge them into the ticket
|
|
142
|
+
> 3. Abandon this ticket — too vague to implement
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**Outcome** — `halt_unhandled`; the run is recorded as **blocked** in
|
|
146
|
+
the outcome-aware telemetry (`outcomes: ["blocked"]`, see
|
|
147
|
+
[P2 #9](../agents/roadmaps/road-to-1-15-followups.md#phase-9--outcome-aware-telemetry-p2-9)).
|
|
148
|
+
No work is committed, no auto-guess is taken.
|
|
149
|
+
|
|
150
|
+
**Anchored in:** [`rules/ask-when-uncertain.md`](../.agent-src/rules/ask-when-uncertain.md)
|
|
151
|
+
· [`rules/non-destructive-by-default.md`](../.agent-src/rules/non-destructive-by-default.md)
|
|
152
|
+
· [`skills/refine-ticket/SKILL.md`](../.agent-src/skills/refine-ticket/SKILL.md).
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Reproducing these locally
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
python3 -m tests.golden.capture --scenarios GT-1 GT-P1 GT-U2 GT-2
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Each scenario writes a fresh `transcript.json`, `delivery-report.md`,
|
|
163
|
+
and `halt-markers.json` under `tests/golden/baseline/<id>/`. CI diffs
|
|
164
|
+
the regenerated output against the committed baseline; drift fails the
|
|
165
|
+
build via the `roadmap-progress-check` and `golden-replay` tasks.
|
package/docs/getting-started.md
CHANGED
|
@@ -1,23 +1,39 @@
|
|
|
1
1
|
# Getting Started
|
|
2
2
|
|
|
3
|
+
`agent-config` is a stack-agnostic orchestration contract for coding
|
|
4
|
+
agents. The installer detects the project shape (Composer / npm / both /
|
|
5
|
+
neither) and wires the matching glue. **Pick the entrypoint that
|
|
6
|
+
matches the project**, not the language you happen to prefer.
|
|
7
|
+
|
|
3
8
|
## Installation
|
|
4
9
|
|
|
10
|
+
The installer is the same orchestrator across stacks — it reads
|
|
11
|
+
`composer.json` and/or `package.json`, syncs the payload, and generates
|
|
12
|
+
the tool-specific glue. Pick one entrypoint:
|
|
13
|
+
|
|
5
14
|
```bash
|
|
6
|
-
# Composer (PHP
|
|
15
|
+
# Composer-based projects (PHP / Laravel / Symfony / Zend / Laminas)
|
|
7
16
|
composer require --dev event4u/agent-config
|
|
8
17
|
php vendor/bin/install.php
|
|
9
18
|
# Equivalent: bash vendor/event4u/agent-config/scripts/install
|
|
10
19
|
|
|
11
|
-
# npm (
|
|
20
|
+
# npm-based projects (Next.js / React / Node / Vue / plain JS/TS)
|
|
12
21
|
npm install --save-dev @event4u/agent-config
|
|
13
|
-
# Re-run or pick a profile:
|
|
22
|
+
# Postinstall runs the orchestrator. Re-run or pick a profile:
|
|
14
23
|
# bash node_modules/@event4u/agent-config/scripts/install --profile=balanced
|
|
24
|
+
|
|
25
|
+
# Mixed Composer + npm projects (Laravel + Inertia, Symfony + Vue, …)
|
|
26
|
+
# Run both — the orchestrator merges results, no double-write.
|
|
27
|
+
|
|
28
|
+
# Stack-less or polyglot repos (no Composer, no npm)
|
|
29
|
+
git clone https://github.com/event4u-app/agent-config /tmp/agent-config
|
|
30
|
+
bash /tmp/agent-config/scripts/install --target "$PWD"
|
|
15
31
|
```
|
|
16
32
|
|
|
17
33
|
That's it. Your agent now follows your team's standards. The orchestrator
|
|
18
34
|
runs a bash payload sync and a Python bridge generator (Python 3 is
|
|
19
35
|
recommended; without it the payload sync still runs). No Task or Make
|
|
20
|
-
required for end users.
|
|
36
|
+
required for end users — those are contributor-only.
|
|
21
37
|
|
|
22
38
|
## Project CLI — `./agent-config`
|
|
23
39
|
|
|
@@ -99,7 +115,7 @@ Your agent is now:
|
|
|
99
115
|
- **Respecting your codebase** — no conflicting patterns
|
|
100
116
|
- **Following standards** — consistent code quality
|
|
101
117
|
|
|
102
|
-
This is enforced automatically by
|
|
118
|
+
This is enforced automatically by 57 rules. No configuration needed.
|
|
103
119
|
|
|
104
120
|
---
|
|
105
121
|
|
|
@@ -131,13 +147,15 @@ Your agent now understands slash commands:
|
|
|
131
147
|
|---|---|
|
|
132
148
|
| `/commit` | Stage and commit with Conventional Commits |
|
|
133
149
|
| `/create-pr` | Create PR with Jira-linked description |
|
|
134
|
-
| `/fix
|
|
150
|
+
| `/fix ci` | Fetch and fix GitHub Actions failures |
|
|
151
|
+
| `/optimize skills` | Audit skills, find duplicates, run linter |
|
|
152
|
+
| `/feature plan` | Interactively plan a feature |
|
|
135
153
|
| `/quality-fix` | Run and fix all quality checks |
|
|
136
154
|
| `/chat-history` | Inspect the persistent chat-history log |
|
|
137
155
|
| `/chat-history-resume` | Recover context after a crashed or switched session |
|
|
138
156
|
| `/chat-history-clear` | Wipe the chat-history log (with confirmation) |
|
|
139
157
|
|
|
140
|
-
→ [Browse all
|
|
158
|
+
→ [Browse all 69 active commands](../.agent-src/commands/)
|
|
141
159
|
|
|
142
160
|
---
|
|
143
161
|
|
|
@@ -173,7 +191,7 @@ See the [`chat-history` rule](../.agent-src/rules/chat-history-ownership.md) and
|
|
|
173
191
|
## Next steps
|
|
174
192
|
|
|
175
193
|
1. **Stay on `minimal`** — use it for a few days, see if the difference is noticeable
|
|
176
|
-
2. **Try commands** — `/commit`, `/create-pr`, `/fix
|
|
194
|
+
2. **Try commands** — `/commit`, `/create-pr`, `/fix ci` are great starting points
|
|
177
195
|
3. **Upgrade when ready** — switch to `balanced` to let the runtime dispatcher execute skills that declare a shell command
|
|
178
196
|
4. **Customize** — add [project overrides](customization.md) for your team's specific patterns
|
|
179
197
|
|