@sebastienrousseau/dotfiles 0.2.520 → 0.2.521

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.
Files changed (323) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/LICENSE-APACHE +190 -0
  3. package/LICENSE-MIT +21 -0
  4. package/README.md +43 -37
  5. package/install.sh +76 -10
  6. package/package.json +7 -7
  7. package/tools/README.md +49 -0
  8. package/tools/ci/install-chezmoi-verified.sh +68 -0
  9. package/docs/.vitepress/reports/localization-readability-audit.md +0 -73
  10. package/docs/AI.md +0 -179
  11. package/docs/ARCHITECTURE.md +0 -117
  12. package/docs/CNAME +0 -1
  13. package/docs/CONFIG_STRATEGY.md +0 -124
  14. package/docs/COPYRIGHT +0 -7
  15. package/docs/ECOSYSTEM.md +0 -220
  16. package/docs/GOLD-STANDARD-AUDIT.md +0 -352
  17. package/docs/GOVERNANCE.md +0 -98
  18. package/docs/MAINTAINERS.md +0 -41
  19. package/docs/MINIMUM-TOOLCHAIN.md +0 -100
  20. package/docs/NAMING_CONVENTIONS.md +0 -102
  21. package/docs/OPENCODE.md +0 -127
  22. package/docs/README.md +0 -84
  23. package/docs/STRUCTURE.md +0 -102
  24. package/docs/adr/ADR-001-ci-cd-pipeline.md +0 -118
  25. package/docs/adr/ADR-002-shell-performance.md +0 -130
  26. package/docs/adr/ADR-003-security-first.md +0 -158
  27. package/docs/adr/ADR-004-cli-architecture.md +0 -171
  28. package/docs/adr/ADR-005-chezmoi-choice.md +0 -99
  29. package/docs/adr/ADR-006-shell-selection.md +0 -124
  30. package/docs/adr/ADR-007-multi-shell-parity.md +0 -62
  31. package/docs/adr/ADR-008-alias-system-architecture.md +0 -95
  32. package/docs/adr/ADR-009-wallpaper-driven-theming.md +0 -131
  33. package/docs/adr/ADR-010-starship-transient-prompt.md +0 -144
  34. package/docs/adr/ADR-011-nushell-tier3-keep.md +0 -144
  35. package/docs/adr/ADR-012-ai-fleet-local-proxy.md +0 -79
  36. package/docs/adr/README.md +0 -40
  37. package/docs/architecture/AI_COST_OPTIMIZATION.md +0 -144
  38. package/docs/architecture/ARCHITECTURE.md +0 -20
  39. package/docs/architecture/INTEROP.md +0 -44
  40. package/docs/architecture/REPO_LAYOUT.md +0 -241
  41. package/docs/architecture/WALKTHROUGH.md +0 -86
  42. package/docs/architecture/fleet-deployment.md +0 -77
  43. package/docs/archive/EUXIS_2026_REVIEW.md +0 -127
  44. package/docs/archive/LEGACY_ROADMAP.md +0 -6
  45. package/docs/archive/MILESTONE_v0.2.493.md +0 -47
  46. package/docs/archive/PLAN.md +0 -199
  47. package/docs/archive/REPO_AUDIT.md +0 -31
  48. package/docs/articles/.pages +0 -6
  49. package/docs/articles/2026-07-05-custom-mkdocs-material-dark-theme.md +0 -216
  50. package/docs/articles/2026-07-05-fish-startup-abbr.md +0 -153
  51. package/docs/articles/2026-07-05-master-to-main-rename-runbook.md +0 -128
  52. package/docs/articles/index.md +0 -36
  53. package/docs/guides/INSTALL.md +0 -144
  54. package/docs/guides/MACOS_ICLOUD_SYMLINKS.md +0 -121
  55. package/docs/guides/NEOVIM_IDE_GUIDE.md +0 -61
  56. package/docs/guides/THEMING.md +0 -230
  57. package/docs/guides/TROUBLESHOOTING.md +0 -176
  58. package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +0 -792
  59. package/docs/index.md +0 -132
  60. package/docs/interop/A2A.md +0 -39
  61. package/docs/interop/POWERSHELL.md +0 -102
  62. package/docs/manual/00-introduction.md +0 -89
  63. package/docs/manual/01-concepts/01-architecture.md +0 -138
  64. package/docs/manual/01-concepts/02-trust-model.md +0 -183
  65. package/docs/manual/01-concepts/03-theme-engine.md +0 -186
  66. package/docs/manual/01-concepts/04-fleet.md +0 -148
  67. package/docs/manual/01-concepts/05-self-healing.md +0 -204
  68. package/docs/manual/02-tutorials/01-first-install.md +0 -197
  69. package/docs/manual/02-tutorials/02-add-wallpaper.md +0 -216
  70. package/docs/manual/02-tutorials/03-create-profile.md +0 -244
  71. package/docs/manual/02-tutorials/04-encrypt-secret.md +0 -281
  72. package/docs/manual/02-tutorials/05-deploy-fleet.md +0 -283
  73. package/docs/manual/03-reference/01-dot-cli.md +0 -475
  74. package/docs/manual/03-reference/02-config-files.md +0 -265
  75. package/docs/manual/03-reference/03-environment.md +0 -124
  76. package/docs/manual/03-reference/04-templates.md +0 -190
  77. package/docs/manual/03-reference/05-feature-flags.md +0 -187
  78. package/docs/manual/04-cookbook/01-recipes.md +0 -285
  79. package/docs/manual/04-cookbook/02-troubleshooting.md +0 -351
  80. package/docs/manual/04-cookbook/03-faq.md +0 -175
  81. package/docs/manual/05-appendices/A-platform-matrix.md +0 -101
  82. package/docs/manual/05-appendices/B-security-checklist.md +0 -85
  83. package/docs/manual/05-appendices/C-glossary.md +0 -40
  84. package/docs/manual/05-appendices/D-bibliography.md +0 -58
  85. package/docs/manual/05-appendices/E-license.md +0 -38
  86. package/docs/manual/_toc.yml +0 -58
  87. package/docs/manual/command-index.md +0 -175
  88. package/docs/manual/concept-index.md +0 -170
  89. package/docs/manual/index.md +0 -66
  90. package/docs/migration/README.md +0 -81
  91. package/docs/migration/from-bare-git-repo.md +0 -156
  92. package/docs/migration/from-gnu-stow.md +0 -165
  93. package/docs/migration/from-plain-chezmoi.md +0 -148
  94. package/docs/migration/from-yadm.md +0 -187
  95. package/docs/operations/ARCHITECTURE_ROADMAP.md +0 -7
  96. package/docs/operations/ATTESTATION.md +0 -44
  97. package/docs/operations/CI_CADENCE.md +0 -107
  98. package/docs/operations/CI_COMPOSITES.md +0 -156
  99. package/docs/operations/COMPLETIONS.md +0 -123
  100. package/docs/operations/COVERAGE.md +0 -204
  101. package/docs/operations/DRIFT.md +0 -107
  102. package/docs/operations/HARD_AUDIT_2026.md +0 -631
  103. package/docs/operations/MAINTENANCE.md +0 -63
  104. package/docs/operations/MANIFEST.md +0 -127
  105. package/docs/operations/MIGRATION.md +0 -109
  106. package/docs/operations/OPERATIONS.md +0 -188
  107. package/docs/operations/PERFORMANCE.md +0 -133
  108. package/docs/operations/PERFORMANCE_BUDGETS.md +0 -196
  109. package/docs/operations/REGISTRY.md +0 -90
  110. package/docs/operations/RELEASE_PIPELINE.md +0 -128
  111. package/docs/operations/RELIABILITY.md +0 -122
  112. package/docs/operations/RFC_v0_2_503_reorganization.md +0 -280
  113. package/docs/operations/ROADMAP.md +0 -10
  114. package/docs/operations/ROADMAP_2026.md +0 -7
  115. package/docs/operations/ROADMAP_V0_2_503.md +0 -10
  116. package/docs/operations/TESTING.md +0 -216
  117. package/docs/operations/TRACEABILITY.md +0 -44
  118. package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +0 -65
  119. package/docs/operations/VERSION_SYNC.md +0 -393
  120. package/docs/packaging.md +0 -222
  121. package/docs/reference/ALIASES.md +0 -131
  122. package/docs/reference/ALIASES_CHEATSHEET.md +0 -32
  123. package/docs/reference/ALIASES_DEPRECATIONS.md +0 -13
  124. package/docs/reference/FEATURE-MATRIX.md +0 -646
  125. package/docs/reference/FEATURES.md +0 -66
  126. package/docs/reference/FONTS.md +0 -112
  127. package/docs/reference/POWERSHELL_PARITY.md +0 -82
  128. package/docs/reference/PROFILES.md +0 -69
  129. package/docs/reference/SCREENSHOTS.md +0 -121
  130. package/docs/reference/SCRIPTS.md +0 -71
  131. package/docs/reference/SUPPORT_MATRIX.md +0 -80
  132. package/docs/reference/THEMES.md +0 -117
  133. package/docs/reference/TOOLS.md +0 -110
  134. package/docs/reference/UTILS.md +0 -243
  135. package/docs/registry.json +0 -6
  136. package/docs/schema/dot-env-v1.json +0 -110
  137. package/docs/schema/dot-registry-v1.json +0 -33
  138. package/docs/security/AI_ACT_COMPLIANCE.md +0 -94
  139. package/docs/security/AUDIT_BYPASS.md +0 -103
  140. package/docs/security/AUTOMATION_SECRETS.md +0 -26
  141. package/docs/security/CI_EGRESS_ALLOWLIST.md +0 -127
  142. package/docs/security/CI_PINNING.md +0 -129
  143. package/docs/security/COMMIT_SIGNING.md +0 -138
  144. package/docs/security/COMPLIANCE.md +0 -458
  145. package/docs/security/DEPS_DEV_EXCEPTIONS.md +0 -86
  146. package/docs/security/DISCLOSURE.md +0 -130
  147. package/docs/security/ENCRYPTION.md +0 -57
  148. package/docs/security/FMEA.md +0 -159
  149. package/docs/security/FUZZING.md +0 -209
  150. package/docs/security/HISTORY_FILTERING.md +0 -132
  151. package/docs/security/INCIDENT_RESPONSE.md +0 -579
  152. package/docs/security/INSTALL_VERIFICATION.md +0 -122
  153. package/docs/security/KEYS.md +0 -49
  154. package/docs/security/KEY_ROTATION.md +0 -303
  155. package/docs/security/MCP_POLICY.md +0 -78
  156. package/docs/security/POLICY_RELEASES.md +0 -37
  157. package/docs/security/README.md +0 -28
  158. package/docs/security/SCORECARD.md +0 -195
  159. package/docs/security/SECRETS.md +0 -158
  160. package/docs/security/SECURITY.md +0 -45
  161. package/docs/security/SECURITY_CHECKLIST.md +0 -55
  162. package/docs/security/SHELL_EXEMPTIONS.md +0 -145
  163. package/docs/security/SOUP_REGISTER.md +0 -36
  164. package/docs/security/THREAT_MODEL.md +0 -130
  165. package/docs/security/VERIFICATION_VALIDATION.md +0 -228
  166. package/docs/security/VERIFY_RELEASE.md +0 -201
  167. package/docs/security/security-pubkey.asc +0 -15
  168. package/docs/stylesheets/extra.css +0 -444
  169. package/docs/themes/README.md +0 -10
  170. package/docs/themes/VISUAL_INTEGRITY_REPORT.md +0 -30
  171. package/docs/themes/hero-shot.svg +0 -78
  172. package/scripts/README.md +0 -123
  173. package/scripts/ci/check-copyright-headers.sh +0 -8
  174. package/scripts/ci/check-shell-preamble.sh +0 -8
  175. package/scripts/ci/guard-gitleaks-checkout.sh +0 -8
  176. package/scripts/demo/record.sh +0 -43
  177. package/scripts/diagnostics/a2a-conformance.sh +0 -163
  178. package/scripts/diagnostics/alias-governance.sh +0 -165
  179. package/scripts/diagnostics/aliases-cheatsheet.sh +0 -74
  180. package/scripts/diagnostics/aliases-manifest.sh +0 -77
  181. package/scripts/diagnostics/attest-verify.sh +0 -147
  182. package/scripts/diagnostics/benchmark.sh +0 -408
  183. package/scripts/diagnostics/conflicts.sh +0 -73
  184. package/scripts/diagnostics/doctor-unified.sh +0 -43
  185. package/scripts/diagnostics/doctor.sh +0 -797
  186. package/scripts/diagnostics/drift-dashboard.sh +0 -203
  187. package/scripts/diagnostics/health.sh +0 -656
  188. package/scripts/diagnostics/history-analysis.sh +0 -86
  189. package/scripts/diagnostics/mcp-doctor.sh +0 -582
  190. package/scripts/diagnostics/perf.sh +0 -453
  191. package/scripts/diagnostics/scorecard.sh +0 -120
  192. package/scripts/diagnostics/secret-governance.sh +0 -65
  193. package/scripts/diagnostics/security-score.sh +0 -467
  194. package/scripts/diagnostics/smoke-test.sh +0 -88
  195. package/scripts/diagnostics/snapshot.sh +0 -90
  196. package/scripts/diagnostics/verify.sh +0 -108
  197. package/scripts/diagnostics/verify_state.sh +0 -73
  198. package/scripts/diagnostics/version-locks.sh +0 -94
  199. package/scripts/diagnostics/workstation-attestation.sh +0 -212
  200. package/scripts/dot/commands/agent.sh +0 -535
  201. package/scripts/dot/commands/agents.sh +0 -352
  202. package/scripts/dot/commands/ai.sh +0 -600
  203. package/scripts/dot/commands/aliases.sh +0 -277
  204. package/scripts/dot/commands/appearance.sh +0 -110
  205. package/scripts/dot/commands/completion.sh +0 -171
  206. package/scripts/dot/commands/core.sh +0 -217
  207. package/scripts/dot/commands/diagnostics.sh +0 -265
  208. package/scripts/dot/commands/env-emit.sh +0 -203
  209. package/scripts/dot/commands/fleet.sh +0 -711
  210. package/scripts/dot/commands/init.sh +0 -185
  211. package/scripts/dot/commands/lint.sh +0 -208
  212. package/scripts/dot/commands/manual.sh +0 -169
  213. package/scripts/dot/commands/meta.sh +0 -438
  214. package/scripts/dot/commands/patterns.sh +0 -55
  215. package/scripts/dot/commands/registry.sh +0 -455
  216. package/scripts/dot/commands/restore.sh +0 -232
  217. package/scripts/dot/commands/secrets.sh +0 -296
  218. package/scripts/dot/commands/security.sh +0 -102
  219. package/scripts/dot/commands/tools.sh +0 -570
  220. package/scripts/dot/data/alias-deprecations.tsv +0 -2
  221. package/scripts/dot/powershell/Dot.psm1 +0 -319
  222. package/scripts/fonts/install-nerd-fonts.sh +0 -75
  223. package/scripts/fonts/patch-fonts.sh +0 -36
  224. package/scripts/git-hooks/install.sh +0 -12
  225. package/scripts/git-hooks/pre-commit +0 -12
  226. package/scripts/git-hooks/pre-commit-audit.sh +0 -146
  227. package/scripts/git-hooks/pre-push +0 -105
  228. package/scripts/git-hooks/prepare-commit-msg +0 -29
  229. package/scripts/lib/secrets_provider.sh +0 -200
  230. package/scripts/nvim/headless-upgrade.lua +0 -81
  231. package/scripts/ops/ai-setup.sh +0 -71
  232. package/scripts/ops/bundle.sh +0 -104
  233. package/scripts/ops/chaos.sh +0 -50
  234. package/scripts/ops/chezmoi-apply.sh +0 -333
  235. package/scripts/ops/chezmoi-diff.sh +0 -16
  236. package/scripts/ops/chezmoi-remove.sh +0 -46
  237. package/scripts/ops/chezmoi-update.sh +0 -67
  238. package/scripts/ops/heal-chezmoi.sh +0 -87
  239. package/scripts/ops/heal-system.sh +0 -129
  240. package/scripts/ops/heal-tools.sh +0 -297
  241. package/scripts/ops/heal.sh +0 -223
  242. package/scripts/ops/post-apply-repair.sh +0 -107
  243. package/scripts/ops/prewarm.sh +0 -128
  244. package/scripts/ops/release.sh +0 -262
  245. package/scripts/ops/rollback.sh +0 -613
  246. package/scripts/ops/setup.sh +0 -138
  247. package/scripts/ops/teleport.sh +0 -34
  248. package/scripts/qa/check-feature-matrix.sh +0 -296
  249. package/scripts/qa/check-version-consistency.sh +0 -12
  250. package/scripts/qa/coverage-baseline.sh +0 -61
  251. package/scripts/qa/docs-coverage.sh +0 -118
  252. package/scripts/qa/examples-coverage.sh +0 -94
  253. package/scripts/qa/powershell-contract.ps1 +0 -95
  254. package/scripts/qa/reliability-audit.sh +0 -139
  255. package/scripts/qa/scorecard-snapshot.sh +0 -128
  256. package/scripts/qa/traceability-coverage.sh +0 -124
  257. package/scripts/qa/validate-examples.sh +0 -90
  258. package/scripts/qa/wsl-contract.sh +0 -12
  259. package/scripts/secrets/age-init.sh +0 -82
  260. package/scripts/secrets/create-secrets-file.sh +0 -46
  261. package/scripts/secrets/encrypt-ssh-key.sh +0 -44
  262. package/scripts/security/backup.sh +0 -58
  263. package/scripts/security/check-disclosure-key-expiry.sh +0 -111
  264. package/scripts/security/dns-doh.sh +0 -52
  265. package/scripts/security/encryption-check.sh +0 -55
  266. package/scripts/security/enforce-policies.sh +0 -552
  267. package/scripts/security/firewall.sh +0 -91
  268. package/scripts/security/lock-configs.sh +0 -67
  269. package/scripts/security/lock-screen.sh +0 -56
  270. package/scripts/security/manage-secrets.sh +0 -429
  271. package/scripts/security/ssh-cert.sh +0 -204
  272. package/scripts/security/telemetry-kill.sh +0 -51
  273. package/scripts/security/usb-safety.sh +0 -52
  274. package/scripts/theme/apply-gnome-theme.sh +0 -333
  275. package/scripts/theme/extract-heic-frames.sh +0 -115
  276. package/scripts/theme/extract-theme.py +0 -1020
  277. package/scripts/theme/install-boot-logo.sh +0 -63
  278. package/scripts/theme/install-catppuccin-themes.sh +0 -371
  279. package/scripts/theme/install-cursors.sh +0 -26
  280. package/scripts/theme/install-file-icons.sh +0 -27
  281. package/scripts/theme/install-grub-theme.sh +0 -62
  282. package/scripts/theme/install-lock-icon.sh +0 -31
  283. package/scripts/theme/merge-wallpaper.sh +0 -146
  284. package/scripts/theme/rebuild-themes.sh +0 -603
  285. package/scripts/theme/switch.sh +0 -476
  286. package/scripts/theme/wallpaper-rotate.sh +0 -137
  287. package/scripts/theme/wallpaper-sync.sh +0 -690
  288. package/scripts/tools/cmatrix.sh +0 -22
  289. package/scripts/tools/detect-collisions.py +0 -103
  290. package/scripts/tools/emoji-picker.sh +0 -49
  291. package/scripts/tools/figlet-banner.sh +0 -19
  292. package/scripts/tools/log-rotate.sh +0 -31
  293. package/scripts/tools/lolcat-wrap.sh +0 -20
  294. package/scripts/tools/pipes.sh +0 -49
  295. package/scripts/tuning/linux.sh +0 -186
  296. package/scripts/tuning/macos.sh +0 -56
  297. package/scripts/uninstall.sh +0 -86
  298. package/scripts/verify-release-versions +0 -156
  299. package/scripts/version-sync.sh +0 -714
  300. package/templates/chezmoi-data/geekom-a9.toml.example +0 -21
  301. package/templates/chezmoi-data/mac-m1.toml.example +0 -16
  302. package/templates/chezmoi-data/mac-t2-linux.toml.example +0 -21
  303. package/templates/chezmoi-data/surface-pro-7p.toml.example +0 -21
  304. package/templates/projects/go/.github/workflows/ci.yml +0 -31
  305. package/templates/projects/go/README.md +0 -7
  306. package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +0 -8
  307. package/templates/projects/go/go.mod +0 -3
  308. package/templates/projects/go/go.sum +0 -0
  309. package/templates/projects/molecule/README.md +0 -7
  310. package/templates/projects/molecule/converge.yml +0 -7
  311. package/templates/projects/molecule/molecule.yml +0 -16
  312. package/templates/projects/node/.github/workflows/ci.yml +0 -30
  313. package/templates/projects/node/README.md +0 -7
  314. package/templates/projects/node/package-lock.json +0 -12
  315. package/templates/projects/node/package.json +0 -10
  316. package/templates/projects/node/src/index.js +0 -3
  317. package/templates/projects/packer/README.md +0 -15
  318. package/templates/projects/packer/main.pkr.hcl +0 -15
  319. package/templates/projects/python/.github/workflows/ci.yml +0 -34
  320. package/templates/projects/python/README.md +0 -7
  321. package/templates/projects/python/pyproject.toml +0 -25
  322. package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +0 -2
  323. package/templates/projects/python/tests/test_basic.py +0 -3
