@event4u/agent-config 1.13.0 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent-src/commands/agent-handoff.md +4 -1
- package/.agent-src/commands/agent-status.md +3 -0
- package/.agent-src/commands/agents-audit.md +4 -0
- package/.agent-src/commands/agents-cleanup.md +6 -1
- package/.agent-src/commands/agents-prepare.md +3 -0
- package/.agent-src/commands/analyze-reference-repo.md +4 -0
- package/.agent-src/commands/bug-fix.md +7 -3
- package/.agent-src/commands/bug-investigate.md +4 -0
- package/.agent-src/commands/chat-history-checkpoint.md +126 -0
- package/.agent-src/commands/chat-history-clear.md +6 -1
- package/.agent-src/commands/chat-history-resume.md +7 -2
- package/.agent-src/commands/chat-history.md +7 -2
- package/.agent-src/commands/check-current-md.md +137 -0
- package/.agent-src/commands/commit-in-chunks.md +118 -0
- package/.agent-src/commands/commit.md +4 -0
- package/.agent-src/commands/compress.md +37 -2
- package/.agent-src/commands/context-create.md +4 -0
- package/.agent-src/commands/context-refactor.md +4 -0
- package/.agent-src/commands/copilot-agents-init.md +3 -0
- package/.agent-src/commands/copilot-agents-optimize.md +3 -0
- package/.agent-src/commands/create-pr-description.md +4 -0
- package/.agent-src/commands/create-pr.md +4 -0
- package/.agent-src/commands/do-and-judge.md +4 -1
- package/.agent-src/commands/do-in-steps.md +3 -0
- package/.agent-src/commands/e2e-heal.md +4 -0
- package/.agent-src/commands/e2e-plan.md +4 -0
- package/.agent-src/commands/estimate-ticket.md +4 -1
- package/.agent-src/commands/feature-dev.md +4 -0
- package/.agent-src/commands/feature-explore.md +4 -0
- package/.agent-src/commands/feature-plan.md +4 -0
- package/.agent-src/commands/feature-refactor.md +4 -0
- package/.agent-src/commands/feature-roadmap.md +6 -0
- package/.agent-src/commands/fix-ci.md +4 -0
- package/.agent-src/commands/fix-portability.md +5 -2
- package/.agent-src/commands/fix-pr-bot-comments.md +4 -0
- package/.agent-src/commands/fix-pr-comments.md +4 -0
- package/.agent-src/commands/fix-pr-developer-comments.md +4 -0
- package/.agent-src/commands/fix-references.md +3 -0
- package/.agent-src/commands/fix-seeder.md +4 -0
- package/.agent-src/commands/implement-ticket.md +39 -13
- package/.agent-src/commands/jira-ticket.md +4 -0
- package/.agent-src/commands/judge.md +3 -0
- package/.agent-src/commands/memory-add.md +5 -3
- package/.agent-src/commands/memory-full.md +5 -2
- package/.agent-src/commands/memory-promote.md +7 -6
- package/.agent-src/commands/mode.md +3 -0
- package/.agent-src/commands/module-create.md +4 -0
- package/.agent-src/commands/module-explore.md +4 -0
- package/.agent-src/commands/onboard.md +33 -0
- package/.agent-src/commands/optimize-agents.md +4 -0
- package/.agent-src/commands/optimize-augmentignore.md +12 -0
- package/.agent-src/commands/optimize-rtk-filters.md +3 -0
- package/.agent-src/commands/optimize-skills.md +4 -0
- package/.agent-src/commands/override-create.md +4 -0
- package/.agent-src/commands/override-manage.md +4 -0
- package/.agent-src/commands/package-reset.md +3 -0
- package/.agent-src/commands/package-test.md +3 -0
- package/.agent-src/commands/prepare-for-review.md +4 -0
- package/.agent-src/commands/project-analyze.md +4 -0
- package/.agent-src/commands/project-health.md +4 -0
- package/.agent-src/commands/propose-memory.md +6 -8
- package/.agent-src/commands/quality-fix.md +4 -0
- package/.agent-src/commands/refine-ticket.md +12 -7
- package/.agent-src/commands/review-changes.md +39 -8
- package/.agent-src/commands/review-routing.md +4 -0
- package/.agent-src/commands/roadmap-create.md +18 -0
- package/.agent-src/commands/roadmap-execute.md +14 -1
- package/.agent-src/commands/rule-compliance-audit.md +4 -0
- package/.agent-src/commands/set-cost-profile.md +11 -0
- package/.agent-src/commands/sync-agent-settings.md +12 -0
- package/.agent-src/commands/sync-gitignore.md +3 -0
- package/.agent-src/commands/tests-create.md +4 -0
- package/.agent-src/commands/tests-execute.md +6 -3
- package/.agent-src/commands/threat-model.md +4 -0
- package/.agent-src/commands/update-form-request-messages.md +4 -0
- package/.agent-src/commands/upstream-contribute.md +4 -0
- package/.agent-src/commands/work.md +161 -0
- package/.agent-src/guidelines/agent-infra/engineering-memory-data-format.md +2 -6
- package/.agent-src/guidelines/agent-infra/layered-settings.md +0 -1
- package/.agent-src/guidelines/agent-infra/memory-access.md +0 -7
- package/.agent-src/guidelines/agent-infra/role-contracts.md +2 -4
- package/.agent-src/guidelines/agent-infra/self-improvement-pipeline.md +0 -1
- package/.agent-src/guidelines/php/patterns/strategy.md +180 -2
- package/.agent-src/personas/README.md +0 -1
- package/.agent-src/rules/artifact-drafting-protocol.md +7 -2
- package/.agent-src/rules/artifact-engagement-recording.md +133 -0
- package/.agent-src/rules/ask-when-uncertain.md +18 -13
- package/.agent-src/rules/augment-portability.md +64 -37
- package/.agent-src/rules/autonomous-execution.md +158 -0
- package/.agent-src/rules/chat-history-cadence.md +109 -0
- package/.agent-src/rules/chat-history-ownership.md +123 -0
- package/.agent-src/rules/chat-history-visibility.md +96 -0
- package/.agent-src/rules/cli-output-handling.md +27 -4
- package/.agent-src/rules/command-suggestion.md +134 -0
- package/.agent-src/rules/commit-policy.md +109 -0
- package/.agent-src/rules/direct-answers.md +114 -0
- package/.agent-src/rules/docs-sync.md +36 -0
- package/.agent-src/rules/downstream-changes.md +10 -9
- package/.agent-src/rules/improve-before-implement.md +9 -6
- package/.agent-src/rules/language-and-tone.md +85 -6
- package/.agent-src/rules/non-destructive-by-default.md +117 -0
- package/.agent-src/rules/package-ci-checks.md +4 -0
- package/.agent-src/rules/preservation-guard.md +20 -0
- package/.agent-src/rules/roadmap-progress-sync.md +159 -27
- package/.agent-src/rules/role-mode-adherence.md +1 -1
- package/.agent-src/rules/scope-control.md +42 -1
- package/.agent-src/rules/size-enforcement.md +2 -3
- package/.agent-src/rules/skill-quality.md +3 -8
- package/.agent-src/rules/ui-audit-before-build.md +106 -0
- package/.agent-src/rules/user-interaction.md +107 -51
- package/.agent-src/scripts/update_roadmap_progress.py +73 -9
- package/.agent-src/skills/blade-ui/SKILL.md +47 -3
- package/.agent-src/skills/command-routing/SKILL.md +32 -0
- package/.agent-src/skills/command-writing/SKILL.md +52 -2
- package/.agent-src/skills/description-assist/SKILL.md +21 -0
- package/.agent-src/skills/estimate-ticket/SKILL.md +0 -1
- package/.agent-src/skills/existing-ui-audit/SKILL.md +202 -0
- package/.agent-src/skills/fe-design/SKILL.md +78 -61
- package/.agent-src/skills/file-editor/SKILL.md +9 -0
- package/.agent-src/skills/finishing-a-development-branch/SKILL.md +4 -0
- package/.agent-src/skills/flux/SKILL.md +31 -4
- package/.agent-src/skills/guideline-writing/SKILL.md +24 -2
- package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +51 -9
- package/.agent-src/skills/livewire/SKILL.md +49 -4
- package/.agent-src/skills/md-language-check/SKILL.md +103 -0
- package/.agent-src/skills/php-coder/SKILL.md +24 -0
- package/.agent-src/skills/react-shadcn-ui/SKILL.md +121 -0
- package/.agent-src/skills/refine-prompt/SKILL.md +220 -0
- package/.agent-src/skills/refine-ticket/SKILL.md +32 -28
- package/.agent-src/skills/roadmap-management/SKILL.md +24 -11
- package/.agent-src/skills/rule-writing/SKILL.md +23 -1
- package/.agent-src/skills/skill-writing/SKILL.md +3 -5
- package/.agent-src/skills/upstream-contribute/SKILL.md +3 -3
- package/.agent-src/skills/using-git-worktrees/SKILL.md +3 -1
- package/.agent-src/templates/AGENTS.md +24 -6
- package/.agent-src/templates/agent-settings.md +149 -0
- package/.agent-src/templates/roadmaps.md +11 -4
- package/.agent-src/templates/scripts/implement_ticket/__init__.py +63 -26
- package/.agent-src/templates/scripts/implement_ticket/__main__.py +8 -2
- package/.agent-src/templates/scripts/memory_lookup.py +1 -1
- package/.agent-src/templates/scripts/telemetry/__init__.py +42 -0
- package/.agent-src/templates/scripts/telemetry/aggregator.py +154 -0
- package/.agent-src/templates/scripts/telemetry/boundary.py +171 -0
- package/.agent-src/templates/scripts/telemetry/engagement.py +238 -0
- package/.agent-src/templates/scripts/telemetry/report_renderer.py +170 -0
- package/.agent-src/templates/scripts/telemetry/settings.py +112 -0
- package/.agent-src/templates/scripts/telemetry_record.py +166 -0
- package/.agent-src/templates/scripts/telemetry_report.py +161 -0
- package/.agent-src/templates/scripts/telemetry_status.py +142 -0
- package/.agent-src/templates/scripts/work_engine/__init__.py +58 -0
- package/.agent-src/templates/scripts/work_engine/__main__.py +9 -0
- package/.agent-src/templates/scripts/work_engine/cli.py +195 -0
- package/.agent-src/templates/scripts/work_engine/cli_args.py +116 -0
- package/.agent-src/templates/scripts/{implement_ticket → work_engine}/delivery_state.py +10 -3
- package/.agent-src/templates/scripts/work_engine/directives/__init__.py +33 -0
- package/.agent-src/templates/scripts/work_engine/directives/backend/__init__.py +98 -0
- package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/analyze.py +1 -1
- package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/implement.py +3 -3
- package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/memory.py +2 -2
- package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/plan.py +2 -2
- package/.agent-src/templates/scripts/work_engine/directives/backend/refine.py +396 -0
- package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/report.py +37 -5
- package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/test.py +2 -2
- package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/verify.py +2 -2
- package/.agent-src/templates/scripts/work_engine/directives/mixed/__init__.py +116 -0
- package/.agent-src/templates/scripts/work_engine/directives/mixed/contract.py +254 -0
- package/.agent-src/templates/scripts/work_engine/directives/mixed/stitch.py +229 -0
- package/.agent-src/templates/scripts/work_engine/directives/mixed/ui.py +231 -0
- package/.agent-src/templates/scripts/work_engine/directives/ui/__init__.py +113 -0
- package/.agent-src/templates/scripts/work_engine/directives/ui/_passthrough.py +44 -0
- package/.agent-src/templates/scripts/work_engine/directives/ui/apply.py +241 -0
- package/.agent-src/templates/scripts/work_engine/directives/ui/audit.py +414 -0
- package/.agent-src/templates/scripts/work_engine/directives/ui/design.py +335 -0
- package/.agent-src/templates/scripts/work_engine/directives/ui/polish.py +510 -0
- package/.agent-src/templates/scripts/work_engine/directives/ui/review.py +468 -0
- package/.agent-src/templates/scripts/work_engine/directives/ui_trivial/__init__.py +119 -0
- package/.agent-src/templates/scripts/work_engine/directives/ui_trivial/_skipped.py +37 -0
- package/.agent-src/templates/scripts/work_engine/directives/ui_trivial/apply.py +165 -0
- package/.agent-src/templates/scripts/work_engine/directives/ui_trivial/refine.py +66 -0
- package/.agent-src/templates/scripts/work_engine/directives/ui_trivial/report.py +62 -0
- package/.agent-src/templates/scripts/work_engine/directives/ui_trivial/test.py +115 -0
- package/.agent-src/templates/scripts/work_engine/dispatcher.py +331 -0
- package/.agent-src/templates/scripts/work_engine/emitters.py +43 -0
- package/.agent-src/templates/scripts/work_engine/errors.py +19 -0
- package/.agent-src/templates/scripts/work_engine/hook_bootstrap.py +76 -0
- package/.agent-src/templates/scripts/work_engine/hooks/__init__.py +54 -0
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/__init__.py +32 -0
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/_chat_history_base.py +103 -0
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_append.py +44 -0
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_halt_append.py +42 -0
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_heartbeat.py +50 -0
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_turn_check.py +49 -0
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/directive_set_guard.py +53 -0
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/halt_surface_audit.py +50 -0
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/state_shape_validation.py +52 -0
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/trace.py +84 -0
- package/.agent-src/templates/scripts/work_engine/hooks/context.py +66 -0
- package/.agent-src/templates/scripts/work_engine/hooks/events.py +44 -0
- package/.agent-src/templates/scripts/work_engine/hooks/exceptions.py +79 -0
- package/.agent-src/templates/scripts/work_engine/hooks/registry.py +60 -0
- package/.agent-src/templates/scripts/work_engine/hooks/runner.py +73 -0
- package/.agent-src/templates/scripts/work_engine/hooks/settings.py +141 -0
- package/.agent-src/templates/scripts/work_engine/input_builders.py +163 -0
- package/.agent-src/templates/scripts/work_engine/intent/__init__.py +47 -0
- package/.agent-src/templates/scripts/work_engine/intent/classify.py +280 -0
- package/.agent-src/templates/scripts/work_engine/migration/__init__.py +8 -0
- package/.agent-src/templates/scripts/work_engine/migration/v0_to_v1.py +231 -0
- package/.agent-src/templates/scripts/{implement_ticket → work_engine}/persona_policy.py +1 -1
- package/.agent-src/templates/scripts/work_engine/resolvers/__init__.py +22 -0
- package/.agent-src/templates/scripts/work_engine/resolvers/diff.py +106 -0
- package/.agent-src/templates/scripts/work_engine/resolvers/file.py +113 -0
- package/.agent-src/templates/scripts/work_engine/resolvers/prompt.py +90 -0
- package/.agent-src/templates/scripts/work_engine/scoring/__init__.py +14 -0
- package/.agent-src/templates/scripts/work_engine/scoring/confidence.py +300 -0
- package/.agent-src/templates/scripts/work_engine/stack/__init__.py +31 -0
- package/.agent-src/templates/scripts/work_engine/stack/detect.py +187 -0
- package/.agent-src/templates/scripts/work_engine/state.py +641 -0
- package/.agent-src/templates/scripts/work_engine/state_io.py +202 -0
- package/.claude-plugin/marketplace.json +105 -2
- package/AGENTS.md +38 -8
- package/CHANGELOG.md +609 -0
- package/README.md +136 -14
- package/config/agent-settings.template.yml +45 -0
- package/config/gitignore-block.txt +4 -0
- package/docs/MIGRATION.md +122 -0
- package/docs/architecture.md +111 -35
- package/docs/contracts/STABILITY.md +95 -0
- package/docs/contracts/adr-chat-history-split.md +132 -0
- package/docs/contracts/adr-command-suggestion.md +146 -0
- package/docs/contracts/adr-implement-ticket-runtime.md +122 -0
- package/docs/contracts/adr-product-ui-track.md +384 -0
- package/docs/contracts/adr-prompt-driven-execution.md +187 -0
- package/docs/contracts/agent-memory-contract.md +149 -0
- package/docs/contracts/artifact-engagement-flow.md +262 -0
- package/docs/contracts/command-clusters.md +126 -0
- package/docs/contracts/command-suggestion-flow.md +148 -0
- package/docs/contracts/implement-ticket-flow.md +628 -0
- package/docs/contracts/linear-ai-rules-inclusion.md +143 -0
- package/docs/contracts/linear-ai-three-layers.md +131 -0
- package/docs/contracts/rule-interactions.md +107 -0
- package/docs/contracts/rule-interactions.yml +142 -0
- package/docs/contracts/ui-stack-extension.md +236 -0
- package/docs/contracts/ui-track-flow.md +338 -0
- package/docs/development.md +1 -1
- package/docs/getting-started.md +3 -3
- package/docs/installation.md +124 -2
- package/docs/migrations/commands-1.15.0.md +112 -0
- package/docs/showcase.md +204 -0
- package/docs/ui-track-mental-model.md +121 -0
- package/package.json +1 -1
- package/scripts/agent-config +199 -0
- package/scripts/audit_cloud_compatibility.py +288 -0
- package/scripts/build_cloud_bundle.py +458 -0
- package/scripts/build_linear_digest.py +263 -0
- package/scripts/chat_history.py +796 -7
- package/scripts/check_compression.py +139 -0
- package/scripts/check_iron_law_prominence.py +143 -0
- package/scripts/check_md_language.py +159 -0
- package/scripts/check_portability.py +38 -0
- package/scripts/check_public_links.py +185 -0
- package/scripts/check_references.py +1 -0
- package/scripts/check_reply_consistency.py +140 -0
- package/scripts/command_suggester/__init__.py +51 -0
- package/scripts/command_suggester/cooldown.py +132 -0
- package/scripts/command_suggester/loader.py +70 -0
- package/scripts/command_suggester/match.py +180 -0
- package/scripts/command_suggester/rank.py +120 -0
- package/scripts/command_suggester/render.py +86 -0
- package/scripts/command_suggester/sanitize.py +113 -0
- package/scripts/command_suggester/settings.py +125 -0
- package/scripts/command_suggester/types.py +78 -0
- package/scripts/hooks/augment-chat-history.sh +56 -0
- package/scripts/install-hooks.sh +67 -0
- package/scripts/install.py +150 -33
- package/scripts/lint_marketplace.py +27 -0
- package/scripts/lint_no_new_atomic_commands.py +179 -0
- package/scripts/lint_rule_interactions.py +149 -0
- package/scripts/memory_lookup.py +1 -1
- package/scripts/migrate_command_suggestions.py +151 -0
- package/scripts/release.py +297 -64
- package/scripts/schemas/command.schema.json +41 -0
- package/scripts/skill_linter.py +81 -0
- package/scripts/sync_agent_settings.py +42 -12
- package/scripts/update_counts.py +10 -0
- package/templates/consumer-settings/augment-cli-hooks.json +54 -0
- package/templates/consumer-settings/claude-settings.json +55 -1
- package/.agent-src/rules/chat-history.md +0 -171
- package/.agent-src/templates/scripts/implement_ticket/cli.py +0 -171
- package/.agent-src/templates/scripts/implement_ticket/dispatcher.py +0 -134
- package/.agent-src/templates/scripts/implement_ticket/steps/__init__.py +0 -49
- package/.agent-src/templates/scripts/implement_ticket/steps/refine.py +0 -140
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
type: "auto"
|
|
3
3
|
alwaysApply: false
|
|
4
|
-
description: "Running CLI commands that produce verbose output — git, tests, linters, docker, build tools, artisan, npm, composer"
|
|
4
|
+
description: "Running CLI commands that produce verbose output — git, tests, linters, docker, build tools, artisan, npm, composer. Wrap with rtk when installed; tail/grep is fallback."
|
|
5
5
|
source: package
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -10,11 +10,33 @@ source: package
|
|
|
10
10
|
Loaded when actively working with code, tests, quality tools, CLI, or analysis.
|
|
11
11
|
For communication and response style rules → see the always-loaded `token-efficiency` rule.
|
|
12
12
|
|
|
13
|
+
## Iron Law — rtk first, tail/grep fallback
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
IF `rtk` IS INSTALLED, WRAP VERBOSE COMMANDS WITH rtk.
|
|
17
|
+
USE tail / grep / cat ONLY AS FALLBACK WHEN rtk HAS NO MATCHING SUBCOMMAND.
|
|
18
|
+
NEVER PIPE A STILL-RUNNING LONG COMMAND THROUGH tail — IT BUFFERS TO EOF.
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Detection: `rtk_installed: true` in `.agent-settings.yml`, or `which rtk`
|
|
22
|
+
exits 0. Caching the result for the session is fine.
|
|
23
|
+
|
|
24
|
+
| Verbose command | Use | Fallback (no rtk) |
|
|
25
|
+
|---|---|---|
|
|
26
|
+
| CI-style suites, full test runs | `rtk err <cmd>` — only errors/warnings | redirect → tail → grep |
|
|
27
|
+
| Unit tests | `rtk test <cmd>` — only failures | redirect → tail → grep |
|
|
28
|
+
| `git status`/`log`/`diff` | `rtk git <subcmd>` | plain |
|
|
29
|
+
| `gh pr list`, `gh run view` | `rtk gh <subcmd>` | plain |
|
|
30
|
+
| Generic noisy command | `rtk summary <cmd>` or `rtk err <cmd>` | redirect → tail |
|
|
31
|
+
|
|
32
|
+
For the full rtk subcommand catalog and project-local filter setup → see
|
|
33
|
+
the `rtk-output-filtering` skill.
|
|
34
|
+
|
|
13
35
|
## Codebase Navigation
|
|
14
36
|
|
|
15
37
|
### Use what you already have
|
|
16
38
|
|
|
17
|
-
- Edited a file →
|
|
39
|
+
- Edited a file → the edit tool already returned the result. Skip re-reading.
|
|
18
40
|
- Ran a command → you have the output. Skip re-running to "verify".
|
|
19
41
|
- File in context from recent messages → skip reloading.
|
|
20
42
|
- Found a symbol → use it. Skip searching again differently.
|
|
@@ -38,9 +60,10 @@ For communication and response style rules → see the always-loaded `token-effi
|
|
|
38
60
|
- **`view_range`** when you know the exact lines.
|
|
39
61
|
- **One `codebase-retrieval` call** with all symbols — batch, not 5 separate calls.
|
|
40
62
|
|
|
41
|
-
## Pattern: Redirect, Summarize, Target
|
|
63
|
+
## Fallback Pattern: Redirect, Summarize, Target
|
|
42
64
|
|
|
43
|
-
|
|
65
|
+
When `rtk` has no matching subcommand for the tool at hand, fall back to
|
|
66
|
+
this pattern. Every command that MAY produce more than ~30 lines of output:
|
|
44
67
|
|
|
45
68
|
### Step 1: Redirect to file
|
|
46
69
|
```bash
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "always"
|
|
3
|
+
description: "Surface matching slash commands as numbered options when user intent matches a command's purpose — never auto-executes; user always picks (read-only suggestion layer)."
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
source: package
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Command Suggestion
|
|
9
|
+
|
|
10
|
+
When the user's prompt matches an eligible slash command, surface it
|
|
11
|
+
as a **numbered option** alongside an "as-is" escape hatch. The user
|
|
12
|
+
always picks. **Nothing auto-executes.** The suggestion layer is a
|
|
13
|
+
read-only shortcut *finder*, not an invocation path.
|
|
14
|
+
|
|
15
|
+
The deterministic engine lives in `scripts/command_suggester/`. The
|
|
16
|
+
locked eligibility table lives in
|
|
17
|
+
[`agents/contexts/command-suggestion-eligibility.md`](../../agents/contexts/command-suggestion-eligibility.md).
|
|
18
|
+
The full design lives in
|
|
19
|
+
[`road-to-context-aware-command-suggestion`](../../agents/roadmaps/road-to-context-aware-command-suggestion.md).
|
|
20
|
+
|
|
21
|
+
## Iron Law — never auto-execute
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
SUGGEST. NEVER INVOKE. THE USER PICKS, ALWAYS.
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
A suggestion block emits options. It does **not** start a command
|
|
28
|
+
flow. The user picking option N triggers `slash-commands` on the
|
|
29
|
+
**next** turn — with all the command's own halts intact.
|
|
30
|
+
|
|
31
|
+
## When to fire
|
|
32
|
+
|
|
33
|
+
On a user turn that matches **all** of the following:
|
|
34
|
+
|
|
35
|
+
1. The message does **not** start with an explicit `/command` (those
|
|
36
|
+
bypass suggestion entirely — see `slash-commands`).
|
|
37
|
+
2. `commands.suggestion.enabled` is `true` (default).
|
|
38
|
+
3. The user has not issued `/command-suggestion-off` in this conversation.
|
|
39
|
+
4. No clarification is owed for the same turn (per
|
|
40
|
+
`ask-when-uncertain` — clarification wins; suggestion can fire next turn).
|
|
41
|
+
5. No active engine flow is mid-halt (e.g. an `/implement-ticket`
|
|
42
|
+
step waiting on the user — the active flow has the floor).
|
|
43
|
+
6. The matcher returns at least one match above the effective
|
|
44
|
+
`confidence_floor` after rank + cooldown + anti-noise.
|
|
45
|
+
|
|
46
|
+
When all six hold, the suggestion block is the **first and only**
|
|
47
|
+
thing the agent emits that turn. No tools, no edits, no other prose.
|
|
48
|
+
|
|
49
|
+
## What to emit
|
|
50
|
+
|
|
51
|
+
Render exactly one numbered-options block conforming to
|
|
52
|
+
`user-interaction`:
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
> 💡 Your request matches a command. Pick one or run the prompt as-is:
|
|
56
|
+
>
|
|
57
|
+
> 1. /implement-ticket — drive ticket end-to-end through refine → plan → implement → test
|
|
58
|
+
> 2. /refine-ticket — tighten the AC and risks on a ticket before planning
|
|
59
|
+
> 3. Just run the prompt as-is, no command
|
|
60
|
+
|
|
61
|
+
**Recommendation: 1 — /implement-ticket** — the request matches its trigger description (`setze ticket abc-123 um`). Pick the last option to skip the command and run the prompt as written.
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Rules — non-negotiable:
|
|
65
|
+
|
|
66
|
+
- The "run as-is" option is **always present**, **always last**, never removed.
|
|
67
|
+
- At most `commands.suggestion.max_options` command suggestions
|
|
68
|
+
precede the as-is option (default 4 → 5 total).
|
|
69
|
+
- Exactly **one** `Recommendation:` line follows the block, naming
|
|
70
|
+
the highest-scoring command — or no recommendation when the top
|
|
71
|
+
two scores are within 0.05 of each other (single-source-of-truth
|
|
72
|
+
Iron Law from `user-interaction`).
|
|
73
|
+
- Free-text replies count as the as-is option unless they
|
|
74
|
+
unambiguously name one of the listed commands.
|
|
75
|
+
|
|
76
|
+
## Subordination — when to stay silent
|
|
77
|
+
|
|
78
|
+
The suggestion rule is **junior** to:
|
|
79
|
+
|
|
80
|
+
- `scope-control` — never surfaces a git-op command behind a
|
|
81
|
+
permission gate the user already declined this turn.
|
|
82
|
+
- `ask-when-uncertain` — if a clarification is owed, the
|
|
83
|
+
clarification is the only question; suggestion suppresses for
|
|
84
|
+
that turn.
|
|
85
|
+
- `verify-before-complete` — suggestion does not interrupt an
|
|
86
|
+
evidence-gate verification that's already running.
|
|
87
|
+
- Any active role-mode contract (`role-mode-adherence`).
|
|
88
|
+
- Any active engine halt (`/implement-ticket`, `/work`, etc.).
|
|
89
|
+
|
|
90
|
+
On any conflict → suggestion stays silent. Zero output. The user's
|
|
91
|
+
prompt is processed as it would be without this rule.
|
|
92
|
+
|
|
93
|
+
## Anti-noise — silent when uncertain
|
|
94
|
+
|
|
95
|
+
The engine's `rank.py` already drops:
|
|
96
|
+
|
|
97
|
+
- Matches below the `confidence_floor` (default 0.6, per-command
|
|
98
|
+
override in frontmatter).
|
|
99
|
+
- Single matches scoring `< floor + 0.1` with no structural bonus
|
|
100
|
+
(high uncertainty isn't worth interrupting for).
|
|
101
|
+
- Short prompts (< 6 words) hitting > 2 commands with no structural
|
|
102
|
+
bonus (ticket key, file path) — too vague to disambiguate.
|
|
103
|
+
- Pure-continuation messages (`ok`, `weiter`, `mach weiter`, `go on`,
|
|
104
|
+
…) — no new intent signal, no structural bonus → silent.
|
|
105
|
+
- Suggestions that fired for the same `(command, evidence)` pair
|
|
106
|
+
within the cooldown window (default 10m, per-command override).
|
|
107
|
+
|
|
108
|
+
If the engine returns an empty list → emit nothing. The user's
|
|
109
|
+
prompt runs exactly as it would without this rule.
|
|
110
|
+
|
|
111
|
+
## What this rule does NOT do
|
|
112
|
+
|
|
113
|
+
- Invoke any command. Picking option N is what triggers `slash-commands`.
|
|
114
|
+
- Stack with other questions. One numbered-options block per turn.
|
|
115
|
+
- Re-trigger on its own output. Command names emitted in the
|
|
116
|
+
suggestion block are excluded from the next-turn matcher input.
|
|
117
|
+
- Override `enabled: false`, blocklist entries, or per-conversation opt-out.
|
|
118
|
+
- Suggest commands that are not in the locked eligibility table.
|
|
119
|
+
|
|
120
|
+
## Cloud Behavior
|
|
121
|
+
|
|
122
|
+
On cloud surfaces (Claude.ai Web, Skills API) the rule is **inert**
|
|
123
|
+
unless the suggester package is shipped in the bundle. Treat
|
|
124
|
+
`commands.suggestion.enabled` as `false` when the engine is not
|
|
125
|
+
available — degrade silently, never crash the turn.
|
|
126
|
+
|
|
127
|
+
## Interactions
|
|
128
|
+
|
|
129
|
+
- [`slash-commands`](slash-commands.md) — explicit `/command` skips suggestion entirely.
|
|
130
|
+
- [`user-interaction`](user-interaction.md) — numbered-options Iron Law and single-source recommendation.
|
|
131
|
+
- [`ask-when-uncertain`](ask-when-uncertain.md) — clarification wins on conflict.
|
|
132
|
+
- [`scope-control`](scope-control.md) — git-op gates outrank suggestion.
|
|
133
|
+
- [`role-mode-adherence`](role-mode-adherence.md) — active mode contract outranks suggestion.
|
|
134
|
+
- [`agents/contexts/command-suggestion-eligibility.md`](../../agents/contexts/command-suggestion-eligibility.md) — locked eligibility table.
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "always"
|
|
3
|
+
description: "Commit policy — never commit and never ask about committing unless the user said so this turn, the roadmap authorizes it, or a commit command is invoked"
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
source: package
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Commit Policy
|
|
9
|
+
|
|
10
|
+
Local commits do not change remote state, but committing prematurely
|
|
11
|
+
makes review harder. This is the **canonical** rule for committing,
|
|
12
|
+
referenced by [`autonomous-execution`](autonomous-execution.md),
|
|
13
|
+
[`scope-control`](scope-control.md), and the roadmap commands.
|
|
14
|
+
|
|
15
|
+
## The Iron Law
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
NEVER COMMIT. NEVER ASK ABOUT COMMITTING.
|
|
19
|
+
EXCEPTIONS ARE EXPLICIT, NOT INFERRED.
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Applies regardless of `personal.autonomy`, conversation momentum, or
|
|
23
|
+
"but it's a clean stopping point". Default is **no commit, no
|
|
24
|
+
question**.
|
|
25
|
+
|
|
26
|
+
## Exceptions — when committing IS allowed
|
|
27
|
+
|
|
28
|
+
Exactly four ways the agent may commit:
|
|
29
|
+
|
|
30
|
+
1. **User says so this turn** — explicit phrase like "commit this now",
|
|
31
|
+
"go ahead and commit". Permission is for **this commit only**, not
|
|
32
|
+
standing.
|
|
33
|
+
2. **Standing instruction not yet revoked** — user said earlier in
|
|
34
|
+
the conversation "commit after every phase" or similar, and has not
|
|
35
|
+
revoked it. Cache and honor.
|
|
36
|
+
3. **Commit command invoked** — `/commit` (with confirmation) or
|
|
37
|
+
`/commit-in-chunks` (auto-split, no confirmation).
|
|
38
|
+
4. **Roadmap authorization** — the roadmap file lists explicit commit
|
|
39
|
+
steps and the user invoked roadmap execution. See
|
|
40
|
+
[Roadmap-authorized commits](#roadmap-authorized-commits) below.
|
|
41
|
+
|
|
42
|
+
Anything else → no commit.
|
|
43
|
+
|
|
44
|
+
## Hard Floor still applies — bulk deletions and infra changes
|
|
45
|
+
|
|
46
|
+
Even when one of the four exceptions above authorizes a commit, the
|
|
47
|
+
[`non-destructive-by-default`](non-destructive-by-default.md) Hard
|
|
48
|
+
Floor still fires when the diff:
|
|
49
|
+
|
|
50
|
+
- Removes a directory
|
|
51
|
+
- Deletes ≥5 unrelated files
|
|
52
|
+
- Touches Terraform / Pulumi / k8s manifests / Ansible / cloud-config
|
|
53
|
+
|
|
54
|
+
In those cases, **surface the diff** (paths + counts) and confirm
|
|
55
|
+
this turn before committing — even under `/commit-in-chunks`,
|
|
56
|
+
roadmap pre-scan authorization, or an explicit "commit this now". The
|
|
57
|
+
four exceptions cover *whether* commits happen; the Hard Floor covers
|
|
58
|
+
*which diffs* still need a separate confirmation.
|
|
59
|
+
|
|
60
|
+
## NEVER ask about committing
|
|
61
|
+
|
|
62
|
+
Asking "should I commit this?", "do we want to commit?", or any
|
|
63
|
+
variant is **forbidden**. The user invokes a command or says so
|
|
64
|
+
explicitly. Don't surface a commit option in numbered-options blocks
|
|
65
|
+
unless the rest of the message would be incomplete without it.
|
|
66
|
+
|
|
67
|
+
The same speech-act check from [`autonomous-execution`](autonomous-execution.md#speech-act-check--the-phrase-must-be-a-meta-instruction-to-the-agent)
|
|
68
|
+
applies in reverse: an explicit commit phrase inside a quote, code
|
|
69
|
+
block, or content (e.g. a copy-paste of a chat log) is **not** a
|
|
70
|
+
permission grant.
|
|
71
|
+
|
|
72
|
+
## NEVER write commit steps into roadmaps unsolicited
|
|
73
|
+
|
|
74
|
+
When **creating** a roadmap (via `/roadmap-create`,
|
|
75
|
+
`/feature-roadmap`, or any roadmap-producing flow), do **not** include
|
|
76
|
+
commit steps unless the user explicitly requested them. Commits are a
|
|
77
|
+
delivery decision; roadmaps plan **work**.
|
|
78
|
+
|
|
79
|
+
If the user explicitly wants commit steps in the roadmap, write them
|
|
80
|
+
clearly and unambiguously (e.g. "Commit phase X: chore: …").
|
|
81
|
+
|
|
82
|
+
## Roadmap-authorized commits
|
|
83
|
+
|
|
84
|
+
When **executing** a roadmap that contains commit steps:
|
|
85
|
+
|
|
86
|
+
- **Non-autonomous mode** (`personal.autonomy: off`, or `auto`
|
|
87
|
+
before opt-in) — agent may ask before each commit step. The user
|
|
88
|
+
authorized commits by writing them into the roadmap, but retains
|
|
89
|
+
step-level control.
|
|
90
|
+
- **Autonomous mode** (`personal.autonomy: on`, or `auto` after
|
|
91
|
+
opt-in) — agent does a quick pre-scan of the roadmap **before
|
|
92
|
+
starting execution**. If commit steps are found, ask **once** at
|
|
93
|
+
the very start: "Roadmap contains N commit steps — should they be
|
|
94
|
+
executed?". After that, honor or skip per the answer.
|
|
95
|
+
No re-asking per step.
|
|
96
|
+
|
|
97
|
+
The pre-scan ask is the **only** permitted commit-related question
|
|
98
|
+
in autonomous mode. Once answered, the decision is cached for the
|
|
99
|
+
rest of the roadmap execution.
|
|
100
|
+
|
|
101
|
+
## See also
|
|
102
|
+
|
|
103
|
+
- [`autonomous-execution`](autonomous-execution.md) — when to suppress
|
|
104
|
+
trivial questions; this rule survives the suppression.
|
|
105
|
+
- [`scope-control`](scope-control.md) — git-ops permission gate
|
|
106
|
+
(push, merge, branch, PR, tag stay separately permission-gated).
|
|
107
|
+
- [`/commit`](../commands/commit.md) — split and commit with confirmation.
|
|
108
|
+
- [`/commit-in-chunks`](../commands/commit-in-chunks.md) — auto-split
|
|
109
|
+
and commit without confirmation.
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "always"
|
|
3
|
+
description: "Always — direct, unembellished answers. No flattery, no invented facts (verify the load-bearing ones with tools, otherwise ask). Emojis only as functional markers — status, warning, mandated. Brevity is the default."
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
source: package
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Direct Answers
|
|
9
|
+
|
|
10
|
+
Three Iron Laws govern every reply. They override conversation
|
|
11
|
+
momentum, politeness defaults, and the urge to fill space.
|
|
12
|
+
|
|
13
|
+
## Iron Law 1 — No Flattery
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
NEVER OPEN WITH "GREAT QUESTION", "FASCINATING", "EXCELLENT POINT".
|
|
17
|
+
NEVER PRAISE THE USER'S IDEA TO MAKE THEM HAPPY.
|
|
18
|
+
ANSWER THE SUBSTANCE. SHIP THE TRUTH.
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
- No positive adjectives about the user, their question, idea, or
|
|
22
|
+
work product as an opener.
|
|
23
|
+
- No subjective judgments on the user's code, decisions, or work
|
|
24
|
+
products ("nice approach", "clean design", "boring") unless the
|
|
25
|
+
user asked for an evaluation.
|
|
26
|
+
- "Good catch" / "you're right" only when literally true and
|
|
27
|
+
load-bearing for the answer.
|
|
28
|
+
- Acknowledge mistakes without performative apologies. One sentence,
|
|
29
|
+
switch behavior.
|
|
30
|
+
|
|
31
|
+
Failure mode: praise as a hedge before delivering bad news. Drop the
|
|
32
|
+
cushion, deliver the news.
|
|
33
|
+
|
|
34
|
+
## Iron Law 2 — No Invented Facts (severity-tiered)
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
DO NOT CLAIM WHAT YOU HAVEN'T VERIFIED.
|
|
38
|
+
THE MORE LOAD-BEARING THE CLAIM, THE HARDER YOU VERIFY.
|
|
39
|
+
WHEN VERIFICATION IS NOT WORTH THE COST → ASK.
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
| Severity | Examples | Required action |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| **High — load-bearing** | File paths, function/method signatures, version numbers, security claims, API contracts, "this test passes/fails", "this method exists" | MUST verify with tools (`view`, `grep`, `codebase-retrieval`, command output) before claiming. If too expensive → ask the user. |
|
|
45
|
+
| **Medium — project-shape** | "This project uses X for Y", general conventions, file location guesses | Verify if one tool call reaches it; otherwise hedge explicitly ("I'd guess X — not checked"). |
|
|
46
|
+
| **Low — well-known idioms** | Generic language/framework idioms, illustrative examples, well-documented public APIs | Inference acceptable. Mark as inference if not 100% sure. |
|
|
47
|
+
|
|
48
|
+
User override: "just guess", "rough estimate is fine", "skip the
|
|
49
|
+
verify" → drop to Low for that turn.
|
|
50
|
+
|
|
51
|
+
Hedging language is explicit and short: "haven't verified X",
|
|
52
|
+
"guess, not checked". Never bare "probably" / "vermutlich" without
|
|
53
|
+
naming what's unverified.
|
|
54
|
+
|
|
55
|
+
## Iron Law 3 — Brevity by Default
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
THE SHORTEST REPLY THAT FULLY ANSWERS THE QUESTION IS THE RIGHT REPLY.
|
|
59
|
+
LONG ANSWERS ARE A FAILURE MODE, NOT A SIGN OF EFFORT.
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
- Skip restating the user's question.
|
|
63
|
+
- Skip announcing intent ("Let me…", "I will now…"). Just do.
|
|
64
|
+
- Skip explaining why a tool was used — the call result speaks.
|
|
65
|
+
- Skip post-hoc summary unless the user must recheck a decision.
|
|
66
|
+
- Multi-step work → bullet points, not paragraphs.
|
|
67
|
+
- Question with one true answer → one sentence + the answer.
|
|
68
|
+
|
|
69
|
+
`token-efficiency` covers the loop side (no repeated tool calls);
|
|
70
|
+
this rule covers the per-reply-length side. **Never overrides**
|
|
71
|
+
`user-interaction` (numbered options stay) or command-mandated
|
|
72
|
+
steps — brevity ≠ skipping required questions.
|
|
73
|
+
|
|
74
|
+
## Emoji Scope — Whitelist + Blacklist
|
|
75
|
+
|
|
76
|
+
Emojis are **functional markers**, never decoration.
|
|
77
|
+
|
|
78
|
+
**Whitelist — allowed and expected:**
|
|
79
|
+
|
|
80
|
+
- Mandated markers from rules/scripts: `📒` (chat-history heartbeat,
|
|
81
|
+
verbatim per `chat-history-visibility`), mode markers from
|
|
82
|
+
`role-mode-adherence`.
|
|
83
|
+
- CLI status icons: `❌`, `✅`, `⚠️` — two-space rule from
|
|
84
|
+
`language-and-tone` § other-language-rules still applies.
|
|
85
|
+
- Roadmap status checkboxes: `[x]`, `[~]`, `[-]`.
|
|
86
|
+
|
|
87
|
+
**Blacklist — never in the agent's own prose:**
|
|
88
|
+
|
|
89
|
+
- Opening flair: ✨, 🚀, 🎉, 💡, 🔥, 👍.
|
|
90
|
+
- Empathy signaling: ❤️, 🤗, 😊.
|
|
91
|
+
- Section dividers / headline ornaments.
|
|
92
|
+
- Reaction reactions to the user's message.
|
|
93
|
+
|
|
94
|
+
If unsure whether a given emoji is functional → assume blacklist.
|
|
95
|
+
|
|
96
|
+
## Failure modes the user will call out
|
|
97
|
+
|
|
98
|
+
- "Great question, …" / "Das ist eine gute Frage" — Iron Law 1.
|
|
99
|
+
- Stating a function name without `grep`/`view` — Iron Law 2.
|
|
100
|
+
- Three paragraphs for a one-line answer — Iron Law 3.
|
|
101
|
+
- ✨/🎉/💡 to mark "this is interesting" — emoji blacklist.
|
|
102
|
+
|
|
103
|
+
When called out: acknowledge once in the user's language, switch,
|
|
104
|
+
no excuses (mirrors `language-and-tone` § slip handling).
|
|
105
|
+
|
|
106
|
+
## Interactions
|
|
107
|
+
|
|
108
|
+
- `language-and-tone` — language mirroring, `.md` always English,
|
|
109
|
+
CLI-icon two-space rule.
|
|
110
|
+
- `ask-when-uncertain` — resolution surface for Iron Law 2 gaps.
|
|
111
|
+
- `think-before-action` — how to verify code-behavior claims.
|
|
112
|
+
- `verify-before-complete` — completion-claim evidence gate.
|
|
113
|
+
- `token-efficiency` — loop-side brevity.
|
|
114
|
+
- `user-interaction` — numbered-options Iron Law overrides brevity.
|
|
@@ -61,6 +61,42 @@ exist in `.augment/templates/agent-settings.md`:
|
|
|
61
61
|
**This step is mandatory.** If the template gains a new key but the local `.agent-settings.yml`
|
|
62
62
|
is not updated, the user cannot discover the new setting exists.
|
|
63
63
|
|
|
64
|
+
## Distribution manifests and hook registries
|
|
65
|
+
|
|
66
|
+
`.augment/`-internal sync (counts, contexts, cross-refs) is one half. The
|
|
67
|
+
other half is **distribution manifests** that ship the package to consumers
|
|
68
|
+
and **hook registries** that wire engine code into platform lifecycles.
|
|
69
|
+
These are not auto-derived — they drift silently until CI catches them, and
|
|
70
|
+
on cooperative platforms (no pre-commit) they can sit broken in a branch
|
|
71
|
+
for hours.
|
|
72
|
+
|
|
73
|
+
When a **skill** is added, renamed, or deleted under
|
|
74
|
+
`.agent-src.uncompressed/skills/`:
|
|
75
|
+
|
|
76
|
+
| Manifest | Required update |
|
|
77
|
+
|---|---|
|
|
78
|
+
| `.claude-plugin/marketplace.json` | Add/remove the `./.claude/skills/<name>` entry in `plugins[0].skills[]`, alphabetical position. Caught by `scripts/lint_marketplace.py` in CI. |
|
|
79
|
+
| `.augment-plugin/marketplace.json` | Skill-name-agnostic — no update needed. Touch only when plugin metadata (description, tags) changes. |
|
|
80
|
+
| `.github/plugin/marketplace.json` | Same as above — metadata-only manifest. |
|
|
81
|
+
|
|
82
|
+
When a **hook** is added, renamed, or deleted under
|
|
83
|
+
`.agent-src.uncompressed/templates/scripts/work_engine/hooks/builtin/`:
|
|
84
|
+
|
|
85
|
+
| Registry | Required update |
|
|
86
|
+
|---|---|
|
|
87
|
+
| `templates/scripts/work_engine/hooks/builtin/__init__.py` | New hook class → add the import + `__all__` entry. Single source of truth for engine-side registration. |
|
|
88
|
+
| `templates/consumer-settings/claude-settings.json` | Only when a **new platform event** is wired (e.g. first time a hook listens on `SessionEnd`). Existing hooks reuse the `./agent-config chat-history:hook --platform claude` dispatcher — no per-hook entry needed. |
|
|
89
|
+
| `templates/consumer-settings/augment-cli-hooks.json` | Same logic — new platform event → new `command` block; new hook on existing event → no update. |
|
|
90
|
+
|
|
91
|
+
Failure mode that motivated this section: a skill on disk without its
|
|
92
|
+
`marketplace.json` entry passes local edits, builds, and tests — only
|
|
93
|
+
CI catches it via `lint_marketplace`. The cooperative path is
|
|
94
|
+
"agent updates the manifest in the same response as the skill"; the
|
|
95
|
+
structural backstop is a pre-commit hook installed by
|
|
96
|
+
`scripts/install-hooks.sh` that runs `lint_marketplace` on every
|
|
97
|
+
commit. Run the installer once per clone; bypass for an unrelated WIP
|
|
98
|
+
commit is `git commit --no-verify`.
|
|
99
|
+
|
|
64
100
|
## Content consistency
|
|
65
101
|
|
|
66
102
|
**CRITICAL — MANDATORY CHECK:** When a rule, skill, or guideline's **content** is changed
|
|
@@ -7,6 +7,16 @@ source: package
|
|
|
7
7
|
|
|
8
8
|
# Downstream Changes
|
|
9
9
|
|
|
10
|
+
## The Iron Law
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
EVERY EDIT IS INCOMPLETE UNTIL ALL DOWNSTREAM CHANGES ARE MADE.
|
|
14
|
+
MISSING A CALLER, A TEST, OR AN IMPORT IS A CRITICAL FAILURE.
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Do NOT move on to the next task, claim completion, or suggest
|
|
18
|
+
committing until every caller, test, import, and reference is updated.
|
|
19
|
+
|
|
10
20
|
## Rule
|
|
11
21
|
|
|
12
22
|
After EVERY code edit, find **ALL downstream changes** needed. Missing a caller, a test,
|
|
@@ -59,12 +69,3 @@ After completing all downstream changes:
|
|
|
59
69
|
2. **No broken tests** — run the test suite
|
|
60
70
|
3. **No broken types** — PHPStan Level 9 catches signature mismatches
|
|
61
71
|
4. **No stale references** — grep for the old name/namespace to confirm zero results
|
|
62
|
-
|
|
63
|
-
## The iron law
|
|
64
|
-
|
|
65
|
-
```
|
|
66
|
-
Every edit is incomplete until all downstream changes are made.
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
Do NOT move on to the next task, claim completion, or suggest committing
|
|
70
|
-
until every caller, test, import, and reference is updated.
|
|
@@ -40,10 +40,11 @@ Before coding, quickly verify:
|
|
|
40
40
|
- Does similar functionality already exist?
|
|
41
41
|
- Does it follow established patterns in the codebase?
|
|
42
42
|
- Does it contradict existing conventions?
|
|
43
|
-
- Do **multiple valid patterns/frameworks** already exist (Tailwind + Flux, multiple form
|
|
43
|
+
- Do **multiple valid patterns/frameworks** already exist (e.g. Tailwind + Flux, multiple form libraries, competing state stores)? If yes, do NOT pick one arbitrarily — ask which to use.
|
|
44
|
+
- Is the change a **second branch on the same discriminator** — second `match`/`switch` arm, second `if/elseif`, or second class hardcoded to one enum value (e.g. `Provider::FOO`, `'stripe'`)? If yes, run the Strategy sniff test before adding the branch — see [`guidelines/php/patterns/strategy.md`](../guidelines/php/patterns/strategy.md#sniff-test--when-an-enumstring-discriminator-wants-to-become-a-strategy).
|
|
44
45
|
|
|
45
46
|
**If misfit** → show evidence (file references), propose alternative.
|
|
46
|
-
**If multiple valid options** → list them, ask which. See [`no blind implementation`](../guidelines/agent-infra/agent-interaction-and-decision-quality.md#2-no-blind-implementation).
|
|
47
|
+
**If multiple valid options** → list them, ask which to use. See [`no blind implementation`](../guidelines/agent-infra/agent-interaction-and-decision-quality.md#2-no-blind-implementation).
|
|
47
48
|
|
|
48
49
|
### 3. Is the approach sound?
|
|
49
50
|
|
|
@@ -90,7 +91,9 @@ The agent is a thought partner, not a gatekeeper. After presenting concerns:
|
|
|
90
91
|
|
|
91
92
|
## Creating new agent artifacts
|
|
92
93
|
|
|
93
|
-
|
|
94
|
-
check is handled by
|
|
95
|
-
|
|
96
|
-
|
|
94
|
+
When the request is to create or significantly rewrite a skill, rule, command,
|
|
95
|
+
or guideline, the "fit the existing architecture" check above is handled by
|
|
96
|
+
[`artifact-drafting-protocol`](artifact-drafting-protocol.md)'s Phase B
|
|
97
|
+
(Research). Follow that protocol instead of improvising a one-shot check — it
|
|
98
|
+
scans `.agent-src.uncompressed/` for overlap and reports candidates to extend
|
|
99
|
+
before creating a new file.
|
|
@@ -10,20 +10,46 @@ source: package
|
|
|
10
10
|
## Iron Law — mirror the user's language, ALWAYS
|
|
11
11
|
|
|
12
12
|
```
|
|
13
|
-
MIRROR THE LANGUAGE OF THE USER'S LAST MESSAGE. ALWAYS.
|
|
14
|
-
|
|
13
|
+
MIRROR THE LANGUAGE OF THE USER'S LAST/CURRENT MESSAGE. ALWAYS.
|
|
14
|
+
THE FIRST TOKEN OF EVERY REPLY MUST BE IN THAT LANGUAGE.
|
|
15
15
|
A REPLY IN THE WRONG LANGUAGE IS A RULE VIOLATION, NOT A SLIP.
|
|
16
|
+
NO MOMENTUM EXCEPTION. NO TECHNICAL-CONTEXT EXCEPTION.
|
|
17
|
+
NO "SWITCH MID-PARAGRAPH". NO "LAST 20 TURNS WERE ENGLISH".
|
|
16
18
|
```
|
|
17
19
|
|
|
18
|
-
**Overrides** conversation momentum, tool-output habits,
|
|
19
|
-
|
|
20
|
+
**Overrides** conversation momentum, tool-output habits, prior-reply
|
|
21
|
+
language, codebase language, open-file language, files-just-edited
|
|
22
|
+
language, convenience. First thing to check on every reply, last thing
|
|
23
|
+
to check before sending.
|
|
24
|
+
|
|
25
|
+
Canonical failure: agent edited English `.md` for many turns; user
|
|
26
|
+
types short German (`3`, `weiter`, `mach das`, `und jetzt X`); agent
|
|
27
|
+
answers English because momentum wins. **Trigger is the user's last
|
|
28
|
+
message, not the turn count.** Length irrelevant — `3` after a German
|
|
29
|
+
question still means German continues.
|
|
30
|
+
|
|
31
|
+
### Source of language truth — chat messages ONLY
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
THE LANGUAGE SIGNAL IS THE USER'S CHAT MESSAGES. NOTHING ELSE.
|
|
35
|
+
OPEN FILES, ROADMAPS, .md CONTENT, TOOL OUTPUT, CODE, COMMIT MESSAGES,
|
|
36
|
+
TICKETS, PR DESCRIPTIONS, FILE NAMES — NONE OF THEM COUNT.
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
`.md` files in this repo are English by rule (see below) — that says
|
|
40
|
+
nothing about chat language. Same for: file contents read via `view` /
|
|
41
|
+
`grep`, quoted commits / tickets / PRs / branches, code identifiers,
|
|
42
|
+
the agent's own previous replies. Only the most recent **chat message**
|
|
43
|
+
sets the language. User opens an English roadmap and types German →
|
|
44
|
+
reply in German.
|
|
20
45
|
|
|
21
46
|
### Pre-send gate — MANDATORY before every reply
|
|
22
47
|
|
|
23
48
|
Run silently **before** emitting any tokens:
|
|
24
49
|
|
|
25
|
-
1. **Detect** — language of user's last message
|
|
26
|
-
|
|
50
|
+
1. **Detect** — language of user's last **chat message** (not the open
|
|
51
|
+
file, not the roadmap, not the prior reply).
|
|
52
|
+
German signals: "ich", "Du", "nicht", "warum", "wie", "ist", umlauts. <!-- md-language-check: ignore -->
|
|
27
53
|
English signals: "I", "you", "is", "the", "how".
|
|
28
54
|
Mixed → mirror the **dominant** language; tie → German wins (project default).
|
|
29
55
|
2. **Check** — is drafted prose (not code, not file contents) in that language?
|
|
@@ -66,6 +92,10 @@ Run silently **before** emitting any tokens:
|
|
|
66
92
|
code identifiers as-is; translate everything else.
|
|
67
93
|
- Assuming English because "the codebase is English" — codebase language ≠
|
|
68
94
|
conversation language.
|
|
95
|
+
- Mirroring the **open file** the IDE reports — open files are background
|
|
96
|
+
context, not chat messages.
|
|
97
|
+
- Mirroring the **roadmap or ticket** being executed — artefacts are English
|
|
98
|
+
by `.md` rule; chat language is whatever the user wrote.
|
|
69
99
|
|
|
70
100
|
## Other language rules
|
|
71
101
|
|
|
@@ -102,3 +132,52 @@ The `.md` source files are the English blueprint — they define WHAT to say, no
|
|
|
102
132
|
> 1. Interactive — ask before each comment
|
|
103
133
|
> 2. Automatic — handle all independently
|
|
104
134
|
```
|
|
135
|
+
|
|
136
|
+
### Quoted user-input examples — same rule, with one labeled exception
|
|
137
|
+
|
|
138
|
+
Common drift pattern: a rule documents trigger phrases the agent
|
|
139
|
+
should recognize and writes them as quoted German examples inside
|
|
140
|
+
English prose. **Not allowed**, even when demonstrative.
|
|
141
|
+
|
|
142
|
+
**Wrong** (DE quote embedded in EN prose):
|
|
143
|
+
|
|
144
|
+
```md
|
|
145
|
+
Single-decision delegation ("für diesen Schritt entscheide du") →
|
|
146
|
+
handle that step autonomously.
|
|
147
|
+
|
|
148
|
+
A standing "arbeite selbstständig" never lifts the floor.
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**Correct** — two ways:
|
|
152
|
+
|
|
153
|
+
1. **Translate to English.** Trigger recognition is semantic; the
|
|
154
|
+
agent matches intent across languages regardless of the example.
|
|
155
|
+
`("you decide for this step")` works as well as the German.
|
|
156
|
+
2. **Use a labeled `DE: … · EN: …` anchor list** when the
|
|
157
|
+
multilingual nature of recognition is the point:
|
|
158
|
+
|
|
159
|
+
```md
|
|
160
|
+
- DE: "arbeite selbstständig" · "frag nicht jedes Mal" · "tue es einfach"
|
|
161
|
+
- EN: "work autonomously" · "don't ask" · "just do it"
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
The labeled-anchor block is the **only** allowed location for German
|
|
165
|
+
prose in an English `.md` file. Body text, example sentences, prompt
|
|
166
|
+
templates, agent-rendered strings, and failure modes must be English.
|
|
167
|
+
Reference established phrases abstractly later (e.g. "a standing
|
|
168
|
+
autonomy directive") and link back to the anchor block.
|
|
169
|
+
|
|
170
|
+
### Detection heuristic
|
|
171
|
+
|
|
172
|
+
Before saving an `.md` file under `.augment/`, `.agent-src/`,
|
|
173
|
+
`.agent-src.uncompressed/`, or `agents/`, scan for:
|
|
174
|
+
|
|
175
|
+
- Umlauts (`ä`, `ö`, `ü`, `Ä`, `Ö`, `Ü`, `ß`) outside fenced code,
|
|
176
|
+
file paths, and the labeled anchor block.
|
|
177
|
+
- German function words in unquoted prose: `für`, `nicht`, `dass`,
|
|
178
|
+
`wenn`, `sollte`, `werden`, `arbeite`, `selbstständig`, `jetzt`,
|
|
179
|
+
`einfach`, `weiter`, `lösche`, `frag`, `schreib`, `mach`.
|
|
180
|
+
- Non-English quoted phrases in body text (paragraphs, list items,
|
|
181
|
+
table cells) when the surrounding prose is English.
|
|
182
|
+
|
|
183
|
+
Hit → translate the fragment or move it into a `DE: … · EN: …` block.
|