@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
|
@@ -6,38 +6,47 @@ source: package
|
|
|
6
6
|
|
|
7
7
|
# Package Portability
|
|
8
8
|
|
|
9
|
-
Everything
|
|
9
|
+
Everything that ships with the `event4u/agent-config` package MUST be
|
|
10
|
+
**project-agnostic**. That includes:
|
|
10
11
|
|
|
11
|
-
- `.augment/` (skills, rules, commands, guidelines,
|
|
12
|
-
|
|
13
|
-
-
|
|
12
|
+
- Everything inside `.augment/` (skills, rules, commands, guidelines,
|
|
13
|
+
templates, contexts)
|
|
14
|
+
- The package repo's own root `AGENTS.md`
|
|
15
|
+
- The package repo's own `.github/copilot-instructions.md`
|
|
14
16
|
|
|
15
17
|
All three are either installed into consumer projects (`.augment/` via
|
|
16
|
-
`install.sh`) or read by AI tools working on the package itself
|
|
17
|
-
consumer-specific
|
|
18
|
+
`install.sh`) or read by AI tools when working on the package itself
|
|
19
|
+
(`AGENTS.md`, `copilot-instructions.md`). Leaking consumer-specific
|
|
20
|
+
content into any of them pollutes downstream projects or misleads agents.
|
|
18
21
|
|
|
19
22
|
## Rules
|
|
20
23
|
|
|
21
|
-
- NEVER reference a specific consumer project, repo, domain, or tech
|
|
22
|
-
stack. The package repo itself (`event4u/agent-config`) MAY
|
|
23
|
-
|
|
24
|
-
the package, not a leak.
|
|
24
|
+
- NEVER reference a specific consumer project, repo name, domain, or tech
|
|
25
|
+
stack directly. The package repo itself (`event4u/agent-config`) MAY be
|
|
26
|
+
named inside its own root `AGENTS.md` and `copilot-instructions.md` —
|
|
27
|
+
that is meta about the package, not a leak.
|
|
25
28
|
- NEVER hardcode consumer-project paths, class names, or conventions.
|
|
26
|
-
- Write content so it works as a reusable package across any project.
|
|
27
|
-
- Project-specific behavior belongs in the **consumer's**
|
|
28
|
-
|
|
29
|
-
- If a skill
|
|
30
|
-
`.agent-settings.yml` or accept as parameter.
|
|
31
|
-
-
|
|
32
|
-
in a completely different project?"
|
|
29
|
+
- Write content so it works as a **reusable package** across any project.
|
|
30
|
+
- Project-specific behavior belongs in the **consumer's** `.agent-settings.yml`,
|
|
31
|
+
`AGENTS.md`, or `agents/` — never in files shipped by this package.
|
|
32
|
+
- If a skill or rule needs project-specific input, read it from
|
|
33
|
+
`.agent-settings.yml` or accept it as a parameter.
|
|
34
|
+
- When reviewing or editing package files, always ask: "Would this still
|
|
35
|
+
make sense in a completely different project?"
|
|
33
36
|
|
|
34
37
|
## Runtime invocations — no `task` commands
|
|
35
38
|
|
|
36
|
-
Skills, rules, commands, guidelines, personas,
|
|
37
|
-
package run in **consumer projects
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
Skills, rules, commands, guidelines, personas, and context docs
|
|
40
|
+
shipped by this package run in **consumer projects**. Consumer
|
|
41
|
+
projects may not have [Task](https://taskfile.dev) installed —
|
|
42
|
+
they might use npm scripts, Composer scripts, Make, or nothing at
|
|
43
|
+
all. A skill that instructs an agent to run `task <something>`
|
|
44
|
+
silently breaks in every project without a `Taskfile.yml`.
|
|
45
|
+
|
|
46
|
+
**Rule:** Never reference a `task <something>` invocation inside any
|
|
47
|
+
artefact file under `.agent-src.uncompressed/{skills,rules,commands,guidelines,personas,contexts}/`
|
|
48
|
+
(and therefore also not in the compressed mirror under `.agent-src/`).
|
|
49
|
+
Use the direct script invocation instead:
|
|
41
50
|
|
|
42
51
|
| ❌ Forbidden | ✅ Portable |
|
|
43
52
|
|---|---|
|
|
@@ -54,19 +63,29 @@ under `.agent-src.uncompressed/{skills,rules,commands,guidelines,personas,contex
|
|
|
54
63
|
| `task validate-schema` | `python3 scripts/validate_frontmatter.py` |
|
|
55
64
|
| `task counts-check` | `python3 scripts/update_counts.py --check` |
|
|
56
65
|
| `task roadmap-progress` | `./agent-config roadmap:progress` |
|
|
57
|
-
| `task ci` | run each underlying script directly |
|
|
66
|
+
| `task ci` | run each underlying script directly (no single portable equivalent) |
|
|
67
|
+
|
|
68
|
+
Task remains a convenience shortcut for maintainers working on the
|
|
69
|
+
package repo itself — `task ci` is the recommended local gate before
|
|
70
|
+
a PR and lives in `Taskfile.yml`, `AGENTS.md`, and the package README.
|
|
71
|
+
Those maintainer-facing surfaces are outside the scope of this rule.
|
|
72
|
+
Artefact files must assume Task is absent.
|
|
58
73
|
|
|
59
|
-
|
|
60
|
-
|
|
74
|
+
The detection pattern *"if the consumer has a `Makefile` / build
|
|
75
|
+
script, prefer its targets over raw commands"* is still allowed when
|
|
76
|
+
the skill adapts to the **consumer's own** tooling (e.g.
|
|
77
|
+
`tests-execute` detecting `php artisan test` vs `vendor/bin/pest`).
|
|
78
|
+
It is not allowed to reference `task <name>` as the detected target —
|
|
79
|
+
every direct invocation must resolve to a real script path.
|
|
61
80
|
|
|
62
81
|
## Consumer CLI — `./agent-config`
|
|
63
82
|
|
|
64
|
-
A subset of scripts is exposed through a project-local CLI
|
|
65
|
-
`./agent-config` (written into the project root by the
|
|
66
|
-
gitignored). Artefacts MUST prefer the CLI over raw
|
|
67
|
-
paths for every command
|
|
68
|
-
|
|
69
|
-
`node_modules/` or `vendor/`.
|
|
83
|
+
A subset of package scripts is exposed through a project-local CLI
|
|
84
|
+
wrapper `./agent-config` (written into the project root by the
|
|
85
|
+
installer, gitignored). Artefacts MUST prefer the CLI over raw
|
|
86
|
+
`python3 scripts/…` paths for every command the CLI already covers,
|
|
87
|
+
because the raw paths only resolve inside the package repo — in a
|
|
88
|
+
consumer project the scripts live under `node_modules/` or `vendor/`.
|
|
70
89
|
|
|
71
90
|
| ❌ Forbidden in artefacts | ✅ Portable |
|
|
72
91
|
|---|---|
|
|
@@ -75,15 +94,23 @@ package repo, in consumer projects the scripts live under
|
|
|
75
94
|
| `python3 .augment/scripts/update_roadmap_progress.py` | `./agent-config roadmap:progress` |
|
|
76
95
|
| `python3 .augment/scripts/update_roadmap_progress.py --check` | `./agent-config roadmap:progress-check` |
|
|
77
96
|
| `bash scripts/first-run.sh` | `./agent-config first-run` |
|
|
97
|
+
| `PYTHONPATH=… python3 -m implement_ticket` | `./agent-config implement-ticket` |
|
|
98
|
+
| `python3 scripts/memory_lookup.py` | `./agent-config memory:lookup` |
|
|
99
|
+
| `python3 scripts/memory_signal.py` | `./agent-config memory:signal` |
|
|
100
|
+
| `python3 scripts/memory_hash.py` | `./agent-config memory:hash` |
|
|
101
|
+
| `python3 scripts/check_memory.py` | `./agent-config memory:check` |
|
|
102
|
+
| `python3 scripts/check_memory_proposal.py` | `./agent-config memory:check-proposal` |
|
|
103
|
+
| `python3 scripts/check_proposal.py` | `./agent-config proposal:check` |
|
|
104
|
+
| `python3 scripts/refine_ticket_detect.py` | `./agent-config refine-ticket:detect` |
|
|
78
105
|
|
|
79
106
|
Commands not covered by the CLI stay as direct script invocations
|
|
80
|
-
(e.g. `bash scripts/compress.sh --sync`) — maintainer-only
|
|
81
|
-
reachable from a consumer project anyway.
|
|
107
|
+
(e.g. `bash scripts/compress.sh --sync`) — those are maintainer-only
|
|
108
|
+
and not reachable from a consumer project anyway.
|
|
82
109
|
|
|
83
110
|
## Enforcement
|
|
84
111
|
|
|
85
112
|
`scripts/check_portability.py` scans `.augment/`, `.agent-src.uncompressed/`,
|
|
86
|
-
and the package root `AGENTS.md` + `.github/copilot-instructions.md`
|
|
87
|
-
forbidden identifiers, for any `task <name>` invocation
|
|
88
|
-
script invocations that bypass the
|
|
89
|
-
must pass before any PR.
|
|
113
|
+
and the package repo's root `AGENTS.md` + `.github/copilot-instructions.md`
|
|
114
|
+
for forbidden identifiers, for any `task <name>` invocation inside
|
|
115
|
+
artefact files, and for direct script invocations that bypass the
|
|
116
|
+
`./agent-config` CLI. It runs in CI and must pass before any PR.
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "always"
|
|
3
|
+
description: "Suppress trivial workflow questions and act on the obvious next step; defers to non-destructive-by-default for the safety floor; never commit and never ask about committing except via /commit-in-chunks or explicit user instruction"
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
source: package
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Autonomous Execution
|
|
9
|
+
|
|
10
|
+
User's time is the scarce resource. Trivial workflow questions are
|
|
11
|
+
noise. Defines **trivial** (just act), **blocking** (still ask), the
|
|
12
|
+
**hard floor** (always ask, no override), and the **commit default**
|
|
13
|
+
(never commit, never ask — review-first by design).
|
|
14
|
+
|
|
15
|
+
## Hard Floor — see [`non-destructive-by-default`](non-destructive-by-default.md)
|
|
16
|
+
|
|
17
|
+
Universal safety floor (production-branch merges, deploys, pushes,
|
|
18
|
+
prod data/infra, whimsical bulk deletions, and commits containing
|
|
19
|
+
bulk deletions or infra changes) is governed by the canonical
|
|
20
|
+
[`non-destructive-by-default`](non-destructive-by-default.md) rule.
|
|
21
|
+
|
|
22
|
+
Applies regardless of `personal.autonomy`, a standing autonomy
|
|
23
|
+
directive (anchor list in [Opt-in detection](#opt-in-detection--match-by-intent-not-exact-string)),
|
|
24
|
+
or any roadmap authorization. Nothing in **this** rule lifts it. If a
|
|
25
|
+
trigger from that rule fires, stop and ask — every section below
|
|
26
|
+
assumes the floor has cleared.
|
|
27
|
+
|
|
28
|
+
## Setting — `personal.autonomy`
|
|
29
|
+
|
|
30
|
+
| Value | Behavior |
|
|
31
|
+
|---|---|
|
|
32
|
+
| `on` | Suppress trivial questions. Act on obvious next step. Still ask on blocking decisions; ALWAYS ask on Hard-Floor triggers. |
|
|
33
|
+
| `off` | Ask trivial questions too. Use to check in on each workflow step. |
|
|
34
|
+
| `auto` (default) | Like `off` until user expresses "stop asking, just work" — then `on` for the rest of the chat. See **Opt-in detection** below; match by **intent**, not exact string. The flip never lifts the Hard Floor. |
|
|
35
|
+
|
|
36
|
+
Read once on first turn (per [`layered-settings`](../guidelines/agent-infra/layered-settings.md#section-aware-merge-rules))
|
|
37
|
+
and cache. Missing key → treat as `on`.
|
|
38
|
+
|
|
39
|
+
## Opt-in detection — match by intent, not exact string
|
|
40
|
+
|
|
41
|
+
In `auto`, flip to `on` for the rest of the chat when the user expresses
|
|
42
|
+
**"stop asking on trivial steps, just work"**. Recognize the **intent**,
|
|
43
|
+
not the literal substring — semantic equivalent in either language.
|
|
44
|
+
|
|
45
|
+
Anchor examples (illustrative, not exhaustive):
|
|
46
|
+
|
|
47
|
+
- DE: "arbeite selbstständig" · "frag nicht jedes Mal" · "tue es einfach"
|
|
48
|
+
- EN: "work autonomously" · "don't ask" · "just do it"
|
|
49
|
+
|
|
50
|
+
Litmus test: standing permission to skip trivial questions? → flip.
|
|
51
|
+
Single-decision delegation ("you decide for this step") → handle that
|
|
52
|
+
step, do **not** flip standing mode.
|
|
53
|
+
|
|
54
|
+
### Speech-act check — meta-instruction, not content
|
|
55
|
+
|
|
56
|
+
Before flipping, verify the phrase is **addressed to the agent as
|
|
57
|
+
guidance about how to work**, not a literal substring inside another
|
|
58
|
+
instruction. Do **not** flip when the phrase is:
|
|
59
|
+
|
|
60
|
+
- **Content / copy** — "Put the slogan 'just do it' on the landing page."
|
|
61
|
+
- **Quote / reference** — "Nike's tagline is 'just do it' — write a blog post."
|
|
62
|
+
- **Subject of a request** — "Write docs about the 'work autonomously' modes."
|
|
63
|
+
- **Code / data** — string literals, fixtures, translations, JSON.
|
|
64
|
+
- **About a third party** — "My colleague works autonomously."
|
|
65
|
+
- **Question / hypothetical** — "Should I set `don't ask` as the default?"
|
|
66
|
+
|
|
67
|
+
Heuristic: strip quotes, code blocks, embedded content. Read what's
|
|
68
|
+
**left**. Still a directive to the agent about its working style →
|
|
69
|
+
flip. Otherwise → don't.
|
|
70
|
+
|
|
71
|
+
Opt-out (reversed intent) flips back to `off`:
|
|
72
|
+
|
|
73
|
+
- DE: "frag mich wieder" · "frag mich erst" · "stop autonomous mode"
|
|
74
|
+
- EN: "ask me first" · "ask me again" · "stop being autonomous"
|
|
75
|
+
|
|
76
|
+
Same speech-act check applies.
|
|
77
|
+
|
|
78
|
+
Counter-examples — do **not** flip on meta-questions, self-descriptions,
|
|
79
|
+
or one-shot delegations: "why don't you ask that yourself?", "I'm
|
|
80
|
+
working autonomously right now", "can you decide that yourself?".
|
|
81
|
+
|
|
82
|
+
In doubt → keep current mode, no speculative flips.
|
|
83
|
+
|
|
84
|
+
## Trivial — JUST ACT, do not ask
|
|
85
|
+
|
|
86
|
+
Examples (matches `personal.autonomy: on` or `auto`-after-opt-in):
|
|
87
|
+
|
|
88
|
+
- "Step 2 or Step 3?" — pick the obvious next roadmap step; if blocked, name the blocker, otherwise go.
|
|
89
|
+
- "Commit now or after the next change?" — answered by the commit-default below.
|
|
90
|
+
- "How should I split the commits?" — never asked; either `/commit-in-chunks` was invoked (split + commit) or it wasn't (don't commit).
|
|
91
|
+
- "Run linter / tests now or later?" — `verify-before-complete` decides; act.
|
|
92
|
+
- "Found 3 follow-ups — fix all or stop?" — if within scope and minimal-safe-diff allows, fix; if scope expands, stop and surface as list.
|
|
93
|
+
- "Filename `X.md` or `Y.md`?" when one matches convention — pick convention-matching one.
|
|
94
|
+
- "Verification table or paragraph?" — pick whichever fits; format isn't a decision worth a turn.
|
|
95
|
+
- "Show me a diff before regenerating output from a tracked source?"
|
|
96
|
+
— compression, code-gen, formatter passes, lock-file rebuilds — run
|
|
97
|
+
it and report the result. Reversibility comes from the source, not
|
|
98
|
+
from per-file confirmation. See [`non-destructive-by-default`](non-destructive-by-default.md#not-in-scope--deterministic-regeneration)
|
|
99
|
+
§ Not in scope.
|
|
100
|
+
|
|
101
|
+
`personal.autonomy: off`: ask these. `on` or `auto`-after-opt-in: act.
|
|
102
|
+
|
|
103
|
+
## Blocking — STILL ASK regardless of `personal.autonomy`
|
|
104
|
+
|
|
105
|
+
Beyond the Hard Floor, the autonomy setting also never overrides:
|
|
106
|
+
|
|
107
|
+
- **Vague-request triggers** in [`ask-when-uncertain`](ask-when-uncertain.md) — ambiguous stays ambiguous; pick-one-and-pray is wrong.
|
|
108
|
+
- **Architectural / structural choices** the codebase hasn't settled (multi-stack picks, library introductions).
|
|
109
|
+
- **Security-sensitive paths** — see [`security-sensitive-stop`](security-sensitive-stop.md).
|
|
110
|
+
- **Scope expansion** beyond stated task — see [`scope-control`](scope-control.md).
|
|
111
|
+
- **Remote-state ops** — push, merge, rebase, force-push, branch create/delete/switch, PR create/close/retarget, tag/release. Permission-gated by [`scope-control`](scope-control.md); the prod-trunk and deploy-tied subset is governed by [`non-destructive-by-default`](non-destructive-by-default.md).
|
|
112
|
+
- **Destructive ops** — see [`non-destructive-by-default`](non-destructive-by-default.md) for the full taxonomy (whimsical bulk deletions, content destruction, commits containing bulk deletions or infra changes).
|
|
113
|
+
|
|
114
|
+
In doubt → blocking. Ask.
|
|
115
|
+
|
|
116
|
+
## Commit policy — see [`commit-policy`](commit-policy.md)
|
|
117
|
+
|
|
118
|
+
Committing is governed by [`commit-policy`](commit-policy.md), which
|
|
119
|
+
applies regardless of `personal.autonomy`. Summary:
|
|
120
|
+
|
|
121
|
+
- NEVER commit unless user said so this turn, a commit command was
|
|
122
|
+
invoked, a standing instruction is active, or the roadmap authorizes it.
|
|
123
|
+
- NEVER ask about committing.
|
|
124
|
+
- In autonomous mode, the **only** permitted commit-related question
|
|
125
|
+
is the one-shot pre-scan ask at the start of roadmap execution.
|
|
126
|
+
|
|
127
|
+
Push, merge, rebase, branch creation, PR ops, tags remain
|
|
128
|
+
permission-gated per [`scope-control`](scope-control.md#git-operations--permission-gated).
|
|
129
|
+
|
|
130
|
+
## Failure modes
|
|
131
|
+
|
|
132
|
+
- Asking "Step 2 or Step 3?" when the roadmap orders them.
|
|
133
|
+
- "Should I run the CI checks?" — `verify-before-complete` decides; act.
|
|
134
|
+
- "Do we want to commit this?" — no, by default. Don't ask.
|
|
135
|
+
- Numbered-options block whose only difference is sequencing ("A then B" vs "B then A") with no real trade-off.
|
|
136
|
+
- Asking after user already issued a standing autonomy directive earlier (cache the opt-in for `auto`).
|
|
137
|
+
|
|
138
|
+
For Hard-Floor failure modes (treating autonomy as cover for a
|
|
139
|
+
floor-crossing action, reading a roadmap step as deploy authorization,
|
|
140
|
+
refusing task-aligned WIP deletions, committing bulk-deletion / infra
|
|
141
|
+
diffs without surfacing them) see
|
|
142
|
+
[`non-destructive-by-default`](non-destructive-by-default.md#failure-modes).
|
|
143
|
+
|
|
144
|
+
## Cloud Behavior
|
|
145
|
+
|
|
146
|
+
Settings reads degrade gracefully on cloud platforms (no
|
|
147
|
+
`.agent-settings.yml`). Treat as `personal.autonomy: on` — user had to
|
|
148
|
+
deliberately ship a custom skill bundle and is unlikely to want
|
|
149
|
+
trivial-question friction.
|
|
150
|
+
|
|
151
|
+
## See also
|
|
152
|
+
|
|
153
|
+
- [`non-destructive-by-default`](non-destructive-by-default.md) — universal safety floor; never overridden by autonomy
|
|
154
|
+
- [`scope-control`](scope-control.md) — git-ops permission gate (push/merge/branch/PR/tag stays explicit)
|
|
155
|
+
- [`ask-when-uncertain`](ask-when-uncertain.md) — vague-request triggers that always require asking
|
|
156
|
+
- [`direct-answers`](direct-answers.md) — Iron Laws on brevity and no-flattery (this rule extends to no-trivial-questions)
|
|
157
|
+
- [`/commit-in-chunks`](../commands/commit-in-chunks.md) — auto-split and commit without confirmation
|
|
158
|
+
- [`/commit`](../commands/commit.md) — split and commit with confirmation
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "always"
|
|
3
|
+
description: "Append cadence for .agent-chat-history — when to call append (per_turn/per_phase/per_tool), turn-check ownership refusal handling, never write the file directly, cadence is the trigger not reply length"
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
source: package
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!-- cloud_safe: noop -->
|
|
9
|
+
|
|
10
|
+
# Chat History — Cadence
|
|
11
|
+
|
|
12
|
+
Owns gate 2 of the chat-history Iron Law: WHEN to call `append`.
|
|
13
|
+
Ownership (gate 1) lives in [`chat-history-ownership`](chat-history-ownership.md);
|
|
14
|
+
visibility (gate 3) lives in [`chat-history-visibility`](chat-history-visibility.md).
|
|
15
|
+
File I/O is owned by [`scripts/chat_history.py`](../../../scripts/chat_history.py)
|
|
16
|
+
— this rule decides the trigger boundaries, not the file format.
|
|
17
|
+
|
|
18
|
+
## Iron Law — gate 2 (append at every cadence boundary)
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
EVERY CADENCE BOUNDARY GETS ONE append CALL — WITH --first-user-msg.
|
|
22
|
+
SKIPPING IS A RULE VIOLATION. NEVER WRITE .agent-chat-history DIRECTLY.
|
|
23
|
+
ON HOOK / ENGINE PATHS, THE PLATFORM / ENGINE PERFORMS append STRUCTURALLY
|
|
24
|
+
— THE AGENT MUST NOT DUPLICATE.
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Cadence is **gated by ownership**: gate 1 (turn-check from
|
|
28
|
+
[`chat-history-ownership`](chat-history-ownership.md)) must have cleared
|
|
29
|
+
this turn before any append fires. Skip turn-check → append refuses with
|
|
30
|
+
exit `3` (`OWNERSHIP_REFUSED`).
|
|
31
|
+
|
|
32
|
+
## Append cadence — boundaries
|
|
33
|
+
|
|
34
|
+
Cadence comes from `chat_history.frequency` in `.agent-settings.yml`:
|
|
35
|
+
|
|
36
|
+
- `per_turn` → one entry at the end of every agent turn.
|
|
37
|
+
- `per_phase` → at phase boundaries (user question answered, decision
|
|
38
|
+
taken, task-list item completed, significant tool sequence finished).
|
|
39
|
+
Pure clarification turns may skip.
|
|
40
|
+
- `per_tool` → after each tool-call sequence.
|
|
41
|
+
|
|
42
|
+
Every append goes through
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
scripts/chat_history.py append --first-user-msg "<msg>" \
|
|
46
|
+
--type <user|agent|tool|decision|phase> --json '<obj>'
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Never write the file directly. Prefer `phase` over `agent` for boundaries.
|
|
50
|
+
**Cadence is the trigger, not reply length** — a one-line reply that
|
|
51
|
+
crosses a boundary still appends; a 200-line reply that doesn't cross
|
|
52
|
+
one still doesn't. **Do not batch missed turns** — crashes happen
|
|
53
|
+
between turns, and a batched append loses the timeline that crash
|
|
54
|
+
recovery depends on.
|
|
55
|
+
|
|
56
|
+
## Ownership refusal — exit `3`
|
|
57
|
+
|
|
58
|
+
`append` exits `3` when the file's ownership header doesn't match the
|
|
59
|
+
current session (`turn-check` was skipped or the file was hijacked
|
|
60
|
+
between turns). Surface the failure to the user, **do not swallow it**:
|
|
61
|
+
|
|
62
|
+
1. Stop the current append.
|
|
63
|
+
2. Render the Foreign-Prompt from [`chat-history-ownership`](chat-history-ownership.md)
|
|
64
|
+
so the user re-handshakes.
|
|
65
|
+
3. Resume cadence only after gate 1 clears again.
|
|
66
|
+
|
|
67
|
+
This is the structural enforcement layer that catches the case where
|
|
68
|
+
an agent technically called `turn-check` but on the wrong platform path
|
|
69
|
+
(e.g. HOOK platform also tried CHECKPOINT cooperative gates and the
|
|
70
|
+
file got into a mixed state).
|
|
71
|
+
|
|
72
|
+
## Path-specific behavior
|
|
73
|
+
|
|
74
|
+
**CHECKPOINT path** — gates 1 + 2 are cooperative. The agent runs
|
|
75
|
+
`turn-check` first, then runs `append` at every cadence boundary.
|
|
76
|
+
`/chat-history-checkpoint` is the recommended boundary-trigger; it
|
|
77
|
+
captures phase entries with the right metadata.
|
|
78
|
+
|
|
79
|
+
**HOOK path** — `work_engine` and platform `SessionStart` /
|
|
80
|
+
`PreToolUse` hooks fire `turn-check` and `append` structurally. The
|
|
81
|
+
agent must **not** call either — double-write produces interleaved
|
|
82
|
+
entries and breaks the JSONL schema. Hooks emit the same exit codes,
|
|
83
|
+
so refusal handling stays identical.
|
|
84
|
+
|
|
85
|
+
**ENGINE path** — `work_engine` fires `append --type phase` per
|
|
86
|
+
successful step and `append --type decision` on halt. Free-form prose
|
|
87
|
+
around the engine output falls back to whatever path the platform
|
|
88
|
+
supplies (HOOK or CHECKPOINT). Engine-driven turns inherit the
|
|
89
|
+
structural guarantee for the duration of the dispatch cycle only.
|
|
90
|
+
|
|
91
|
+
## What this rule does NOT do
|
|
92
|
+
|
|
93
|
+
Manage ownership decisions (handshake, foreign/returning) — those
|
|
94
|
+
live in [`chat-history-ownership`](chat-history-ownership.md).
|
|
95
|
+
Manage the heartbeat marker — that lives in [`chat-history-visibility`](chat-history-visibility.md).
|
|
96
|
+
Decide cadence dynamically based on reply content — cadence is
|
|
97
|
+
the configured frequency, period.
|
|
98
|
+
|
|
99
|
+
## Cloud Behavior
|
|
100
|
+
|
|
101
|
+
On cloud surfaces (Claude.ai Web, Skills API) cadence is **inert** —
|
|
102
|
+
no append calls, no `scripts/`, no JSONL file. Treat
|
|
103
|
+
`chat_history.enabled` as `false`.
|
|
104
|
+
|
|
105
|
+
## Interactions & references
|
|
106
|
+
|
|
107
|
+
- Sibling rules: [`chat-history-ownership`](chat-history-ownership.md) (gate 1 — turn-check) · [`chat-history-visibility`](chat-history-visibility.md) (gate 3 — heartbeat marker).
|
|
108
|
+
- `token-efficiency` — never load the full log; cadence keeps appends small and bounded.
|
|
109
|
+
- API: [`scripts/chat_history.py`](../../../scripts/chat_history.py) `append` subcommand. Settings: [`agent-settings`](../templates/agent-settings.md) `chat_history.frequency`. Engine hooks: [`agents/contexts/work-engine-hooks.md`](../../../agents/contexts/work-engine-hooks.md).
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "always"
|
|
3
|
+
description: "Detect file ownership of .agent-chat-history on first turn — match/returning/foreign/missing handshake, two-paths classification (HOOK/ENGINE/CHECKPOINT/MANUAL), Foreign/Returning numbered-options prompt"
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
source: package
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!-- cloud_safe: noop -->
|
|
9
|
+
|
|
10
|
+
# Chat History — Ownership
|
|
11
|
+
|
|
12
|
+
Owns gate 1 of the chat-history Iron Law: the first-turn handshake
|
|
13
|
+
that decides whose `.agent-chat-history` file the current session is
|
|
14
|
+
talking to. Cadence (gate 2) lives in [`chat-history-cadence`](chat-history-cadence.md);
|
|
15
|
+
visibility (gate 3) lives in [`chat-history-visibility`](chat-history-visibility.md).
|
|
16
|
+
File I/O is owned by [`scripts/chat_history.py`](../../../scripts/chat_history.py)
|
|
17
|
+
— this rule says **when** to handshake, not how the file is structured.
|
|
18
|
+
|
|
19
|
+
## Two paths — platform decides which Iron Law applies
|
|
20
|
+
|
|
21
|
+
Population of `.agent-chat-history` is **structural** (platform-driven)
|
|
22
|
+
on platforms with native lifecycle hooks, and **cooperative**
|
|
23
|
+
(agent-driven) on platforms without. Both paths converge on the same
|
|
24
|
+
JSONL schema; only the trigger differs. Per-platform classification
|
|
25
|
+
lives in
|
|
26
|
+
[`agents/contexts/chat-history-platform-hooks.md`](../../../agents/contexts/chat-history-platform-hooks.md).
|
|
27
|
+
|
|
28
|
+
| Path | Platforms / Surfaces | Trigger | Agent's role |
|
|
29
|
+
|---|---|---|---|
|
|
30
|
+
| **HOOK** | Claude Code, Augment CLI, Cursor 1.7+, Cline non-Windows, Windsurf, Gemini CLI | Platform fires native lifecycle hooks → `./agent-config chat-history:hook --platform <name>` | Read-only — observe, do not duplicate appends |
|
|
31
|
+
| **ENGINE** | `/implement-ticket`, `/work`, any flow driven by `scripts/work_engine/cli.py` | `work_engine` fires `turn-check` (before-dispatch), `append --type phase` (per successful step), `--type decision` (on-halt), `heartbeat` (after-dispatch) via the hook layer | Read-only during engine-driven turns — do not duplicate appends. See [`agents/contexts/work-engine-hooks.md`](../../../agents/contexts/work-engine-hooks.md) |
|
|
32
|
+
| **CHECKPOINT** | Augment IDE plugin, Cursor < 1.7, Cline on Windows | Agent invokes `/chat-history-checkpoint` at phase boundaries | Cooperative — gates 1 + 2 + 3 are mandatory |
|
|
33
|
+
| **MANUAL** | Cloud surfaces (Claude.ai Web, Skills API) | Rule is inert — see Cloud Behavior | None |
|
|
34
|
+
|
|
35
|
+
Detect the path on first turn: read `chat_history.platform` from
|
|
36
|
+
`.agent-settings.yml` if set, else fall back to `chat_history.path`
|
|
37
|
+
(`hook` / `checkpoint` / `manual`). Missing both → assume CHECKPOINT
|
|
38
|
+
(safest cooperative default; HOOK platforms install the platform
|
|
39
|
+
config explicitly via `scripts/install.py`).
|
|
40
|
+
|
|
41
|
+
## Iron Law — gate 1 (turn-check is the first tool call)
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
ON CHECKPOINT, turn-check IS THE FIRST TOOL CALL OF EVERY SESSION.
|
|
45
|
+
ON HOOK, THE PLATFORM FIRES turn-check STRUCTURALLY — DO NOT DUPLICATE.
|
|
46
|
+
ON ENGINE, work_engine FIRES turn-check BEFORE DISPATCH — DO NOT DUPLICATE.
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
CHECKPOINT path — run silently before any other tool call:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
scripts/chat_history.py turn-check --first-user-msg "<first-user-msg>"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Exit codes: `0` = `ok`/`disabled` (proceed), `10` = `missing`
|
|
56
|
+
(run `init --first-user-msg "..." --freq <freq>`), `11` = `foreign`
|
|
57
|
+
(render Foreign-Prompt + stop), `12` = `returning` (render
|
|
58
|
+
Returning-Prompt + stop). The script writes a one-line
|
|
59
|
+
`ACTION REQUIRED:` hint to stderr on non-zero exits.
|
|
60
|
+
|
|
61
|
+
## Activation & handshake
|
|
62
|
+
|
|
63
|
+
Read `chat_history.*` from `.agent-settings.yml` **once per conversation**
|
|
64
|
+
(first turn) and cache. `enabled: false` or section missing → all three
|
|
65
|
+
chat-history rules are a **no-op** (do not read, write, or mention the
|
|
66
|
+
file). Otherwise cache `frequency`, `max_size_kb`, `on_overflow`, and
|
|
67
|
+
the **path** (HOOK / CHECKPOINT / MANUAL — see the table above).
|
|
68
|
+
|
|
69
|
+
**HOOK path** — skip `turn-check` entirely. The platform's
|
|
70
|
+
`SessionStart` hook already initialized the file; the agent's job is to
|
|
71
|
+
read `status` once for context awareness (header preview, entry count)
|
|
72
|
+
and otherwise leave I/O to the hook dispatcher. Foreign / Returning
|
|
73
|
+
prompts still apply because hooks call into the same ownership state
|
|
74
|
+
machine — when the dispatcher reports `foreign` or `returning` via
|
|
75
|
+
exit code or stderr, render the corresponding prompt.
|
|
76
|
+
|
|
77
|
+
**CHECKPOINT path** — run `turn-check` as the first tool call. State
|
|
78
|
+
token branches to one of: `missing` → `init`, `ok` → continue,
|
|
79
|
+
`foreign` → Foreign-Prompt, `returning` → Returning-Prompt.
|
|
80
|
+
`/chat-history-checkpoint` is the recommended way to satisfy gate 2
|
|
81
|
+
at phase boundaries (see [`chat-history-cadence`](chat-history-cadence.md)).
|
|
82
|
+
|
|
83
|
+
In `foreign` and `returning`, **always read the file's current contents
|
|
84
|
+
into the agent's working context before any write** — the user chose to
|
|
85
|
+
log history for a reason; losing it silently is never acceptable. The
|
|
86
|
+
legacy `state` subcommand still works for shell scripts; agents prefer
|
|
87
|
+
`turn-check` (folds in `enabled` + distinct exit codes).
|
|
88
|
+
|
|
89
|
+
## Foreign / Returning prompts — full mechanics
|
|
90
|
+
|
|
91
|
+
When `turn-check` exits `11` (foreign) or `12` (returning), render the
|
|
92
|
+
matching numbered-options block from
|
|
93
|
+
[`agents/contexts/chat-history-handshake.md`](../../../agents/contexts/chat-history-handshake.md).
|
|
94
|
+
That doc holds the prompt bodies, the option → script-call mapping
|
|
95
|
+
(`adopt` / `init` / `prepend` / `reset`), the in-memory entries-list
|
|
96
|
+
shape, free-text fallbacks, and the overflow handling per
|
|
97
|
+
`on_overflow` (`rotate` / `compress`). Read it once on first foreign
|
|
98
|
+
or returning event; cache the chosen option for the rest of the
|
|
99
|
+
conversation.
|
|
100
|
+
|
|
101
|
+
## What this rule does NOT do
|
|
102
|
+
|
|
103
|
+
Display/reload/clear (`/chat-history*` commands). Auto-flip `enabled` or
|
|
104
|
+
`on_overflow`. Run when `enabled: false`. Decide ownership
|
|
105
|
+
heuristically — only `turn-check` / `state` does that. Double-write on
|
|
106
|
+
HOOK platforms — when hooks fire structurally, the agent does **not**
|
|
107
|
+
also call `turn-check`. Cadence (gate 2) and heartbeat (gate 3) are
|
|
108
|
+
covered in their sibling rules.
|
|
109
|
+
|
|
110
|
+
## Cloud Behavior
|
|
111
|
+
|
|
112
|
+
On cloud surfaces (Claude.ai Web, Skills API) the rule is **fully inert** —
|
|
113
|
+
no `.agent-chat-history`, no `scripts/`, no Iron Law gates, no foreign/returning
|
|
114
|
+
prompts. Treat `chat_history.enabled` as `false`; persistence is a
|
|
115
|
+
local-agent concern.
|
|
116
|
+
|
|
117
|
+
## Interactions & references
|
|
118
|
+
|
|
119
|
+
- Sibling rules: [`chat-history-cadence`](chat-history-cadence.md) (gate 2 — append timing) · [`chat-history-visibility`](chat-history-visibility.md) (gate 3 — heartbeat marker).
|
|
120
|
+
- `ask-when-uncertain` + `user-interaction` — foreign/returning prompts use numbered options, one question per turn.
|
|
121
|
+
- `language-and-tone` — prompt translated at runtime; `.md` stays English.
|
|
122
|
+
- `onboarding-gate` — runs first; this rule activates only after it clears.
|
|
123
|
+
- API: [`scripts/chat_history.py`](../../../scripts/chat_history.py). Commands: [`/chat-history`](../commands/chat-history.md), [`/chat-history-resume`](../commands/chat-history-resume.md), [`/chat-history-clear`](../commands/chat-history-clear.md), [`/chat-history-checkpoint`](../commands/chat-history-checkpoint.md). Settings: [`agent-settings`](../templates/agent-settings.md). Platform classification: [`agents/contexts/chat-history-platform-hooks.md`](../../../agents/contexts/chat-history-platform-hooks.md). Types: [`rule-type-governance`](rule-type-governance.md).
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "always"
|
|
3
|
+
description: "Heartbeat marker visibility for .agent-chat-history — paste subprocess stdout verbatim or nothing, never type from memory, hybrid mode prints only on drift, slip handling per language-and-tone"
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
source: package
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!-- cloud_safe: noop -->
|
|
9
|
+
|
|
10
|
+
# Chat History — Visibility
|
|
11
|
+
|
|
12
|
+
Owns gate 3 of the chat-history Iron Law: the heartbeat marker that
|
|
13
|
+
makes append-cadence drift visible. Ownership (gate 1) lives in
|
|
14
|
+
[`chat-history-ownership`](chat-history-ownership.md); cadence (gate 2)
|
|
15
|
+
lives in [`chat-history-cadence`](chat-history-cadence.md). File I/O is
|
|
16
|
+
owned by [`scripts/chat_history.py`](../../../scripts/chat_history.py).
|
|
17
|
+
|
|
18
|
+
## Iron Law — gate 3 (heartbeat is subprocess stdout, not memory)
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
HEARTBEAT IS THE SCRIPT OUTPUT OF THE CURRENT TURN, VERBATIM, OR NOTHING.
|
|
22
|
+
NEVER TYPE THE LINE FROM MEMORY. NEVER REUSE THE PRIOR TURN'S MARKER.
|
|
23
|
+
EMPTY STDOUT → NO MARKER LINE.
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Run silently before emitting the final reply:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
scripts/chat_history.py heartbeat --first-user-msg "<first-user-msg>"
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Stdout is **at most** one line, e.g.
|
|
33
|
+
`📒 chat-history: ok · 9 entries · per_phase · last 30s ago`. Non-empty →
|
|
34
|
+
paste **verbatim** as the last line of the reply. Empty → emit nothing.
|
|
35
|
+
Always exits 0 — observability, not a gate.
|
|
36
|
+
|
|
37
|
+
## Visibility modes — `chat_history.heartbeat`
|
|
38
|
+
|
|
39
|
+
| Mode | When marker prints | Token cost |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| `on` | every reply (legacy) | ~20 tokens / reply |
|
|
42
|
+
| `off` | never — full silence | 0 |
|
|
43
|
+
| `hybrid` *(default)* | drift states only (`missing`/`foreign`/`returning`) | 0 in normal flow, ~20 on drift |
|
|
44
|
+
|
|
45
|
+
`hybrid` ships zero tokens when healthy, loud on ownership drift. YAML 1.1
|
|
46
|
+
booleanizes bare `on`/`off`; the reader coerces both back, so
|
|
47
|
+
`heartbeat: on` works unquoted.
|
|
48
|
+
|
|
49
|
+
## Memory-typing the marker — rule violation, not a slip
|
|
50
|
+
|
|
51
|
+
Format is memorizable; counts and timestamps are not. A typed-from-
|
|
52
|
+
memory line shows stale entries and a healthy-looking `ok` while the
|
|
53
|
+
file is silently behind — observability collapses, invisible until
|
|
54
|
+
`status` is checked. Heartbeat is the script output of the **current
|
|
55
|
+
turn**, verbatim, or nothing.
|
|
56
|
+
|
|
57
|
+
**Self-check before send — MANDATORY.** (1) Did `heartbeat` run on
|
|
58
|
+
this turn? (2) Is the line byte-identical to that subprocess stdout?
|
|
59
|
+
(3) Empty stdout → no marker line. Any "no" → drop it.
|
|
60
|
+
|
|
61
|
+
**Slip handling.** Stale marker called out → acknowledge once in the
|
|
62
|
+
user's language; run `status`; on CHECKPOINT call `append` for
|
|
63
|
+
missed phase-boundaries (see [`chat-history-cadence`](chat-history-cadence.md));
|
|
64
|
+
run a real `heartbeat`; paste stdout verbatim or nothing. Don't promise
|
|
65
|
+
"from now on" — only behaviour proves compliance (mirrors
|
|
66
|
+
`language-and-tone` § slip handling).
|
|
67
|
+
|
|
68
|
+
## Path-specific behavior
|
|
69
|
+
|
|
70
|
+
Heartbeat (gate 3) stays useful for visibility on **every** path —
|
|
71
|
+
HOOK, ENGINE, CHECKPOINT — because the marker reports the file's
|
|
72
|
+
state, not the agent's intent. On HOOK and ENGINE paths the agent
|
|
73
|
+
still emits the marker even though it didn't fire `turn-check` or
|
|
74
|
+
`append` itself: the marker is read-only observability over whatever
|
|
75
|
+
the platform / engine wrote.
|
|
76
|
+
|
|
77
|
+
## What this rule does NOT do
|
|
78
|
+
|
|
79
|
+
Manage ownership decisions — those live in [`chat-history-ownership`](chat-history-ownership.md).
|
|
80
|
+
Manage append timing — that lives in [`chat-history-cadence`](chat-history-cadence.md).
|
|
81
|
+
Auto-decide visibility mode — `chat_history.heartbeat` is the only
|
|
82
|
+
trigger. Insert decoration: the marker is functional output per
|
|
83
|
+
[`direct-answers`](direct-answers.md) emoji whitelist, not a status
|
|
84
|
+
badge.
|
|
85
|
+
|
|
86
|
+
## Cloud Behavior
|
|
87
|
+
|
|
88
|
+
On cloud surfaces (Claude.ai Web, Skills API) heartbeat is **inert** —
|
|
89
|
+
no marker line, no `scripts/`. Treat `chat_history.enabled` as `false`.
|
|
90
|
+
|
|
91
|
+
## Interactions & references
|
|
92
|
+
|
|
93
|
+
- Sibling rules: [`chat-history-ownership`](chat-history-ownership.md) (gate 1 — turn-check) · [`chat-history-cadence`](chat-history-cadence.md) (gate 2 — append).
|
|
94
|
+
- `direct-answers` — emoji whitelist permits the `📒` marker as functional output, not decoration.
|
|
95
|
+
- `language-and-tone` § slip handling — stale-marker acknowledgement.
|
|
96
|
+
- API: [`scripts/chat_history.py`](../../../scripts/chat_history.py) `heartbeat` and `status` subcommands. Settings: [`agent-settings`](../templates/agent-settings.md) `chat_history.heartbeat`.
|