@@ -1,352 +0,0 @@
1
- #!/usr/bin/env bash
2
- # SPDX-License-Identifier: Apache-2.0 OR MIT
3
- # Copyright (c) 2015-2026 Sebastien Rousseau
4
- # shellcheck shell=bash
5
- #
6
- # scripts/dot/commands/agents.sh
7
- #
8
- # `dot agents` — multi-harness AI agent configuration manager.
9
- #
10
- # Closes the #1 competitive gap identified in HARD_AUDIT_2026:
11
- # every other dotfiles framework either targets one AI tool or
12
- # requires hand-maintenance of N parallel config files. This command
13
- # keeps CLAUDE.md (canonical) and AGENTS.md (cross-harness standard)
14
- # in sync, plus stubs the Cursor/Codex tool-specific formats.
15
- #
16
- # Subcommands:
17
- # render Regenerate AGENTS.md and tool-specific stubs from CLAUDE.md.
18
- # check Verify AGENTS.md tracks CLAUDE.md (exit 0 in sync, 1 drifted).
19
- # list Show which harnesses are recognised + their target paths.
20
- #
21
- # Reads: CLAUDE.md (repo root) — the canonical agent context.
22
- # Writes: AGENTS.md, .cursor/rules/dotfiles.mdc, .codex/config.toml
23
- # (only when invoked with `render`).
24
-
25
- set -euo pipefail
26
-
27
- # shellcheck disable=SC1091
28
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
29
- source "$SCRIPT_DIR/../../../lib/dot/ui.sh"
30
- source "$SCRIPT_DIR/../../../lib/dot/utils.sh"
31
-
32
- _agents_repo_root() {
33
- # Resolve the chezmoi source dir (where CLAUDE.md/AGENTS.md live).
34
- # We REQUIRE the resolved dir to contain `.chezmoidata.toml` so a
35
- # user running `dot agents render` from inside some other git
36
- # checkout doesn't accidentally write CLAUDE.md/AGENTS.md/.cursor/
37
- # /.codex/ into that repo. Round-2 audit C-finding.
38
- #
39
- # On a CI runner `chezmoi source-path` may return a default path
40
- # like `$HOME/.local/share/chezmoi` that doesn't exist on disk —
41
- # we treat that as "not a match" and fall through to git, rather
42
- # than accepting the wrong candidate.
43
- local candidate=""
44
- # Sanity probe: post-Phase-4b the data file lives at
45
- # defaults/.chezmoidata.toml; older deployments kept it at the root.
46
- _has_chezmoidata() {
47
- [[ -f "$1/.chezmoidata.toml" || -f "$1/defaults/.chezmoidata.toml" ]]
48
- }
49
- if command -v chezmoi >/dev/null 2>&1; then
50
- candidate="$(chezmoi source-path 2>/dev/null || true)"
51
- # chezmoi source-path returns defaults/ when .chezmoiroot is set;
52
- # peel back one level so callers receive the actual repo root.
53
- if [[ -n "$candidate" && -f "$candidate/.chezmoidata.toml" && "$(basename "$candidate")" == "defaults" ]]; then
54
- candidate="$(dirname "$candidate")"
55
- fi
56
- if [[ -n "$candidate" ]] && ! _has_chezmoidata "$candidate"; then
57
- candidate=""
58
- fi
59
- fi
60
- if [[ -z "$candidate" ]]; then
61
- candidate="$(git -C "$PWD" rev-parse --show-toplevel 2>/dev/null || true)"
62
- fi
63
- if [[ -z "$candidate" ]] || ! _has_chezmoidata "$candidate"; then
64
- return 1
65
- fi
66
- printf '%s\n' "$candidate"
67
- }
68
-
69
- _agents_canonical() {
70
- printf "%s/CLAUDE.md" "$(_agents_repo_root)"
71
- }
72
-
73
- _agents_targets() {
74
- # printed one-per-line: <harness>\t<path-relative-to-repo-root>
75
- # Closes the round-2 audit gap #3 — harness parity with
76
- # TonyCasey/ai-dotfiles-manager (who covers 9 surfaces; we now
77
- # cover 12 to maintain a margin).
78
- local root
79
- root="$(_agents_repo_root)"
80
- cat <<EOF
81
- agents-md $root/AGENTS.md
82
- cursor $root/.cursor/rules/dotfiles.mdc
83
- codex $root/.codex/config.toml
84
- windsurf $root/.windsurf/rules.md
85
- zed $root/.zed/agent-config.toml
86
- roo $root/.roo/rules.md
87
- cline $root/.clinerules
88
- aider $root/.aider.conf.yml
89
- continue $root/.continuerc.json
90
- jules $root/.jules/system.md
91
- agy $root/.agy/AGY.md
92
- EOF
93
- }
94
-
95
- # Strip the leading HTML comment header (everything up to the first blank
96
- # line after the `-->`), the H1 title line (which differs by design
97
- # between CLAUDE.md / AGENTS.md), and the trailing cross-reference
98
- # block. Leaves the comparable content body.
99
- _agents_body() {
100
- local file="$1"
101
- awk '
102
- BEGIN { in_header = 0; saw_close = 0; emit = 0 }
103
- /^<!--/ && NR <= 5 { in_header = 1; next }
104
- in_header && /-->/ { in_header = 0; saw_close = 1; next }
105
- in_header { next }
106
- saw_close && /^$/ && !emit { emit = 1; next }
107
- saw_close && emit { print }
108
- !saw_close { emit = 1; print }
109
- ' "$file" |
110
- # Drop the H1 (`# CLAUDE.md ...` or `# AGENTS.md ...`) and the
111
- # trailing "Need richer context?" footer if present.
112
- awk '
113
- /^# (CLAUDE|AGENTS)\.md/ { next }
114
- /^---$/ { trailer = 1; next }
115
- trailer && /^\*\*Need richer context\?\*\*/ { next }
116
- trailer && NF == 0 { next }
117
- { trailer = 0; print }
118
- '
119
- }
120
-
121
- cmd_agents() {
122
- local subcommand="${1:-list}"
123
- shift || true
124
-
125
- case "$subcommand" in
126
- list)
127
- ui_header "Agent harness targets"
128
- echo ""
129
- ui_table_begin "Harness" "Target Path" "Status"
130
- while IFS=$'\t' read -r harness path; do
131
- if [[ -f "$path" ]]; then
132
- ui_table_add "$harness" "$path" "rendered"
133
- else
134
- ui_table_add "$harness" "$path" "not yet rendered"
135
- fi
136
- done < <(_agents_targets)
137
- ui_table_end
138
- ;;
139
- check)
140
- local claude_md agents_md
141
- claude_md="$(_agents_canonical)"
142
- agents_md="$(_agents_repo_root)/AGENTS.md"
143
- if [[ ! -f "$claude_md" ]]; then
144
- ui_err "CLAUDE.md" "not found at $claude_md"
145
- return 2
146
- fi
147
- if [[ ! -f "$agents_md" ]]; then
148
- ui_warn "AGENTS.md" "missing — run 'dot agents render'"
149
- return 1
150
- fi
151
- # Compare the bodies (header comments differ by design), ignoring
152
- # blank lines: the rendered file carries an extra one after its
153
- # header block. This deliberately does NOT lean on
154
- # `diff -q --ignore-blank-lines` — some BSD diff builds (macOS 14's,
155
- # for one) short-circuit `-q` to a byte comparison and drop the
156
- # ignore flags, which made `check` report drift on a tree it had
157
- # just rendered. Stripping the blank lines here is implementation-
158
- # independent.
159
- local _claude_body _agents_body_text
160
- _claude_body="$(_agents_body "$claude_md" | grep -v '^[[:space:]]*$')"
161
- _agents_body_text="$(_agents_body "$agents_md" | grep -v '^[[:space:]]*$')"
162
- if [[ "$_claude_body" == "$_agents_body_text" ]]; then
163
- ui_ok "AGENTS.md" "in sync with CLAUDE.md"
164
- return 0
165
- fi
166
- ui_warn "AGENTS.md" "drifted from CLAUDE.md — run 'dot agents render'"
167
- return 1
168
- ;;
169
- render)
170
- local claude_md root
171
- claude_md="$(_agents_canonical)"
172
- root="$(_agents_repo_root)"
173
- [[ -f "$claude_md" ]] || {
174
- ui_err "CLAUDE.md" "not found at $claude_md"
175
- return 2
176
- }
177
-
178
- # 1. AGENTS.md — body of CLAUDE.md + AGENTS.md cross-reference header.
179
- local agents_md="$root/AGENTS.md"
180
- {
181
- cat <<'HEADER'
182
- <!--
183
- AGENTS.md — Cross-harness AI agent guidelines for this repository.
184
-
185
- This file follows the AGENTS.md standard (originated by OpenAI in
186
- August 2025, stewarded since December 2025 by the Linux Foundation
187
- Agentic AI Foundation). Native readers: Codex CLI, GitHub Copilot,
188
- Cursor, Windsurf, Amp, Devin, and a growing list of other agents.
189
-
190
- Canonical source: CLAUDE.md (Claude Code uses CLAUDE.md natively).
191
- This file is kept in sync via `dot agents render`. Edit CLAUDE.md
192
- first; do not hand-edit AGENTS.md.
193
- -->
194
-
195
- HEADER
196
- # The title is emitted, not substituted. This used to be
197
- #
198
- # _agents_body … | sed '1s/^# CLAUDE\.md.*/# AGENTS.md — …/'
199
- #
200
- # but _agents_body drops the H1 by design (the two files differ
201
- # there), so line 1 of its output was never the CLAUDE.md title and
202
- # the substitution could not fire: the rendered file carried no title
203
- # at all. `check` is unaffected either way — it compares bodies with
204
- # the H1 stripped from both sides.
205
- printf '# AGENTS.md — AI Assistant Guidelines\n'
206
- _agents_body "$claude_md"
207
- cat <<'FOOTER'
208
-
209
- ---
210
-
211
- **Need richer context?** This file is the cross-harness summary. Claude Code reads the full canonical version from [`CLAUDE.md`](./CLAUDE.md). Both files are kept in sync via `dot agents render`.
212
- FOOTER
213
- } >"$agents_md"
214
- chmod 0644 "$agents_md" 2>/dev/null || true
215
- ui_ok "AGENTS.md" "rendered → $agents_md"
216
-
217
- # 2. Cursor rules — MDC format, points at CLAUDE.md/AGENTS.md.
218
- local cursor_dir="$root/.cursor/rules"
219
- mkdir -p "$cursor_dir"
220
- cat >"$cursor_dir/dotfiles.mdc" <<'MDC'
221
- ---
222
- description: Repo conventions for the dotfiles project (sourced from CLAUDE.md/AGENTS.md)
223
- globs:
224
- - "**/*"
225
- alwaysApply: true
226
- ---
227
-
228
- See `AGENTS.md` and `CLAUDE.md` in the repository root for the full
229
- project conventions, repository layout, testing, and CI policy. This
230
- Cursor rule file exists so Cursor's rule engine picks up the same
231
- context; do not duplicate content here — keep CLAUDE.md canonical.
232
- MDC
233
- chmod 0644 "$cursor_dir/dotfiles.mdc" 2>/dev/null || true
234
- ui_ok "Cursor" "rendered → $cursor_dir/dotfiles.mdc"
235
-
236
- # 3. Codex CLI config stub — declares the AGENTS.md path.
237
- local codex_dir="$root/.codex"
238
- mkdir -p "$codex_dir"
239
- cat >"$codex_dir/config.toml" <<'TOML'
240
- # Codex CLI config — points at the AGENTS.md cross-harness context.
241
- # Codex reads AGENTS.md natively; this file is a project-scoped pin so
242
- # the CLI prefers the in-repo guidance over any global default.
243
- project_context = "AGENTS.md"
244
- TOML
245
- chmod 0644 "$codex_dir/config.toml" 2>/dev/null || true
246
- ui_ok "Codex" "rendered → $codex_dir/config.toml"
247
-
248
- # 4-11. Per-harness rules files. All eight emitters reuse the
249
- # same body extracted from CLAUDE.md so a single edit propagates
250
- # consistently. The header differs per harness so each tool sees
251
- # syntax it expects (front-matter style, comment block, etc.).
252
- _agents_render_markdown_with_header() {
253
- local _path="$1" _harness="$2" _header="$3"
254
- mkdir -p "$(dirname "$_path")"
255
- {
256
- printf '%s\n\n' "$_header"
257
- _agents_body "$claude_md"
258
- # Heredoc instead of printf — Codacy/shellcheck flags
259
- # printf-with-backticks-in-single-quotes (SC2016) as
260
- # ambiguous even when the backticks are literal Markdown.
261
- cat <<'FOOTER'
262
-
263
- ---
264
-
265
- **Canonical source:** [`CLAUDE.md`](./CLAUDE.md) — keep in sync via `dot agents render`.
266
- FOOTER
267
- } >"$_path"
268
- chmod 0644 "$_path" 2>/dev/null || true
269
- ui_ok "$_harness" "rendered → $_path"
270
- }
271
-
272
- # 4. Windsurf — looks for `.windsurf/rules.md`.
273
- _agents_render_markdown_with_header "$root/.windsurf/rules.md" \
274
- "Windsurf" "# Windsurf project rules
275
-
276
- These rules govern Cascade and the Windsurf agent inside this repository."
277
-
278
- # 5. Roo — looks for `.roo/rules.md`.
279
- _agents_render_markdown_with_header "$root/.roo/rules.md" \
280
- "Roo" "# Roo project rules"
281
-
282
- # 6. Cline — looks for `.clinerules` (no extension).
283
- _agents_render_markdown_with_header "$root/.clinerules" \
284
- "Cline" "# Cline workspace rules"
285
-
286
- # 7. Jules — looks for `.jules/system.md`.
287
- _agents_render_markdown_with_header "$root/.jules/system.md" \
288
- "Jules" "# Jules system prompt"
289
-
290
- # 8. Antigravity — looks for `.agy/AGY.md`.
291
- _agents_render_markdown_with_header "$root/.agy/AGY.md" \
292
- "Antigravity" "# Antigravity agent rules"
293
-
294
- # 9. Zed — config pointer (TOML).
295
- local zed_dir="$root/.zed"
296
- mkdir -p "$zed_dir"
297
- cat >"$zed_dir/agent-config.toml" <<'TOML'
298
- # Zed agent config — points at AGENTS.md for the cross-harness body.
299
- # Zed reads this file when its agent mode is enabled; the actual rule
300
- # body lives in AGENTS.md (which `dot agents render` keeps current).
301
- agent_context = "AGENTS.md"
302
- TOML
303
- chmod 0644 "$zed_dir/agent-config.toml" 2>/dev/null || true
304
- ui_ok "Zed" "rendered → $zed_dir/agent-config.toml"
305
-
306
- # 10. Aider — YAML pointer to AGENTS.md / CLAUDE.md.
307
- cat >"$root/.aider.conf.yml" <<'YML'
308
- # Aider config — surfaces the cross-harness context bundle.
309
- # Aider's `--read` flag pulls in AGENTS.md / CLAUDE.md per session.
310
- read:
311
- - AGENTS.md
312
- - CLAUDE.md
313
- YML
314
- chmod 0644 "$root/.aider.conf.yml" 2>/dev/null || true
315
- ui_ok "Aider" "rendered → $root/.aider.conf.yml"
316
-
317
- # 11. Continue — JSON pointer used by VS Code / JetBrains plugin.
318
- cat >"$root/.continuerc.json" <<'JSON'
319
- {
320
- "_comment": "Continue config pointer — see AGENTS.md for the full body.",
321
- "systemMessage": "Apply the rules in AGENTS.md (canonical source: CLAUDE.md). Run `dot agents render` if the two drift."
322
- }
323
- JSON
324
- chmod 0644 "$root/.continuerc.json" 2>/dev/null || true
325
- ui_ok "Continue" "rendered → $root/.continuerc.json"
326
-
327
- ui_info "Hint" "commit AGENTS.md alongside CLAUDE.md changes (or add to your pre-commit hook)"
328
- ;;
329
- --help | -h | help)
330
- cat <<EOF
331
- Usage: dot agents <subcommand>
332
-
333
- Subcommands:
334
- list Show which agent harnesses are recognised and their target paths
335
- check Verify AGENTS.md tracks CLAUDE.md (exit 0 in sync, 1 drifted)
336
- render Regenerate AGENTS.md + 10 harness-specific files from CLAUDE.md
337
-
338
- CLAUDE.md is the canonical source. AGENTS.md follows the cross-harness
339
- standard read by Codex, Copilot, Cursor, Windsurf, Amp, and Devin.
340
-
341
- Harnesses covered by 'render':
342
- agents-md, cursor, codex, windsurf, zed, roo, cline,
343
- aider, continue, jules, agy.
344
- EOF
345
- ;;
346
- *)
347
- ui_err "Unknown subcommand" "$subcommand"
348
- echo "Run 'dot agents --help' for usage." >&2
349
- return 1
350
- ;;
351
- esac
352
- }