@event4u/agent-config 1.20.0 → 1.22.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/agents.md +1 -1
- package/.agent-src/commands/bug-fix.md +2 -1
- package/.agent-src/commands/bug-investigate.md +3 -2
- package/.agent-src/commands/challenge-me/vision.md +348 -0
- package/.agent-src/commands/challenge-me/with-docs.md +333 -0
- package/.agent-src/commands/challenge-me.md +61 -0
- package/.agent-src/commands/chat-history/import.md +60 -64
- package/.agent-src/commands/compress.md +12 -0
- package/.agent-src/commands/context/create.md +2 -2
- package/.agent-src/commands/context.md +1 -1
- package/.agent-src/commands/copilot-agents.md +1 -1
- package/.agent-src/commands/council/default.md +69 -10
- package/.agent-src/commands/council.md +1 -1
- package/.agent-src/commands/create-pr.md +7 -3
- package/.agent-src/commands/e2e-heal.md +1 -1
- package/.agent-src/commands/e2e-plan.md +1 -1
- package/.agent-src/commands/feature/dev.md +3 -3
- package/.agent-src/commands/feature.md +1 -1
- package/.agent-src/commands/fix/seeder.md +2 -2
- package/.agent-src/commands/fix.md +1 -1
- package/.agent-src/commands/grill-me.md +38 -0
- package/.agent-src/commands/jira-ticket.md +1 -1
- package/.agent-src/commands/judge/steps.md +1 -1
- package/.agent-src/commands/judge.md +2 -2
- package/.agent-src/commands/memory.md +1 -1
- package/.agent-src/commands/mode.md +5 -5
- package/.agent-src/commands/module.md +1 -1
- package/.agent-src/commands/onboard.md +4 -4
- package/.agent-src/commands/optimize/augmentignore.md +1 -1
- package/.agent-src/commands/optimize-prompt.md +61 -0
- package/.agent-src/commands/optimize.md +1 -1
- package/.agent-src/commands/override.md +1 -1
- package/.agent-src/commands/review-changes.md +1 -1
- package/.agent-src/commands/review-routing.md +1 -1
- package/.agent-src/commands/roadmap/ai-council.md +183 -0
- package/.agent-src/commands/roadmap/create.md +6 -1
- package/.agent-src/commands/roadmap/process-full.md +58 -0
- package/.agent-src/commands/roadmap/process-phase.md +69 -0
- package/.agent-src/commands/roadmap/process-step.md +57 -0
- package/.agent-src/commands/roadmap.md +45 -17
- 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 +2 -2
- package/.agent-src/commands/tests.md +1 -1
- package/.agent-src/commands/threat-model.md +5 -4
- package/.agent-src/contexts/augment-infrastructure.md +1 -1
- package/.agent-src/contexts/authority/commit-mechanics.md +14 -1
- package/.agent-src/contexts/authority/destructive-mechanics.md +14 -1
- package/.agent-src/contexts/authority/scope-mechanics.md +5 -0
- package/.agent-src/contexts/communication/rules-auto/guidelines-mechanics.md +76 -0
- package/.agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +54 -19
- package/.agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +98 -0
- package/.agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +93 -0
- package/.agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +128 -5
- package/.agent-src/contexts/execution/autonomy-mechanics.md +44 -0
- package/.agent-src/contexts/execution/roadmap-process-loop.md +125 -0
- package/.agent-src/contexts/model-recommendations.md +2 -2
- package/.agent-src/contexts/override-system.md +1 -1
- package/.agent-src/contexts/skills-and-commands.md +1 -1
- package/.agent-src/personas/product-owner.md +2 -2
- package/.agent-src/personas/qa.md +1 -1
- package/.agent-src/rules/agent-authority.md +5 -6
- package/.agent-src/rules/agent-docs.md +11 -53
- package/.agent-src/rules/analysis-skill-routing.md +10 -40
- package/.agent-src/rules/architecture.md +6 -1
- package/.agent-src/rules/artifact-drafting-protocol.md +5 -0
- package/.agent-src/rules/artifact-engagement-recording.md +23 -59
- package/.agent-src/rules/ask-when-uncertain.md +24 -47
- package/.agent-src/rules/augment-portability.md +14 -62
- package/.agent-src/rules/augment-source-of-truth.md +10 -1
- package/.agent-src/rules/autonomous-execution.md +17 -98
- package/.agent-src/rules/capture-learnings.md +9 -80
- package/.agent-src/rules/cli-output-handling.md +12 -42
- package/.agent-src/rules/command-suggestion-policy.md +25 -73
- package/.agent-src/rules/commit-conventions.md +9 -58
- package/.agent-src/rules/commit-policy.md +16 -47
- package/.agent-src/rules/context-hygiene.md +5 -0
- package/.agent-src/rules/direct-answers.md +21 -50
- package/.agent-src/rules/docker-commands.md +11 -45
- package/.agent-src/rules/docs-sync.md +10 -56
- package/.agent-src/rules/downstream-changes.md +5 -0
- package/.agent-src/rules/e2e-testing.md +9 -44
- package/.agent-src/rules/guidelines.md +13 -75
- package/.agent-src/rules/improve-before-implement.md +11 -2
- package/.agent-src/rules/invite-challenge.md +71 -0
- package/.agent-src/rules/language-and-tone.md +41 -106
- package/.agent-src/rules/laravel-translations.md +11 -40
- package/.agent-src/rules/markdown-safe-codeblocks.md +4 -0
- package/.agent-src/rules/minimal-safe-diff.md +4 -0
- package/.agent-src/rules/missing-tool-handling.md +4 -0
- package/.agent-src/rules/model-recommendation.md +9 -61
- package/.agent-src/rules/no-attribution-footers.md +5 -0
- package/.agent-src/rules/no-cheap-questions.md +11 -27
- package/.agent-src/rules/no-council-references.md +76 -0
- package/.agent-src/rules/no-roadmap-references.md +7 -0
- package/.agent-src/rules/non-destructive-by-default.md +13 -43
- package/.agent-src/rules/onboarding-gate.md +9 -117
- package/.agent-src/rules/package-ci-checks.md +10 -37
- package/.agent-src/rules/php-coding.md +10 -55
- package/.agent-src/rules/preservation-guard.md +9 -0
- package/.agent-src/rules/review-routing-awareness.md +9 -97
- package/.agent-src/rules/reviewer-awareness.md +8 -83
- package/.agent-src/rules/roadmap-progress-sync.md +7 -170
- package/.agent-src/rules/role-mode-adherence.md +6 -2
- package/.agent-src/rules/rule-type-governance.md +8 -66
- package/.agent-src/rules/runtime-safety.md +5 -0
- package/.agent-src/rules/scope-control.md +17 -62
- package/.agent-src/rules/security-sensitive-stop.md +7 -1
- package/.agent-src/rules/size-enforcement.md +6 -1
- package/.agent-src/rules/skill-improvement-trigger.md +9 -49
- package/.agent-src/rules/skill-quality.md +7 -113
- package/.agent-src/rules/slash-command-routing-policy.md +11 -63
- package/.agent-src/rules/think-before-action.md +22 -87
- package/.agent-src/rules/token-efficiency.md +10 -74
- package/.agent-src/rules/token-optimizer-maintenance.md +68 -0
- package/.agent-src/rules/tool-safety.md +4 -0
- package/.agent-src/rules/ui-audit-gate.md +25 -61
- package/.agent-src/rules/upstream-proposal.md +9 -67
- package/.agent-src/rules/user-interaction.md +22 -108
- package/.agent-src/rules/verify-before-complete.md +1 -1
- package/.agent-src/skills/adversarial-review/SKILL.md +1 -0
- package/.agent-src/skills/agent-docs-writing/SKILL.md +1 -1
- package/.agent-src/skills/ai-council/SKILL.md +197 -8
- package/.agent-src/skills/analysis-autonomous-mode/SKILL.md +1 -1
- package/.agent-src/skills/analysis-skill-router/SKILL.md +3 -3
- package/.agent-src/skills/artisan-commands/SKILL.md +2 -2
- package/.agent-src/skills/authz-review/SKILL.md +1 -1
- package/.agent-src/skills/aws-infrastructure/SKILL.md +5 -5
- package/.agent-src/skills/blast-radius-analyzer/SKILL.md +8 -8
- package/.agent-src/skills/bug-analyzer/SKILL.md +6 -5
- package/.agent-src/skills/code-refactoring/SKILL.md +4 -4
- package/.agent-src/skills/code-review/SKILL.md +2 -2
- package/.agent-src/skills/command-writing/SKILL.md +11 -0
- package/.agent-src/skills/composer-packages/SKILL.md +2 -2
- package/.agent-src/skills/context-authoring/SKILL.md +11 -0
- package/.agent-src/skills/context-document/SKILL.md +1 -1
- package/.agent-src/skills/copilot-agents-optimization/SKILL.md +23 -0
- package/.agent-src/skills/copilot-config/SKILL.md +1 -1
- package/.agent-src/skills/dependency-upgrade/SKILL.md +2 -2
- package/.agent-src/skills/devcontainer/SKILL.md +2 -2
- package/.agent-src/skills/developer-like-execution/SKILL.md +1 -1
- package/.agent-src/skills/docker/SKILL.md +1 -1
- package/.agent-src/skills/dto-creator/SKILL.md +1 -1
- package/.agent-src/skills/estimate-ticket/SKILL.md +2 -2
- package/.agent-src/skills/fe-design/SKILL.md +4 -4
- package/.agent-src/skills/feature-planning/SKILL.md +5 -5
- package/.agent-src/skills/funnel-analysis/SKILL.md +1 -1
- package/.agent-src/skills/laravel/SKILL.md +1 -1
- package/.agent-src/skills/laravel-notifications/SKILL.md +5 -5
- package/.agent-src/skills/laravel-pennant/SKILL.md +1 -1
- package/.agent-src/skills/laravel-pulse/SKILL.md +4 -4
- package/.agent-src/skills/laravel-reverb/SKILL.md +2 -2
- package/.agent-src/skills/laravel-scheduling/SKILL.md +1 -1
- package/.agent-src/skills/migration-creator/SKILL.md +7 -7
- package/.agent-src/skills/multi-tenancy/SKILL.md +8 -8
- package/.agent-src/skills/performance-analysis/SKILL.md +3 -3
- package/.agent-src/skills/pest-testing/SKILL.md +6 -6
- package/.agent-src/skills/php-service/SKILL.md +2 -2
- package/.agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +3 -3
- package/.agent-src/skills/project-analysis-react/SKILL.md +1 -1
- package/.agent-src/skills/project-analysis-symfony/SKILL.md +1 -1
- package/.agent-src/skills/project-analysis-zend-laminas/SKILL.md +2 -2
- package/.agent-src/skills/project-analyzer/SKILL.md +4 -4
- package/.agent-src/skills/prompt-optimizer/SKILL.md +108 -0
- package/.agent-src/skills/readme-reviewer/SKILL.md +1 -1
- package/.agent-src/skills/roadmap-management/SKILL.md +7 -7
- package/.agent-src/skills/rule-writing/SKILL.md +33 -0
- package/.agent-src/skills/sentry-integration/SKILL.md +1 -1
- package/.agent-src/skills/skill-writing/SKILL.md +14 -0
- package/.agent-src/skills/systematic-debugging/SKILL.md +22 -2
- package/.agent-src/skills/technical-specification/SKILL.md +58 -1
- package/.agent-src/skills/terraform/SKILL.md +2 -2
- package/.agent-src/skills/terragrunt/SKILL.md +8 -8
- package/.agent-src/skills/test-performance/SKILL.md +5 -5
- package/.agent-src/skills/threat-modeling/SKILL.md +3 -2
- package/.agent-src/skills/token-optimizer/SKILL.md +110 -0
- package/.agent-src/skills/universal-project-analysis/SKILL.md +1 -1
- package/.agent-src/templates/AGENTS.md +1 -1
- package/.agent-src/templates/agent-settings.md +35 -19
- package/.agent-src/templates/command.md +17 -1
- package/.agent-src/templates/contexts/tenant-boundaries.md +2 -2
- package/.agent-src/templates/contexts.md +1 -1
- package/.agent-src/templates/copilot-instructions.md +21 -0
- package/.agent-src/templates/copilot-review-instructions.md +76 -0
- package/.agent-src/templates/features.md +1 -1
- package/.agent-src/templates/roadmaps.md +10 -2
- package/.agent-src/templates/rule.md +129 -0
- package/.agent-src/templates/skill.md +17 -0
- package/.claude-plugin/marketplace.json +12 -2
- package/AGENTS.md +32 -5
- package/CHANGELOG.md +107 -3
- package/README.md +22 -21
- package/config/agent-settings.template.yml +66 -10
- package/config/gitignore-block.txt +7 -0
- package/docs/architecture.md +86 -5
- package/docs/catalog.md +16 -6
- package/docs/contracts/agent-memory-contract.md +1 -1
- package/docs/contracts/command-clusters.md +45 -1
- package/docs/contracts/context-paths.md +2 -1
- package/docs/contracts/file-ownership-matrix.json +354 -500
- package/docs/contracts/iron-law-overrides.txt +25 -0
- package/docs/contracts/kernel-membership.md +273 -0
- package/docs/contracts/load-context-schema.md +26 -11
- package/docs/contracts/pilot/agent-authority.md +24 -0
- package/docs/contracts/pilot/direct-answers.md +70 -0
- package/docs/contracts/pilot/language-and-tone.md +63 -0
- package/docs/contracts/rule-classification.md +170 -0
- package/docs/contracts/rule-router.md +153 -0
- package/docs/customization.md +17 -6
- package/docs/decisions/ADR-001-kernel-swap-deferred.md +109 -0
- package/docs/decisions/ADR-002-kernel-bucket-overrides.md +124 -0
- package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +126 -0
- package/docs/decisions/ADR-rule-kernel-and-router.md +122 -0
- package/docs/getting-started.md +2 -2
- package/docs/guidelines/agent-infra/naming.md +1 -1
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +176 -0
- package/docs/guidelines/agent-infra/rule-type-governance.md +73 -0
- package/docs/guidelines/agent-infra/size-and-scope.md +13 -2
- package/docs/guidelines/agent-infra/skill-quality-checklist.md +119 -0
- package/docs/guidelines/augment-portability-patterns.md +68 -0
- package/docs/guidelines/php/php-coding-patterns.md +62 -0
- package/package.json +1 -1
- package/scripts/_p43_bodies.py +235 -0
- package/scripts/_p43_compress.py +118 -0
- package/scripts/_p4_migrate.py +199 -0
- package/scripts/_phase2_shim_helper.py +1 -1
- package/scripts/_pilot_council_question.py +57 -0
- package/scripts/_pilot_measure.py +53 -0
- package/scripts/ai_council/session.py +107 -5
- package/scripts/build_linear_digest.py +3 -5
- package/scripts/check_always_budget.py +39 -6
- package/scripts/check_compressed_paths.py +213 -0
- package/scripts/check_compression.py +15 -0
- package/scripts/check_context_paths.py +1 -0
- package/scripts/check_council_layout.py +105 -0
- package/scripts/check_council_references.py +145 -0
- package/scripts/check_portability.py +2 -0
- package/scripts/check_references.py +2 -0
- package/scripts/check_token_optimizer_freshness.py +131 -0
- package/scripts/compile_router.py +148 -0
- package/scripts/compress.py +219 -11
- package/scripts/council_cli.py +132 -11
- package/scripts/council_prune.py +81 -0
- package/scripts/count_token_optimizer_usage.sh +54 -0
- package/scripts/install.sh +44 -2
- package/scripts/iron_law_sha.py +98 -0
- package/scripts/lint_load_context.py +35 -5
- package/scripts/measure_rule_budget.py +314 -0
- package/scripts/migrate_command_suggestions.py +2 -2
- package/scripts/prototype_lint_contradictions.py +150 -0
- package/scripts/schemas/command.schema.json +5 -0
- package/scripts/schemas/rule.schema.json +60 -6
- package/scripts/schemas/skill.schema.json +5 -0
- package/scripts/skill_linter.py +197 -7
- package/scripts/smoke_path_resolution.py +93 -0
- package/scripts/validate_frontmatter.py +41 -1
- package/.agent-src/commands/roadmap/execute.md +0 -109
- package/.agent-src/contexts/communication/rules-auto/artifact-engagement-recording-mechanics.md +0 -72
- package/.agent-src/contexts/communication/rules-auto/augment-portability-mechanics.md +0 -79
- package/.agent-src/contexts/communication/rules-auto/cli-output-handling-mechanics.md +0 -87
- package/.agent-src/contexts/communication/rules-auto/command-suggestion-policy-mechanics.md +0 -62
- package/.agent-src/contexts/communication/rules-auto/docs-sync-mechanics.md +0 -78
- package/.agent-src/contexts/communication/rules-auto/package-ci-checks-mechanics.md +0 -85
- package/.agent-src/contexts/communication/rules-auto/review-routing-awareness-mechanics.md +0 -65
- package/.agent-src/contexts/communication/rules-auto/roadmap-progress-sync-mechanics.md +0 -78
- package/.agent-src/contexts/communication/rules-auto/ui-audit-gate-mechanics.md +0 -53
- /package/{docs → .agent-src/contexts}/contracts/artifact-engagement-flow.md +0 -0
- /package/{docs → .agent-src/contexts}/contracts/command-suggestion-flow.md +0 -0
|
@@ -2,76 +2,18 @@
|
|
|
2
2
|
type: "auto"
|
|
3
3
|
tier: "2a"
|
|
4
4
|
description: "After creating or significantly improving a skill, rule, guideline, or command — ask if it should be contributed upstream to the shared package"
|
|
5
|
-
alwaysApply: false
|
|
6
5
|
source: package
|
|
6
|
+
triggers:
|
|
7
|
+
- phrase: "after creating"
|
|
8
|
+
- phrase: "after improving"
|
|
9
|
+
- keyword: "upstream"
|
|
10
|
+
routes_to:
|
|
11
|
+
- "skill:upstream-contribute"
|
|
7
12
|
---
|
|
8
13
|
|
|
9
14
|
# Upstream Proposal
|
|
10
15
|
|
|
11
|
-
|
|
16
|
+
**Iron Law.** After creating or significantly improving a skill / rule / guideline / command, ask whether to upstream it.
|
|
12
17
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
- Skill (new or major update)
|
|
16
|
-
- Rule (new or major update)
|
|
17
|
-
- Guideline (new or major update)
|
|
18
|
-
- Command (new or major update)
|
|
19
|
-
|
|
20
|
-
**Also activate when:**
|
|
21
|
-
|
|
22
|
-
- A project-specific skill/rule could be **generalized** to benefit all consumers
|
|
23
|
-
- An override was created that improves on the shared version
|
|
24
|
-
- A learning was captured that produced a high-quality new artifact
|
|
25
|
-
|
|
26
|
-
**Do NOT activate when:**
|
|
27
|
-
|
|
28
|
-
- Working inside the agent-config package itself (no self-referential proposals)
|
|
29
|
-
- The change is a trivial fix (typo, formatting)
|
|
30
|
-
- The user already declined upstream for this exact item in this conversation
|
|
31
|
-
|
|
32
|
-
## Consent check
|
|
33
|
-
|
|
34
|
-
**⛔ MANDATORY: Always ask the user. Never skip this step.**
|
|
35
|
-
|
|
36
|
-
After completing the creation/improvement, evaluate:
|
|
37
|
-
|
|
38
|
-
1. **Is this universal?** Could other projects benefit from this?
|
|
39
|
-
2. **Is this generalizable?** Even if project-specific, can it be abstracted?
|
|
40
|
-
3. **Is this high-quality?** Does it pass the promotion gate from `capture-learnings`?
|
|
41
|
-
|
|
42
|
-
If ANY of these is YES → propose to the user:
|
|
43
|
-
|
|
44
|
-
### For universal content (directly applicable):
|
|
45
|
-
|
|
46
|
-
```
|
|
47
|
-
> 🔄 The [skill/rule/guideline] `{name}` you just created could benefit all projects
|
|
48
|
-
> using the shared agent-config package.
|
|
49
|
-
>
|
|
50
|
-
> 1. Yes — contribute upstream via PR
|
|
51
|
-
> 2. No — keep project-local only
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
### For project-specific content (needs generalization):
|
|
55
|
-
|
|
56
|
-
```
|
|
57
|
-
> 🔄 The [skill/rule/guideline] `{name}` is project-specific, but I could generalize
|
|
58
|
-
> it for the shared package. [Brief explanation of what would change]
|
|
59
|
-
>
|
|
60
|
-
> 1. Yes — generalize and contribute upstream
|
|
61
|
-
> 2. No — keep project-local only
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
## After user response
|
|
65
|
-
|
|
66
|
-
- **User picks 1** → invoke `upstream-contribute` skill (which has its own consent gate for repo access)
|
|
67
|
-
- **User picks 2** → stop. Do NOT ask again for this item.
|
|
68
|
-
- **Max 1 proposal per created artifact** — never nag.
|
|
69
|
-
|
|
70
|
-
## Important
|
|
71
|
-
|
|
72
|
-
- **Consent is non-negotiable** — the user decides, always.
|
|
73
|
-
- **Do NOT batch proposals** — ask for each artifact separately.
|
|
74
|
-
- **Do NOT interrupt flow** — only propose AFTER the creation/improvement is complete.
|
|
75
|
-
- **Do NOT propose for trivial changes** — formatting, typos, comment updates.
|
|
76
|
-
- **Respect "no"** — if the user declines, do not revisit unless they bring it up.
|
|
77
|
-
- **Token efficiency** — this rule costs zero tokens when not triggered (auto type).
|
|
18
|
+
Body migrated to `skill:upstream-contribute` (per P4 of `road-to-kernel-and-router.md`).
|
|
19
|
+
Trigger-set above activates this routing under the `balanced` and `full` profiles.
|
|
@@ -5,14 +5,18 @@ description: "Asking the user a question, presenting options, or summarizing pro
|
|
|
5
5
|
alwaysApply: false
|
|
6
6
|
source: package
|
|
7
7
|
load_context:
|
|
8
|
-
-
|
|
8
|
+
- ../contexts/communication/rules-auto/user-interaction-mechanics.md
|
|
9
|
+
triggers:
|
|
10
|
+
- intent: "ask user a question"
|
|
11
|
+
- intent: "numbered options"
|
|
12
|
+
- intent: "summarizing progress"
|
|
9
13
|
---
|
|
10
14
|
|
|
11
15
|
# User Interaction
|
|
12
16
|
|
|
13
|
-
Two Iron Laws govern every reply that contains numbered options.
|
|
14
|
-
override conversation momentum, brevity, and the urge to defer
|
|
15
|
-
user. **Missing a recommendation is a rule violation, not a slip.**
|
|
17
|
+
Two Iron Laws govern every reply that contains numbered options.
|
|
18
|
+
They override conversation momentum, brevity, and the urge to defer
|
|
19
|
+
to the user. **Missing a recommendation is a rule violation, not a slip.**
|
|
16
20
|
|
|
17
21
|
## Iron Law 1 — Single-Source Recommendation
|
|
18
22
|
|
|
@@ -27,57 +31,6 @@ PROSE NAMING A "RECOMMENDED" PATH ABOVE OR BEFORE THE OPTIONS BLOCK = NO RECOMME
|
|
|
27
31
|
WRONG-LANGUAGE LABEL (`Recommendation:` WHEN USER IS GERMAN, OR VICE VERSA) = NO RECOMMENDATION.
|
|
28
32
|
```
|
|
29
33
|
|
|
30
|
-
The agent has read the code, the contracts, the trade-offs. Refusing
|
|
31
|
-
to take a position dumps that work back on the user. Take the
|
|
32
|
-
position; be wrong out loud if needed. "Egal, was bevorzugst Du?" /
|
|
33
|
-
"no preference" is NEVER acceptable.
|
|
34
|
-
|
|
35
|
-
**Position-agnostic — closes the most common slip:** End-of-turn
|
|
36
|
-
"Wie weiter?" / "What next?" / "How to proceed?" / "How should we
|
|
37
|
-
continue?" blocks with numbered options are **numbered-options
|
|
38
|
-
blocks**. Same Iron Law applies — exactly one `Empfehlung: N` /
|
|
39
|
-
`Recommendation: N` line, every time. There is no "these are just
|
|
40
|
-
follow-up suggestions" exception, no "the user knows better here"
|
|
41
|
-
exception, no "I genuinely don't have a preference" exception. If
|
|
42
|
-
the agent prints `1. … 2. … 3. …` anywhere in the reply, the
|
|
43
|
-
recommendation line is mandatory.
|
|
44
|
-
|
|
45
|
-
**Format — non-negotiable:**
|
|
46
|
-
|
|
47
|
-
- Options block stays NEUTRAL — no `(recommended)`, no `(rec)`, no `←`, no bold, no checkmark.
|
|
48
|
-
- Directly after the options block, ONE line, bolded, in the user's language:
|
|
49
|
-
- English: `**Recommendation: N — <option-name>** — <why>. Caveat: <flip-condition>.`
|
|
50
|
-
- German: `**Empfehlung: N — <option-name>** — <warum>. Caveat: <flip-bedingung>.`
|
|
51
|
-
- Other numbers MAY appear later in the prose, but ONLY as caveats
|
|
52
|
-
(`escalate to 3 if …`, `flip to 1 when …`). NEVER as a primary recommendation.
|
|
53
|
-
- If the agent genuinely cannot pick (rare — true 50/50 with missing data),
|
|
54
|
-
say what data would break the tie and ask for that instead.
|
|
55
|
-
|
|
56
|
-
**No trailing open-ended question after numbered options:**
|
|
57
|
-
|
|
58
|
-
If the reply contains numbered options, the recommendation line IS
|
|
59
|
-
the closer. No `Welcher Pfad?` / `What's it gonna be?` / `Was meinst
|
|
60
|
-
Du?` / `Was sagst Du?` / `Welche willst Du?` / `What do you think?`
|
|
61
|
-
after the recommendation — that reframes the vote as an opinion poll
|
|
62
|
-
and is hedging in disguise. The user picks a number; the agent does
|
|
63
|
-
not re-ask. Permitted: a clarifying caveat sentence on the
|
|
64
|
-
recommendation line itself (`Caveat: flip to 2 if …`). Forbidden:
|
|
65
|
-
any standalone trailing question that re-opens the choice.
|
|
66
|
-
|
|
67
|
-
**What does NOT count as a recommendation:**
|
|
68
|
-
|
|
69
|
-
- "Both work" / "either is fine" / "depends on what you prefer"
|
|
70
|
-
- Listing pros and cons without picking a number
|
|
71
|
-
- "I'd lean towards X" without a reason
|
|
72
|
-
- Hiding behind "you know the project better"
|
|
73
|
-
- Inline `(recommended)` tag with no follow-up `Recommendation: N` line
|
|
74
|
-
|
|
75
|
-
**Slip handling — same protocol as [`language-and-tone`](language-and-tone.md#slip-handling).**
|
|
76
|
-
User calls out a missing or wrong recommendation → acknowledge once
|
|
77
|
-
in the user's language, rewrite the reply with a recommendation,
|
|
78
|
-
ship. No "from now on" promises — only the next reply proves
|
|
79
|
-
compliance.
|
|
80
|
-
|
|
81
34
|
## Iron Law 2 — Pre-Send Self-Check
|
|
82
35
|
|
|
83
36
|
```
|
|
@@ -85,59 +38,20 @@ EVERY REPLY WITH NUMBERED OPTIONS RUNS THE SELF-CHECK. NO EXCEPTIONS.
|
|
|
85
38
|
SKIPPING IT IS A RULE VIOLATION, NOT A SLIP.
|
|
86
39
|
```
|
|
87
40
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
its position or framing:
|
|
93
|
-
|
|
94
|
-
1. Count occurrences of `(recommended)` / `(rec)` / `(empfohlen)` inline next to a numbered option → MUST be **zero**. Found one → rewrite, drop the tag.
|
|
95
|
-
2. Count `1\.\s` / `2\.\s` / `3\.\s` patterns inside blockquotes or top-level prose → if **any** numbered-option block exists anywhere in the reply, the recommendation line is mandatory.
|
|
96
|
-
3. Count distinct `Recommendation:\s*N` / `Empfehlung:\s*N` lines (case-insensitive) → MUST be **exactly one per options block**. Zero → add one. Two or more distinct numbers → rewrite, pick one.
|
|
97
|
-
4. The number on the recommendation line MUST exist in the option block it follows.
|
|
98
|
-
5. If the reply has multiple options blocks (e.g. a clarification block AND an end-of-turn menu), each block gets its own `Recommendation: N` line directly underneath.
|
|
99
|
-
|
|
100
|
-
Mechanical backstop: `python3 scripts/check_reply_consistency.py --stdin < draft.md`
|
|
101
|
-
(non-zero exit on any rule above). Self-scan is the primary gate; the
|
|
102
|
-
script is the deterministic safety net for ambiguous cases.
|
|
103
|
-
|
|
104
|
-
### Common failure modes — known, named, no excuses
|
|
105
|
-
|
|
106
|
-
- **End-of-turn menu skipped.** Reply answers the question fine, then ends with `1. … 2. … 3. …` and no `Empfehlung:`. Iron Law 1 was violated — these are numbered options, position is irrelevant.
|
|
107
|
-
- **Trailing-question hedge.** Reply has options + recommendation, but ends with `Welcher Pfad?` / `What's it gonna be?` / `Was meinst Du?` — the open question reframes the vote as opinion-poll. Banned by Iron Law 1; the recommendation line is the closer.
|
|
108
|
-
- **"Genuinely no preference" hedge.** Pick anyway. The agent has more context than the user on the trade-off; refusing to pick dumps the work back. Pick the safest option, name the flip-condition.
|
|
109
|
-
- **"User knows the project better" hedge.** Same failure mode, different costume. The user asked for an opinion by virtue of accepting the options block; deliver it.
|
|
110
|
-
- **Multi-block reply with one recommendation.** Two options blocks but only one `Empfehlung:` line — the second block is unguarded. Rule 5 of Iron Law 2 closes this.
|
|
111
|
-
|
|
112
|
-
## Numbered Options — Always
|
|
113
|
-
|
|
114
|
-
When asking the user a question with predefined choices, **always
|
|
115
|
-
present numbered options**. The user should be able to reply with
|
|
116
|
-
just a number (e.g., `1`) instead of typing a sentence.
|
|
117
|
-
|
|
118
|
-
### Format
|
|
119
|
-
|
|
120
|
-
```
|
|
121
|
-
> 1. First option — brief explanation
|
|
122
|
-
> 2. Second option — brief explanation
|
|
123
|
-
> 3. Third option — brief explanation
|
|
124
|
-
|
|
125
|
-
**Recommendation: 2 — Second option** — <one-sentence reason>. Caveat: <flip-condition>.
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
### Rules
|
|
129
|
-
|
|
130
|
-
- **Every question with choices** must use numbered options — no exceptions.
|
|
131
|
-
- **Every numbered list with `1. … 2. … 3. …`** is a numbered-options block, regardless of position. End-of-turn "Wie weiter?" / "What next?" / "How to proceed?" menus, mid-reply continuation prompts, and clarification blocks all count.
|
|
132
|
-
- **Keep options short** — one line each, with a brief explanation after the dash.
|
|
133
|
-
- **Always include a "skip" or "no change" option** when applicable.
|
|
134
|
-
- **Always state a recommendation** — Iron Law 1 above. Per options block, every time, position-agnostic.
|
|
135
|
-
- **Use the user's language** for the question and options.
|
|
136
|
-
- **Accept both** the number and a natural language answer (e.g., "1" or "the first one").
|
|
41
|
+
Mechanical backstop:
|
|
42
|
+
`python3 scripts/check_reply_consistency.py --stdin < draft.md`
|
|
43
|
+
(non-zero exit on any rule below). Self-scan is the primary gate;
|
|
44
|
+
the script is the deterministic safety net.
|
|
137
45
|
|
|
138
|
-
|
|
46
|
+
## Mechanics — rationale, failure modes, format details, examples
|
|
139
47
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
48
|
+
The "why take a position", position-agnostic clause, format
|
|
49
|
+
specification (neutral block + bolded recommendation line + caveat),
|
|
50
|
+
no-trailing-open-question rule, "what does NOT count" catalog, full
|
|
51
|
+
five-step pre-send self-check, named failure-mode catalog (end-of-turn
|
|
52
|
+
menu, trailing-question hedge, no-preference hedge, multi-block reply,
|
|
53
|
+
…), slip-handling protocol, numbered-options rules, format examples,
|
|
54
|
+
progress indicators, and summary-table patterns all live in
|
|
143
55
|
[`contexts/communication/rules-auto/user-interaction-mechanics.md`](../contexts/communication/rules-auto/user-interaction-mechanics.md).
|
|
56
|
+
The rule above is the obligation surface; the mechanics file is the
|
|
57
|
+
lookup material.
|
|
@@ -5,7 +5,7 @@ description: "Verify before completion — run tests and quality tools before cl
|
|
|
5
5
|
alwaysApply: true
|
|
6
6
|
source: package
|
|
7
7
|
load_context:
|
|
8
|
-
-
|
|
8
|
+
- ../contexts/execution/verification-mechanics.md
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Verify Before Completion
|
|
@@ -187,7 +187,7 @@ After completing a significant code change, run this mental checklist:
|
|
|
187
187
|
| New API endpoint | OpenAPI annotations, `AGENTS.md` API section |
|
|
188
188
|
| New module created | Create `app/Modules/{Module}/agents/` |
|
|
189
189
|
| Service/repository signature changed | Check if referenced in `agents/docs/services-and-repos.md` |
|
|
190
|
-
| New environment variable | `.env.example`, `AGENTS.md`
|
|
190
|
+
| New environment variable | `.env.example`, `AGENTS.md` env section |
|
|
191
191
|
| Docker/compose change | `agents/docs/docker.md`, `Makefile` documentation |
|
|
192
192
|
| New Artisan command | `AGENTS.md` commands section |
|
|
193
193
|
| New pattern/convention introduced | Relevant guideline in `.augment/guidelines/` |
|
|
@@ -43,6 +43,7 @@ prompt that asks them to think on their own merits.
|
|
|
43
43
|
THE COUNCIL DOES NOT SEE THE HOST AGENT'S ANALYSIS.
|
|
44
44
|
THE COUNCIL DOES NOT SEE PRIOR REPLIES.
|
|
45
45
|
THE COUNCIL SEES THE ARTEFACT + THE NEUTRAL SYSTEM PROMPT. NOTHING ELSE.
|
|
46
|
+
THE HOST AGENT IS THE CONVENER, NEVER A REVIEWER.
|
|
46
47
|
```
|
|
47
48
|
|
|
48
49
|
If you find yourself wanting to "frame" the artefact for the council,
|
|
@@ -50,6 +51,13 @@ stop. Framing is exactly what kills the second-opinion value. Use the
|
|
|
50
51
|
unbiased system prompts in `scripts/ai_council/prompts.py`; do not
|
|
51
52
|
roll your own.
|
|
52
53
|
|
|
54
|
+
The host runs the council and synthesises convergence — it is the
|
|
55
|
+
convener, not a reviewer. The reviewer-ban is structural: the host
|
|
56
|
+
wrote (or framed) the artefact and cannot critique it independently.
|
|
57
|
+
Anonymising the host as "Reviewer C" is worse than excluding it — the
|
|
58
|
+
user is told they got an outside vote when they did not. Externals
|
|
59
|
+
down → surface and skip; never substitute the host as a reviewer.
|
|
60
|
+
|
|
53
61
|
### Neutrality — context-handoff
|
|
54
62
|
|
|
55
63
|
External reviewers do better critique when they know **what the
|
|
@@ -120,6 +128,27 @@ token counts (from the manual-paste length heuristic or the
|
|
|
120
128
|
provider's reply, when available) for observability. Mixed runs
|
|
121
129
|
(one manual + one api) gate only the api members.
|
|
122
130
|
|
|
131
|
+
## Degradation modes
|
|
132
|
+
|
|
133
|
+
How the council behaves when fewer than two billable members are
|
|
134
|
+
reachable. The orchestrator never silently substitutes — degradation
|
|
135
|
+
is visible to the user.
|
|
136
|
+
|
|
137
|
+
| Reachable | Behaviour | Independence |
|
|
138
|
+
|---|---|---|
|
|
139
|
+
| **2+** | Full fan-out, multi-round debate. Default. | High — cross-provider diversity. |
|
|
140
|
+
| **1** | Single-voice critique with a degraded-run warning. Multi-round mode lets the model see its own anonymised reply, but convergence ≠ correctness. | Low — shared blind spots. |
|
|
141
|
+
| **0** | Council skipped. Surface the failure, proceed without external review. **Never** substitute the host or an unrequested manual pass. | None. |
|
|
142
|
+
|
|
143
|
+
Rejected anti-patterns (council convergence, 2026-05-06): persona
|
|
144
|
+
prompts (same model, same blind spots, more cost), temperature
|
|
145
|
+
spread (noise, not signal), host-as-fallback (Iron Law breach).
|
|
146
|
+
Supported single-provider strategy is **sibling models on the same
|
|
147
|
+
provider** (e.g. Sonnet ↔ Opus, gpt-4o ↔ o1) — different training
|
|
148
|
+
cutoffs / reasoning architectures within one provider family. Cost
|
|
149
|
+
is real (siblings price-tier higher); explicit opt-in per invocation,
|
|
150
|
+
not a default.
|
|
151
|
+
|
|
123
152
|
## Procedure
|
|
124
153
|
|
|
125
154
|
1. **Resolve target.** Identify the artefact mode (`prompt`, `roadmap`,
|
|
@@ -140,9 +169,103 @@ provider's reply, when available) for observability. Mixed runs
|
|
|
140
169
|
into the host agent's voice.
|
|
141
170
|
6. **Summarise.** Write a `Convergence / Divergence` block listing
|
|
142
171
|
agreements, disagreements, and unique insights — provider-attributed.
|
|
143
|
-
7. **
|
|
144
|
-
|
|
145
|
-
the
|
|
172
|
+
7. **Critically evaluate** every finding before it leaves the host
|
|
173
|
+
(see *Critical evaluation* below). The host is the convener **and**
|
|
174
|
+
the skeptic — never a reviewer of the artefact itself, but always a
|
|
175
|
+
reviewer of the **council's output**.
|
|
176
|
+
8. **Translate validated findings to options.** Convert each finding
|
|
177
|
+
the host accepts (or accepts with modification) into a concrete
|
|
178
|
+
numbered option for the user. Tag every option with the host's
|
|
179
|
+
verdict so the user sees the agent's reasoned position, not the
|
|
180
|
+
council's raw output. The user decides; the council advises; the
|
|
181
|
+
host filters.
|
|
182
|
+
|
|
183
|
+
## Critical evaluation — convener-skeptic stance
|
|
184
|
+
|
|
185
|
+
```
|
|
186
|
+
COUNCIL CONVERGENCE IS NOT CORRECTNESS.
|
|
187
|
+
DO NOT BLINDLY ACCEPT FINDINGS. DO NOT BLINDLY REJECT THEM.
|
|
188
|
+
EVERY FINDING GETS A REASONED VERDICT BEFORE IT REACHES THE USER.
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
The council is **uninformed about the codebase, ADRs, locked
|
|
192
|
+
contracts, prior decisions, and project history** — it sees only the
|
|
193
|
+
artefact + neutrality preamble. That is the source of its diversity
|
|
194
|
+
**and** its blind spots. Convergence between members can mean shared
|
|
195
|
+
generic best-practice priors, not project-specific correctness.
|
|
196
|
+
|
|
197
|
+
The host applies a critical lens to **every finding** (convergence
|
|
198
|
+
**and** divergence) before surfacing it as a numbered option:
|
|
199
|
+
|
|
200
|
+
| Check | Question | Tool |
|
|
201
|
+
|---|---|---|
|
|
202
|
+
| **Codebase fit** | Does the finding match the actual code, files, signatures, conventions? | `view` / `codebase-retrieval` / `grep` |
|
|
203
|
+
| **Locked-decision conflict** | Does it contradict an ADR, kernel rule, contract under `docs/contracts/`, or `docs/decisions/`? | `view` |
|
|
204
|
+
| **Already addressed** | Is it a generic best-practice already covered by an existing rule, skill, or test? | `view` / `grep` |
|
|
205
|
+
| **Cost / benefit** | Is the change worth the diff size, churn, and review cost vs. the marginal benefit? | reasoning |
|
|
206
|
+
| **Hallucination** | Does the finding cite a file, function, or behavior that does not exist? | `view` |
|
|
207
|
+
|
|
208
|
+
Each finding receives one of three verdicts:
|
|
209
|
+
|
|
210
|
+
- **`accept`** — codebase fits, no locked-decision conflict, benefit clears cost. Surface as a normal numbered option.
|
|
211
|
+
- **`accept-with-modification`** — core insight valid, but the proposed shape needs adjusting (wrong file, contradicts ADR detail, scope creep). Surface with the **modified** patch and a one-line note.
|
|
212
|
+
- **`reject`** — finding is wrong (hallucinated reference, contradicts a locked decision, already addressed, generic noise). Surface as a **Rejected by host** entry with a one-line reason. Still visible — the user can override.
|
|
213
|
+
|
|
214
|
+
The verdict is the host's **own** reasoning, not the council's.
|
|
215
|
+
Pretending convergence equals correctness, or paraphrasing council
|
|
216
|
+
output as host analysis, both breach the [`direct-answers`](../../rules/direct-answers.md)
|
|
217
|
+
no-invented-facts rule. When the host cannot reach a confident
|
|
218
|
+
verdict on a finding (mixed evidence, ambiguous scope), it surfaces
|
|
219
|
+
the finding as `needs-input` with the open question — the user
|
|
220
|
+
decides, the host does not guess.
|
|
221
|
+
|
|
222
|
+
### What this is NOT
|
|
223
|
+
|
|
224
|
+
- **Not a re-review by the host.** The host did not write the artefact independently and cannot critique it independently — that boundary still holds.
|
|
225
|
+
- **Not a vote against the council.** Rejecting a finding requires evidence (file, line, contract reference), not preference.
|
|
226
|
+
- **Not silent filtering.** Every finding reaches the user with its verdict and reason. The user can pick a `reject` option and override the host.
|
|
227
|
+
|
|
228
|
+
## Output path convention
|
|
229
|
+
|
|
230
|
+
Council artefacts (questions, responses, sessions) are **dev-time
|
|
231
|
+
scratch** — gitignored in both the package repo and consumer repos
|
|
232
|
+
and auto-pruned after `ai_council.session_retention_days` (default
|
|
233
|
+
7). They inform a decision; they are not the durable contract. The
|
|
234
|
+
durable contract lives in the roadmap / ADR / skill body that cites
|
|
235
|
+
the council's convergence inline.
|
|
236
|
+
|
|
237
|
+
**Linking to a specific council file is forbidden by
|
|
238
|
+
[`no-council-references`](../../rules/no-council-references.md)** —
|
|
239
|
+
gitignored, not in the cloned repo, gone after the retention window.
|
|
240
|
+
Inline the convergence with date + members instead.
|
|
241
|
+
|
|
242
|
+
Three directories, three modes:
|
|
243
|
+
|
|
244
|
+
| Mode | Path | Format |
|
|
245
|
+
|---|---|---|
|
|
246
|
+
| **Topic-anchored question** (paired with a roadmap or ADR) | `agents/council-questions/<topic-slug>.md` | Markdown |
|
|
247
|
+
| **Topic-anchored response** (paired with the question above) | `agents/council-responses/<topic-slug>.json` | JSON from `council:run --output` |
|
|
248
|
+
| **Ad-hoc session** (no durable artefact yet) | `agents/council-sessions/<UTC-timestamp>.json` | JSON from `council:run --output` |
|
|
249
|
+
|
|
250
|
+
`<topic-slug>` is kebab-case and **must match** the corresponding
|
|
251
|
+
roadmap / ADR slug if one exists (e.g. `path-fixes` mirrors the
|
|
252
|
+
matching `road-to-<topic-slug>` roadmap under `agents/roadmaps/`).
|
|
253
|
+
|
|
254
|
+
### Forbidden
|
|
255
|
+
|
|
256
|
+
- Files at `agents/` root (e.g. `agents/council-question-foo.md`).
|
|
257
|
+
- Dot-prefix scratch (e.g. `agents/.council-question-foo.md`).
|
|
258
|
+
- Any other directory below `agents/` (e.g. `agents/scratch/`,
|
|
259
|
+
`agents/tmp/`).
|
|
260
|
+
- Cross-references from any artefact to specific council files —
|
|
261
|
+
see [`no-council-references`](../../rules/no-council-references.md).
|
|
262
|
+
Inline the convergence summary instead, with date and member list
|
|
263
|
+
for traceability (`Council (claude-sonnet-4-5 + gpt-4o, YYYY-MM-DD)
|
|
264
|
+
reviewed N candidate strategies; converged on …`).
|
|
265
|
+
|
|
266
|
+
`scripts/check_council_layout.py` is the mechanical check for the
|
|
267
|
+
output path convention — wire it into the package's CI pipeline so
|
|
268
|
+
violations break the build.
|
|
146
269
|
|
|
147
270
|
## Output format
|
|
148
271
|
|
|
@@ -153,16 +276,26 @@ Every council reply MUST contain, in this order:
|
|
|
153
276
|
containing the member's verbatim output.
|
|
154
277
|
3. **Convergence / Divergence summary** — bullet list, every claim
|
|
155
278
|
attributed by provider name.
|
|
156
|
-
4. **
|
|
157
|
-
with
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
279
|
+
4. **Host verdict per finding** — one row per finding with `accept`
|
|
280
|
+
/ `accept-with-modification` / `reject` / `needs-input` plus a
|
|
281
|
+
one-line reason citing host evidence (file:line, ADR, contract).
|
|
282
|
+
See *Critical evaluation* above.
|
|
283
|
+
5. **User-facing options** — numbered block per `user-interaction`,
|
|
284
|
+
carrying the host verdict in each option, with "discard council
|
|
285
|
+
input" always present as an option.
|
|
286
|
+
|
|
287
|
+
The host agent NEVER ships council output as its own reasoning, and
|
|
288
|
+
NEVER ships the host verdict as council output. Provider attribution
|
|
289
|
+
stays visible in the per-member sections; host verdicts stay
|
|
290
|
+
attributed to the host.
|
|
161
291
|
|
|
162
292
|
## Do NOT
|
|
163
293
|
|
|
164
294
|
- Do NOT paraphrase council output into the host agent's voice — strip
|
|
165
295
|
attribution and you've stripped the value.
|
|
296
|
+
- Do NOT surface council findings to the user without a host verdict
|
|
297
|
+
— convergence ≠ correctness, and the user deserves the agent's
|
|
298
|
+
reasoned filter, not a raw forward.
|
|
166
299
|
- Do NOT pre-warm the council with the host agent's analysis or
|
|
167
300
|
identity — that primes the reviewer and collapses diversity.
|
|
168
301
|
- Do NOT silently truncate a too-large bundle — surface the size and
|
|
@@ -194,6 +327,9 @@ Real failure modes seen in the wild:
|
|
|
194
327
|
| Silently truncate a too-large bundle. | Misleads the reviewer into thinking they saw the whole thing. | Bundler raises `BundleTooLarge`; surface and ask for narrower scope. |
|
|
195
328
|
| Reuse the same SDK client across calls without re-loading the key. | Leaks the key in long-lived process state. | Each invocation builds fresh clients from `load_*_key()`. |
|
|
196
329
|
| Auto-spend tokens under `personal.autonomy: on`. | Autonomy ≠ permission to spend money. | Always ask before consultation, even under autonomy. |
|
|
330
|
+
| Forward council convergence to the user as numbered options without a host verdict. | Convergence ≠ correctness; the council never saw the codebase. | Apply the *Critical evaluation* lens; tag every finding `accept` / `accept-with-modification` / `reject` / `needs-input` with one-line reason. |
|
|
331
|
+
| Reject a finding on preference, not evidence. | "I don't like this" is not a verdict. | Cite the file, line, ADR, or contract that justifies the rejection — or surface as `needs-input`. |
|
|
332
|
+
| Paraphrase council output into the host's own analysis to defend a verdict. | Strips attribution, breaches `direct-answers` no-invented-facts. | Verdict cites host evidence (file:line); council output stays attributed in the per-member sections. |
|
|
197
333
|
|
|
198
334
|
## Redaction expectations
|
|
199
335
|
|
|
@@ -294,8 +430,46 @@ prompt as `<original artefact> + <prior round, anonymised>` so each
|
|
|
294
430
|
member can refine, agree, or push back on the previous critique
|
|
295
431
|
without seeing which provider produced which point.
|
|
296
432
|
|
|
433
|
+
The default round count comes from `ai_council.min_rounds` in
|
|
434
|
+
`.agent-settings.yml` (default `2` so members critique each other
|
|
435
|
+
at least once before convergence). The host agent does **not** ask
|
|
436
|
+
"how many rounds?" when the requested count is `<= min_rounds` —
|
|
437
|
+
the settings owner already made that decision. Ask only when a
|
|
438
|
+
genuinely complex artefact justifies more depth than the default.
|
|
439
|
+
|
|
440
|
+
### Deep-reasoning tier (`council_depth: deep`)
|
|
441
|
+
|
|
442
|
+
Architecture review, refactoring proposals, and bug-diagnosis runs
|
|
443
|
+
benefit from an extra critique round. The deep tier is opt-in per
|
|
444
|
+
artefact:
|
|
445
|
+
|
|
446
|
+
1. The consuming **rule, skill, or command** declares
|
|
447
|
+
`council_depth: deep` in its frontmatter. The schema accepts
|
|
448
|
+
**only `deep`** — `standard` is the implicit default and is
|
|
449
|
+
rejected by the linter (every frontmatter byte costs context
|
|
450
|
+
window; see `scripts/schemas/{rule,skill,command}.schema.json`).
|
|
451
|
+
To return an artefact to default depth, **delete the key**.
|
|
452
|
+
2. The **host agent** reads that frontmatter when it dispatches the
|
|
453
|
+
council and passes `--depth deep` to `council_cli`. If multiple
|
|
454
|
+
active artefacts disagree, **deep wins** (max policy).
|
|
455
|
+
3. The **CLI** floors the round count at
|
|
456
|
+
`max(ai_council.deep_min_rounds, ai_council.min_rounds)` —
|
|
457
|
+
defaults to `3` and `2` respectively. Lowering `deep_min_rounds`
|
|
458
|
+
below `min_rounds` has no effect (defensive max).
|
|
459
|
+
|
|
460
|
+
The CLI itself has no knowledge of frontmatter; the contract is the
|
|
461
|
+
flag. Resolution chain (highest priority first):
|
|
462
|
+
|
|
463
|
+
```
|
|
464
|
+
--rounds N → explicit, any value (user override)
|
|
465
|
+
--depth deep → max(deep_min_rounds, min_rounds)
|
|
466
|
+
(no flag) → min_rounds (default 2)
|
|
467
|
+
```
|
|
468
|
+
|
|
297
469
|
| Property | Behaviour |
|
|
298
470
|
|---|---|
|
|
471
|
+
| Default count | `ai_council.min_rounds` (default `2`). Override per-invocation with `rounds:N` (or `--rounds N` to the CLI). |
|
|
472
|
+
| Deep floor | `ai_council.deep_min_rounds` (default `3`). Activated by `council_depth: deep` in artefact frontmatter (host translates to `--depth deep`) or explicit `--depth deep` on the CLI. Floored at `min_rounds`. |
|
|
299
473
|
| Anonymisation | Provider/model identity is stripped. Reviewers are labelled `Reviewer A / B / C…` in input order. |
|
|
300
474
|
| Errored prior responses | Skipped — they reveal nothing useful and can leak provider error formats. |
|
|
301
475
|
| Cost budget | Accumulates across rounds. A round-2 call that breaches the cap fires `on_overrun` exactly like a round-1 breach. |
|
|
@@ -322,6 +496,21 @@ Round 2: artefact + anonymised round 1 critiques
|
|
|
322
496
|
| **total** | | $0.0594 |
|
|
323
497
|
```
|
|
324
498
|
|
|
499
|
+
### Manual-mode parity
|
|
500
|
+
|
|
501
|
+
The orchestrator drives rounds the same way for `api` and `manual`
|
|
502
|
+
transports. One round = one full pass over every enabled member,
|
|
503
|
+
top-to-bottom, then `_augment_for_next_round()` folds the
|
|
504
|
+
anonymised critiques into the round-N+1 user prompt. For manual
|
|
505
|
+
mode this means: emit the round-1 block for member A → user
|
|
506
|
+
pastes A's reply → next member B → user pastes B's reply → host
|
|
507
|
+
agent consolidates round 1 → emit the round-2 block (now carrying
|
|
508
|
+
the anonymised round-1 critiques) for member A → … and so on
|
|
509
|
+
until the configured round count is reached. ManualClient's
|
|
510
|
+
internal "more feedback" follow-up loop (1 / 2 / 3 menu) is
|
|
511
|
+
**inside** a single member's chat thread and is orthogonal to the
|
|
512
|
+
orchestrator-level rounds.
|
|
513
|
+
|
|
325
514
|
## See also
|
|
326
515
|
|
|
327
516
|
- `/council` command — the user-facing entry point.
|
|
@@ -80,7 +80,7 @@ Route to the primary skill. Monitor findings for signals to chain additional ski
|
|
|
80
80
|
|
|
81
81
|
Merge all specialist findings into ONE prioritized output:
|
|
82
82
|
|
|
83
|
-
1. Confirmed root
|
|
83
|
+
1. Confirmed root → (with evidence)
|
|
84
84
|
2. Contributing factors
|
|
85
85
|
3. Risks not yet proven but worth checking
|
|
86
86
|
4. Concrete fixes (ordered by priority)
|
|
@@ -106,18 +106,18 @@ Check:
|
|
|
106
106
|
|
|
107
107
|
**Choose `project-analysis-core` if:** broad discovery needed, framework deep-dive not yet justified.
|
|
108
108
|
|
|
109
|
-
**Choose `project-analysis-hypothesis-driven` if:** problem is concrete, multiple
|
|
109
|
+
**Choose `project-analysis-hypothesis-driven` if:** problem is concrete, multiple → plausible, main job is explanation not discovery.
|
|
110
110
|
|
|
111
111
|
**Choose framework-specific analysis if:** framework is explicit, failure pattern is framework-shaped.
|
|
112
112
|
|
|
113
|
-
**Do NOT route broadly if:** one component or file is enough, fix is obvious and local, task is
|
|
113
|
+
**Do NOT route broadly if:** one component or file is enough, fix is obvious and local, task is impl not investigation.
|
|
114
114
|
|
|
115
115
|
## Examples
|
|
116
116
|
|
|
117
117
|
**"Analyze this whole Laravel project"** → `universal-project-analysis` → chain `project-analysis-laravel`
|
|
118
118
|
**"Hydration mismatch in Next.js"** → `project-analysis-nextjs` (no full-project needed)
|
|
119
119
|
**"Bug could be cache, queue, or version mismatch"** → `project-analysis-hypothesis-driven`
|
|
120
|
-
**"Change one React component"** → no analysis skill, use
|
|
120
|
+
**"Change one React component"** → no analysis skill, use impl skill
|
|
121
121
|
|
|
122
122
|
## Gotcha
|
|
123
123
|
|
|
@@ -41,7 +41,7 @@ Do NOT use when:
|
|
|
41
41
|
- Destructive? → Add `--force` flag + confirmation.
|
|
42
42
|
- Scheduled? → Ensure non-interactive, idempotent, loud failures.
|
|
43
43
|
- Long-running? → Use chunking/cursors, progress bar.
|
|
44
|
-
- Production? → Add
|
|
44
|
+
- Production? → Add env check if needed.
|
|
45
45
|
|
|
46
46
|
### Step 4: Test
|
|
47
47
|
|
|
@@ -62,7 +62,7 @@ Do NOT use when:
|
|
|
62
62
|
|
|
63
63
|
- `$this->info()` is suppressed in quiet mode — use `$this->line()` for critical info.
|
|
64
64
|
- Always add `--force` for destructive commands — never delete data without confirmation.
|
|
65
|
-
- Add
|
|
65
|
+
- Add env checks for production commands.
|
|
66
66
|
|
|
67
67
|
## Do NOT
|
|
68
68
|
|
|
@@ -168,4 +168,4 @@ Runtime confirmation (e.g. *"reproduce the cross-tenant read against staging"*,
|
|
|
168
168
|
[`data-exposure-review`](../data-exposure-review/SKILL.md),
|
|
169
169
|
[`judge-security-auditor`](../judge-security-auditor/SKILL.md),
|
|
170
170
|
[`security`](../security/SKILL.md),
|
|
171
|
-
[`security-audit`](../security-audit/SKILL.md) — sibling review /
|
|
171
|
+
[`security-audit`](../security-audit/SKILL.md) — sibling review / impl skills.
|
|
@@ -16,9 +16,9 @@ Do NOT use when:
|
|
|
16
16
|
|
|
17
17
|
## Procedure: Modify AWS infrastructure
|
|
18
18
|
|
|
19
|
-
1. Read the `.aws/` directory (or equivalent) for
|
|
19
|
+
1. Read the `.aws/` directory (or equivalent) for env configs and templates.
|
|
20
20
|
2. Read CI/CD workflows (e.g., `.github/workflows/`) for the deployment pipeline.
|
|
21
|
-
3. Check the
|
|
21
|
+
3. Check the env-specific vars files.
|
|
22
22
|
4. **Read project-level overrides** — check `agents/overrides/skills/aws-infrastructure.md` for project-specific service names, prefixes, and infrastructure details.
|
|
23
23
|
|
|
24
24
|
## Architecture overview
|
|
@@ -38,7 +38,7 @@ Do NOT use when:
|
|
|
38
38
|
| **ECS Fargate** | Container orchestration (no EC2 instances) |
|
|
39
39
|
| **ECR** | Docker image registry |
|
|
40
40
|
| **EFS** | Shared filesystem (private + public access points) |
|
|
41
|
-
| **Secrets Manager** | `.env` file storage per
|
|
41
|
+
| **Secrets Manager** | `.env` file storage per env |
|
|
42
42
|
| **IAM Roles** | OIDC-based GitHub Actions authentication |
|
|
43
43
|
| **VPC** | Networking (security groups, subnets) |
|
|
44
44
|
|
|
@@ -97,7 +97,7 @@ Template variables:
|
|
|
97
97
|
### Authentication
|
|
98
98
|
|
|
99
99
|
- GitHub Actions uses **OIDC** (no long-lived AWS credentials).
|
|
100
|
-
- Role ARN is per-
|
|
100
|
+
- Role ARN is per-env in the vars file.
|
|
101
101
|
- `aws-actions/configure-aws-credentials` handles the OIDC exchange.
|
|
102
102
|
|
|
103
103
|
### Image tagging
|
|
@@ -139,7 +139,7 @@ See the `terraform` and `terragrunt` skills for general IaC conventions.
|
|
|
139
139
|
|
|
140
140
|
## Gotcha
|
|
141
141
|
|
|
142
|
-
- Never hardcode AWS credentials — always use Secrets Manager or
|
|
142
|
+
- Never hardcode AWS credentials — always use Secrets Manager or env variables.
|
|
143
143
|
- ECS task definitions are immutable — you create new revisions, not edit existing ones.
|
|
144
144
|
- gomplate templates use `{{ }}` which conflicts with other template engines — escape carefully.
|
|
145
145
|
|