@sebastienrousseau/dotfiles 0.2.519 → 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 (306) hide show
  1. package/CHANGELOG.md +200 -0
  2. package/LICENSE-APACHE +190 -0
  3. package/{LICENSE → LICENSE-MIT} +1 -1
  4. package/README.md +1172 -166
  5. package/install.sh +77 -11
  6. package/package.json +8 -8
  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/CNAME +0 -1
  12. package/docs/CONFIG_STRATEGY.md +0 -124
  13. package/docs/COPYRIGHT +0 -7
  14. package/docs/GOVERNANCE.md +0 -98
  15. package/docs/MAINTAINERS.md +0 -41
  16. package/docs/NAMING_CONVENTIONS.md +0 -102
  17. package/docs/OPENCODE.md +0 -127
  18. package/docs/README.md +0 -84
  19. package/docs/STRUCTURE.md +0 -102
  20. package/docs/adr/ADR-001-ci-cd-pipeline.md +0 -118
  21. package/docs/adr/ADR-002-shell-performance.md +0 -130
  22. package/docs/adr/ADR-003-security-first.md +0 -158
  23. package/docs/adr/ADR-004-cli-architecture.md +0 -171
  24. package/docs/adr/ADR-005-chezmoi-choice.md +0 -99
  25. package/docs/adr/ADR-006-shell-selection.md +0 -124
  26. package/docs/adr/ADR-007-multi-shell-parity.md +0 -62
  27. package/docs/adr/ADR-008-alias-system-architecture.md +0 -95
  28. package/docs/adr/ADR-009-wallpaper-driven-theming.md +0 -131
  29. package/docs/adr/ADR-010-starship-transient-prompt.md +0 -144
  30. package/docs/adr/ADR-011-nushell-tier3-keep.md +0 -144
  31. package/docs/adr/ADR-012-ai-fleet-local-proxy.md +0 -79
  32. package/docs/adr/README.md +0 -40
  33. package/docs/architecture/AI_COST_OPTIMIZATION.md +0 -144
  34. package/docs/architecture/ARCHITECTURE.md +0 -117
  35. package/docs/architecture/INTEROP.md +0 -44
  36. package/docs/architecture/REPO_LAYOUT.md +0 -241
  37. package/docs/architecture/WALKTHROUGH.md +0 -86
  38. package/docs/architecture/fleet-deployment.md +0 -77
  39. package/docs/archive/EUXIS_2026_REVIEW.md +0 -127
  40. package/docs/archive/LEGACY_ROADMAP.md +0 -6
  41. package/docs/archive/MILESTONE_v0.2.493.md +0 -47
  42. package/docs/archive/PLAN.md +0 -199
  43. package/docs/archive/REPO_AUDIT.md +0 -31
  44. package/docs/articles/.pages +0 -6
  45. package/docs/articles/2026-07-05-custom-mkdocs-material-dark-theme.md +0 -216
  46. package/docs/articles/2026-07-05-fish-startup-abbr.md +0 -153
  47. package/docs/articles/2026-07-05-master-to-main-rename-runbook.md +0 -128
  48. package/docs/articles/index.md +0 -36
  49. package/docs/guides/INSTALL.md +0 -144
  50. package/docs/guides/NEOVIM_IDE_GUIDE.md +0 -61
  51. package/docs/guides/THEMING.md +0 -230
  52. package/docs/guides/TROUBLESHOOTING.md +0 -176
  53. package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +0 -792
  54. package/docs/index.md +0 -132
  55. package/docs/interop/A2A.md +0 -39
  56. package/docs/interop/POWERSHELL.md +0 -102
  57. package/docs/manual/00-introduction.md +0 -89
  58. package/docs/manual/01-concepts/01-architecture.md +0 -138
  59. package/docs/manual/01-concepts/02-trust-model.md +0 -183
  60. package/docs/manual/01-concepts/03-theme-engine.md +0 -186
  61. package/docs/manual/01-concepts/04-fleet.md +0 -148
  62. package/docs/manual/01-concepts/05-self-healing.md +0 -204
  63. package/docs/manual/02-tutorials/01-first-install.md +0 -197
  64. package/docs/manual/02-tutorials/02-add-wallpaper.md +0 -216
  65. package/docs/manual/02-tutorials/03-create-profile.md +0 -244
  66. package/docs/manual/02-tutorials/04-encrypt-secret.md +0 -281
  67. package/docs/manual/02-tutorials/05-deploy-fleet.md +0 -283
  68. package/docs/manual/03-reference/01-dot-cli.md +0 -450
  69. package/docs/manual/03-reference/02-config-files.md +0 -265
  70. package/docs/manual/03-reference/03-environment.md +0 -124
  71. package/docs/manual/03-reference/04-templates.md +0 -190
  72. package/docs/manual/03-reference/05-feature-flags.md +0 -187
  73. package/docs/manual/04-cookbook/01-recipes.md +0 -285
  74. package/docs/manual/04-cookbook/02-troubleshooting.md +0 -351
  75. package/docs/manual/04-cookbook/03-faq.md +0 -175
  76. package/docs/manual/05-appendices/A-platform-matrix.md +0 -101
  77. package/docs/manual/05-appendices/B-security-checklist.md +0 -85
  78. package/docs/manual/05-appendices/C-glossary.md +0 -40
  79. package/docs/manual/05-appendices/D-bibliography.md +0 -58
  80. package/docs/manual/05-appendices/E-license.md +0 -38
  81. package/docs/manual/_toc.yml +0 -58
  82. package/docs/manual/command-index.md +0 -155
  83. package/docs/manual/concept-index.md +0 -168
  84. package/docs/manual/index.md +0 -66
  85. package/docs/operations/ARCHITECTURE_ROADMAP.md +0 -7
  86. package/docs/operations/ATTESTATION.md +0 -44
  87. package/docs/operations/CI_CADENCE.md +0 -107
  88. package/docs/operations/CI_COMPOSITES.md +0 -156
  89. package/docs/operations/COMPLETIONS.md +0 -123
  90. package/docs/operations/COVERAGE.md +0 -204
  91. package/docs/operations/DRIFT.md +0 -107
  92. package/docs/operations/HARD_AUDIT_2026.md +0 -631
  93. package/docs/operations/MAINTENANCE.md +0 -63
  94. package/docs/operations/MANIFEST.md +0 -127
  95. package/docs/operations/MIGRATION.md +0 -109
  96. package/docs/operations/OPERATIONS.md +0 -188
  97. package/docs/operations/PERFORMANCE.md +0 -133
  98. package/docs/operations/REGISTRY.md +0 -90
  99. package/docs/operations/RELEASE_PIPELINE.md +0 -128
  100. package/docs/operations/RELIABILITY.md +0 -122
  101. package/docs/operations/RFC_v0_2_503_reorganization.md +0 -280
  102. package/docs/operations/ROADMAP.md +0 -10
  103. package/docs/operations/ROADMAP_2026.md +0 -7
  104. package/docs/operations/ROADMAP_V0_2_503.md +0 -10
  105. package/docs/operations/TESTING.md +0 -216
  106. package/docs/operations/TRACEABILITY.md +0 -43
  107. package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +0 -65
  108. package/docs/operations/VERSION_SYNC.md +0 -393
  109. package/docs/reference/ALIASES.md +0 -131
  110. package/docs/reference/ALIASES_CHEATSHEET.md +0 -32
  111. package/docs/reference/ALIASES_DEPRECATIONS.md +0 -13
  112. package/docs/reference/FEATURES.md +0 -66
  113. package/docs/reference/FONTS.md +0 -112
  114. package/docs/reference/POWERSHELL_PARITY.md +0 -82
  115. package/docs/reference/PROFILES.md +0 -69
  116. package/docs/reference/SCREENSHOTS.md +0 -121
  117. package/docs/reference/SCRIPTS.md +0 -71
  118. package/docs/reference/SUPPORT_MATRIX.md +0 -80
  119. package/docs/reference/THEMES.md +0 -117
  120. package/docs/reference/TOOLS.md +0 -110
  121. package/docs/reference/UTILS.md +0 -242
  122. package/docs/registry.json +0 -6
  123. package/docs/schema/dot-env-v1.json +0 -110
  124. package/docs/schema/dot-registry-v1.json +0 -33
  125. package/docs/security/AI_ACT_COMPLIANCE.md +0 -94
  126. package/docs/security/AUDIT_BYPASS.md +0 -103
  127. package/docs/security/AUTOMATION_SECRETS.md +0 -26
  128. package/docs/security/CI_EGRESS_ALLOWLIST.md +0 -127
  129. package/docs/security/CI_PINNING.md +0 -129
  130. package/docs/security/COMMIT_SIGNING.md +0 -138
  131. package/docs/security/COMPLIANCE.md +0 -458
  132. package/docs/security/DEPS_DEV_EXCEPTIONS.md +0 -86
  133. package/docs/security/DISCLOSURE.md +0 -130
  134. package/docs/security/ENCRYPTION.md +0 -57
  135. package/docs/security/FMEA.md +0 -159
  136. package/docs/security/FUZZING.md +0 -114
  137. package/docs/security/HISTORY_FILTERING.md +0 -132
  138. package/docs/security/INCIDENT_RESPONSE.md +0 -579
  139. package/docs/security/INSTALL_VERIFICATION.md +0 -122
  140. package/docs/security/KEYS.md +0 -49
  141. package/docs/security/KEY_ROTATION.md +0 -303
  142. package/docs/security/MCP_POLICY.md +0 -78
  143. package/docs/security/POLICY_RELEASES.md +0 -37
  144. package/docs/security/README.md +0 -28
  145. package/docs/security/SCORECARD.md +0 -195
  146. package/docs/security/SECRETS.md +0 -158
  147. package/docs/security/SECURITY.md +0 -45
  148. package/docs/security/SECURITY_CHECKLIST.md +0 -55
  149. package/docs/security/SHELL_EXEMPTIONS.md +0 -145
  150. package/docs/security/SOUP_REGISTER.md +0 -36
  151. package/docs/security/THREAT_MODEL.md +0 -130
  152. package/docs/security/VERIFICATION_VALIDATION.md +0 -228
  153. package/docs/security/VERIFY_RELEASE.md +0 -201
  154. package/docs/security/security-pubkey.asc +0 -15
  155. package/docs/stylesheets/extra.css +0 -444
  156. package/docs/themes/README.md +0 -10
  157. package/docs/themes/VISUAL_INTEGRITY_REPORT.md +0 -30
  158. package/docs/themes/hero-shot.svg +0 -78
  159. package/scripts/README.md +0 -123
  160. package/scripts/ci/check-copyright-headers.sh +0 -8
  161. package/scripts/ci/check-shell-preamble.sh +0 -8
  162. package/scripts/ci/guard-gitleaks-checkout.sh +0 -8
  163. package/scripts/demo/record.sh +0 -43
  164. package/scripts/diagnostics/a2a-conformance.sh +0 -163
  165. package/scripts/diagnostics/alias-governance.sh +0 -138
  166. package/scripts/diagnostics/aliases-cheatsheet.sh +0 -74
  167. package/scripts/diagnostics/aliases-manifest.sh +0 -77
  168. package/scripts/diagnostics/benchmark.sh +0 -408
  169. package/scripts/diagnostics/conflicts.sh +0 -73
  170. package/scripts/diagnostics/doctor-unified.sh +0 -39
  171. package/scripts/diagnostics/doctor.sh +0 -751
  172. package/scripts/diagnostics/drift-dashboard.sh +0 -202
  173. package/scripts/diagnostics/health.sh +0 -623
  174. package/scripts/diagnostics/history-analysis.sh +0 -86
  175. package/scripts/diagnostics/mcp-doctor.sh +0 -582
  176. package/scripts/diagnostics/perf.sh +0 -453
  177. package/scripts/diagnostics/scorecard.sh +0 -119
  178. package/scripts/diagnostics/secret-governance.sh +0 -65
  179. package/scripts/diagnostics/security-score.sh +0 -467
  180. package/scripts/diagnostics/smoke-test.sh +0 -88
  181. package/scripts/diagnostics/snapshot.sh +0 -90
  182. package/scripts/diagnostics/verify.sh +0 -108
  183. package/scripts/diagnostics/verify_state.sh +0 -73
  184. package/scripts/diagnostics/version-locks.sh +0 -94
  185. package/scripts/diagnostics/workstation-attestation.sh +0 -187
  186. package/scripts/dot/commands/agent.sh +0 -485
  187. package/scripts/dot/commands/agents.sh +0 -336
  188. package/scripts/dot/commands/ai.sh +0 -587
  189. package/scripts/dot/commands/aliases.sh +0 -277
  190. package/scripts/dot/commands/appearance.sh +0 -110
  191. package/scripts/dot/commands/completion.sh +0 -134
  192. package/scripts/dot/commands/core.sh +0 -217
  193. package/scripts/dot/commands/diagnostics.sh +0 -265
  194. package/scripts/dot/commands/env-emit.sh +0 -203
  195. package/scripts/dot/commands/fleet.sh +0 -688
  196. package/scripts/dot/commands/init.sh +0 -185
  197. package/scripts/dot/commands/lint.sh +0 -208
  198. package/scripts/dot/commands/manual.sh +0 -169
  199. package/scripts/dot/commands/meta.sh +0 -333
  200. package/scripts/dot/commands/patterns.sh +0 -55
  201. package/scripts/dot/commands/registry.sh +0 -419
  202. package/scripts/dot/commands/restore.sh +0 -232
  203. package/scripts/dot/commands/secrets.sh +0 -296
  204. package/scripts/dot/commands/security.sh +0 -102
  205. package/scripts/dot/commands/tools.sh +0 -556
  206. package/scripts/dot/data/alias-deprecations.tsv +0 -2
  207. package/scripts/dot/powershell/Dot.psm1 +0 -319
  208. package/scripts/fonts/install-nerd-fonts.sh +0 -75
  209. package/scripts/fonts/patch-fonts.sh +0 -36
  210. package/scripts/git-hooks/install.sh +0 -12
  211. package/scripts/git-hooks/pre-commit +0 -12
  212. package/scripts/git-hooks/pre-commit-audit.sh +0 -146
  213. package/scripts/git-hooks/pre-push +0 -105
  214. package/scripts/git-hooks/prepare-commit-msg +0 -29
  215. package/scripts/lib/secrets_provider.sh +0 -185
  216. package/scripts/ops/ai-setup.sh +0 -71
  217. package/scripts/ops/bundle.sh +0 -104
  218. package/scripts/ops/chaos.sh +0 -50
  219. package/scripts/ops/chezmoi-apply.sh +0 -333
  220. package/scripts/ops/chezmoi-diff.sh +0 -16
  221. package/scripts/ops/chezmoi-remove.sh +0 -46
  222. package/scripts/ops/chezmoi-update.sh +0 -63
  223. package/scripts/ops/heal-chezmoi.sh +0 -87
  224. package/scripts/ops/heal-system.sh +0 -129
  225. package/scripts/ops/heal-tools.sh +0 -297
  226. package/scripts/ops/heal.sh +0 -223
  227. package/scripts/ops/post-apply-repair.sh +0 -107
  228. package/scripts/ops/prewarm.sh +0 -128
  229. package/scripts/ops/release.sh +0 -262
  230. package/scripts/ops/rollback.sh +0 -604
  231. package/scripts/ops/setup.sh +0 -138
  232. package/scripts/ops/teleport.sh +0 -34
  233. package/scripts/qa/check-version-consistency.sh +0 -124
  234. package/scripts/qa/coverage-baseline.sh +0 -61
  235. package/scripts/qa/docs-coverage.sh +0 -112
  236. package/scripts/qa/examples-coverage.sh +0 -94
  237. package/scripts/qa/powershell-contract.ps1 +0 -95
  238. package/scripts/qa/reliability-audit.sh +0 -139
  239. package/scripts/qa/scorecard-snapshot.sh +0 -128
  240. package/scripts/qa/traceability-coverage.sh +0 -117
  241. package/scripts/qa/validate-examples.sh +0 -27
  242. package/scripts/qa/wsl-contract.sh +0 -12
  243. package/scripts/secrets/age-init.sh +0 -82
  244. package/scripts/secrets/create-secrets-file.sh +0 -46
  245. package/scripts/secrets/encrypt-ssh-key.sh +0 -44
  246. package/scripts/security/backup.sh +0 -58
  247. package/scripts/security/check-disclosure-key-expiry.sh +0 -111
  248. package/scripts/security/dns-doh.sh +0 -52
  249. package/scripts/security/encryption-check.sh +0 -55
  250. package/scripts/security/enforce-policies.sh +0 -335
  251. package/scripts/security/firewall.sh +0 -91
  252. package/scripts/security/lock-configs.sh +0 -67
  253. package/scripts/security/lock-screen.sh +0 -56
  254. package/scripts/security/manage-secrets.sh +0 -429
  255. package/scripts/security/ssh-cert.sh +0 -204
  256. package/scripts/security/telemetry-kill.sh +0 -51
  257. package/scripts/security/usb-safety.sh +0 -52
  258. package/scripts/theme/apply-gnome-theme.sh +0 -333
  259. package/scripts/theme/extract-heic-frames.sh +0 -115
  260. package/scripts/theme/extract-theme.py +0 -742
  261. package/scripts/theme/install-boot-logo.sh +0 -63
  262. package/scripts/theme/install-catppuccin-themes.sh +0 -371
  263. package/scripts/theme/install-cursors.sh +0 -26
  264. package/scripts/theme/install-file-icons.sh +0 -27
  265. package/scripts/theme/install-grub-theme.sh +0 -62
  266. package/scripts/theme/install-lock-icon.sh +0 -31
  267. package/scripts/theme/merge-wallpaper.sh +0 -146
  268. package/scripts/theme/rebuild-themes.sh +0 -544
  269. package/scripts/theme/switch.sh +0 -449
  270. package/scripts/theme/wallpaper-rotate.sh +0 -137
  271. package/scripts/theme/wallpaper-sync.sh +0 -690
  272. package/scripts/tools/cmatrix.sh +0 -22
  273. package/scripts/tools/detect-collisions.py +0 -103
  274. package/scripts/tools/emoji-picker.sh +0 -49
  275. package/scripts/tools/figlet-banner.sh +0 -19
  276. package/scripts/tools/log-rotate.sh +0 -31
  277. package/scripts/tools/lolcat-wrap.sh +0 -20
  278. package/scripts/tools/pipes.sh +0 -49
  279. package/scripts/tuning/linux.sh +0 -186
  280. package/scripts/tuning/macos.sh +0 -56
  281. package/scripts/uninstall.sh +0 -86
  282. package/scripts/version-sync.sh +0 -654
  283. package/templates/chezmoi-data/geekom-a9.toml.example +0 -21
  284. package/templates/chezmoi-data/mac-m1.toml.example +0 -16
  285. package/templates/chezmoi-data/mac-t2-linux.toml.example +0 -21
  286. package/templates/chezmoi-data/surface-pro-7p.toml.example +0 -21
  287. package/templates/projects/go/.github/workflows/ci.yml +0 -31
  288. package/templates/projects/go/README.md +0 -7
  289. package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +0 -8
  290. package/templates/projects/go/go.mod +0 -3
  291. package/templates/projects/go/go.sum +0 -0
  292. package/templates/projects/molecule/README.md +0 -7
  293. package/templates/projects/molecule/converge.yml +0 -7
  294. package/templates/projects/molecule/molecule.yml +0 -16
  295. package/templates/projects/node/.github/workflows/ci.yml +0 -30
  296. package/templates/projects/node/README.md +0 -7
  297. package/templates/projects/node/package-lock.json +0 -12
  298. package/templates/projects/node/package.json +0 -10
  299. package/templates/projects/node/src/index.js +0 -3
  300. package/templates/projects/packer/README.md +0 -15
  301. package/templates/projects/packer/main.pkr.hcl +0 -15
  302. package/templates/projects/python/.github/workflows/ci.yml +0 -34
  303. package/templates/projects/python/README.md +0 -7
  304. package/templates/projects/python/pyproject.toml +0 -25
  305. package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +0 -2
  306. package/templates/projects/python/tests/test_basic.py +0 -3
@@ -1,336 +0,0 @@
1
- #!/usr/bin/env bash
2
- # SPDX-License-Identifier: 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
- # Diff the bodies (header comments differ by design).
152
- # `--ignore-blank-lines` so the trailing newline from the footer
153
- # block doesn't false-positive as drift.
154
- if diff -q --ignore-blank-lines <(_agents_body "$claude_md") <(_agents_body "$agents_md") >/dev/null 2>&1; then
155
- ui_ok "AGENTS.md" "in sync with CLAUDE.md"
156
- return 0
157
- fi
158
- ui_warn "AGENTS.md" "drifted from CLAUDE.md — run 'dot agents render'"
159
- return 1
160
- ;;
161
- render)
162
- local claude_md root
163
- claude_md="$(_agents_canonical)"
164
- root="$(_agents_repo_root)"
165
- [[ -f "$claude_md" ]] || {
166
- ui_err "CLAUDE.md" "not found at $claude_md"
167
- return 2
168
- }
169
-
170
- # 1. AGENTS.md — body of CLAUDE.md + AGENTS.md cross-reference header.
171
- local agents_md="$root/AGENTS.md"
172
- {
173
- cat <<'HEADER'
174
- <!--
175
- AGENTS.md — Cross-harness AI agent guidelines for this repository.
176
-
177
- This file follows the AGENTS.md standard (originated by OpenAI in
178
- August 2025, stewarded since December 2025 by the Linux Foundation
179
- Agentic AI Foundation). Native readers: Codex CLI, GitHub Copilot,
180
- Cursor, Windsurf, Amp, Devin, and a growing list of other agents.
181
-
182
- Canonical source: CLAUDE.md (Claude Code uses CLAUDE.md natively).
183
- This file is kept in sync via `dot agents render`. Edit CLAUDE.md
184
- first; do not hand-edit AGENTS.md.
185
- -->
186
-
187
- HEADER
188
- # Replace the title line so the rendered file declares its
189
- # purpose, but pass everything else through unchanged.
190
- _agents_body "$claude_md" | sed '1s/^# CLAUDE\.md.*/# AGENTS.md — AI Assistant Guidelines/'
191
- cat <<'FOOTER'
192
-
193
- ---
194
-
195
- **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`.
196
- FOOTER
197
- } >"$agents_md"
198
- chmod 0644 "$agents_md" 2>/dev/null || true
199
- ui_ok "AGENTS.md" "rendered → $agents_md"
200
-
201
- # 2. Cursor rules — MDC format, points at CLAUDE.md/AGENTS.md.
202
- local cursor_dir="$root/.cursor/rules"
203
- mkdir -p "$cursor_dir"
204
- cat >"$cursor_dir/dotfiles.mdc" <<'MDC'
205
- ---
206
- description: Repo conventions for the dotfiles project (sourced from CLAUDE.md/AGENTS.md)
207
- globs:
208
- - "**/*"
209
- alwaysApply: true
210
- ---
211
-
212
- See `AGENTS.md` and `CLAUDE.md` in the repository root for the full
213
- project conventions, repository layout, testing, and CI policy. This
214
- Cursor rule file exists so Cursor's rule engine picks up the same
215
- context; do not duplicate content here — keep CLAUDE.md canonical.
216
- MDC
217
- chmod 0644 "$cursor_dir/dotfiles.mdc" 2>/dev/null || true
218
- ui_ok "Cursor" "rendered → $cursor_dir/dotfiles.mdc"
219
-
220
- # 3. Codex CLI config stub — declares the AGENTS.md path.
221
- local codex_dir="$root/.codex"
222
- mkdir -p "$codex_dir"
223
- cat >"$codex_dir/config.toml" <<'TOML'
224
- # Codex CLI config — points at the AGENTS.md cross-harness context.
225
- # Codex reads AGENTS.md natively; this file is a project-scoped pin so
226
- # the CLI prefers the in-repo guidance over any global default.
227
- project_context = "AGENTS.md"
228
- TOML
229
- chmod 0644 "$codex_dir/config.toml" 2>/dev/null || true
230
- ui_ok "Codex" "rendered → $codex_dir/config.toml"
231
-
232
- # 4-11. Per-harness rules files. All eight emitters reuse the
233
- # same body extracted from CLAUDE.md so a single edit propagates
234
- # consistently. The header differs per harness so each tool sees
235
- # syntax it expects (front-matter style, comment block, etc.).
236
- _agents_render_markdown_with_header() {
237
- local _path="$1" _harness="$2" _header="$3"
238
- mkdir -p "$(dirname "$_path")"
239
- {
240
- printf '%s\n\n' "$_header"
241
- _agents_body "$claude_md"
242
- # Heredoc instead of printf — Codacy/shellcheck flags
243
- # printf-with-backticks-in-single-quotes (SC2016) as
244
- # ambiguous even when the backticks are literal Markdown.
245
- cat <<'FOOTER'
246
-
247
- ---
248
-
249
- **Canonical source:** [`CLAUDE.md`](./CLAUDE.md) — keep in sync via `dot agents render`.
250
- FOOTER
251
- } >"$_path"
252
- chmod 0644 "$_path" 2>/dev/null || true
253
- ui_ok "$_harness" "rendered → $_path"
254
- }
255
-
256
- # 4. Windsurf — looks for `.windsurf/rules.md`.
257
- _agents_render_markdown_with_header "$root/.windsurf/rules.md" \
258
- "Windsurf" "# Windsurf project rules
259
-
260
- These rules govern Cascade and the Windsurf agent inside this repository."
261
-
262
- # 5. Roo — looks for `.roo/rules.md`.
263
- _agents_render_markdown_with_header "$root/.roo/rules.md" \
264
- "Roo" "# Roo project rules"
265
-
266
- # 6. Cline — looks for `.clinerules` (no extension).
267
- _agents_render_markdown_with_header "$root/.clinerules" \
268
- "Cline" "# Cline workspace rules"
269
-
270
- # 7. Jules — looks for `.jules/system.md`.
271
- _agents_render_markdown_with_header "$root/.jules/system.md" \
272
- "Jules" "# Jules system prompt"
273
-
274
- # 8. Antigravity — looks for `.agy/AGY.md`.
275
- _agents_render_markdown_with_header "$root/.agy/AGY.md" \
276
- "Antigravity" "# Antigravity agent rules"
277
-
278
- # 9. Zed — config pointer (TOML).
279
- local zed_dir="$root/.zed"
280
- mkdir -p "$zed_dir"
281
- cat >"$zed_dir/agent-config.toml" <<'TOML'
282
- # Zed agent config — points at AGENTS.md for the cross-harness body.
283
- # Zed reads this file when its agent mode is enabled; the actual rule
284
- # body lives in AGENTS.md (which `dot agents render` keeps current).
285
- agent_context = "AGENTS.md"
286
- TOML
287
- chmod 0644 "$zed_dir/agent-config.toml" 2>/dev/null || true
288
- ui_ok "Zed" "rendered → $zed_dir/agent-config.toml"
289
-
290
- # 10. Aider — YAML pointer to AGENTS.md / CLAUDE.md.
291
- cat >"$root/.aider.conf.yml" <<'YML'
292
- # Aider config — surfaces the cross-harness context bundle.
293
- # Aider's `--read` flag pulls in AGENTS.md / CLAUDE.md per session.
294
- read:
295
- - AGENTS.md
296
- - CLAUDE.md
297
- YML
298
- chmod 0644 "$root/.aider.conf.yml" 2>/dev/null || true
299
- ui_ok "Aider" "rendered → $root/.aider.conf.yml"
300
-
301
- # 11. Continue — JSON pointer used by VS Code / JetBrains plugin.
302
- cat >"$root/.continuerc.json" <<'JSON'
303
- {
304
- "_comment": "Continue config pointer — see AGENTS.md for the full body.",
305
- "systemMessage": "Apply the rules in AGENTS.md (canonical source: CLAUDE.md). Run `dot agents render` if the two drift."
306
- }
307
- JSON
308
- chmod 0644 "$root/.continuerc.json" 2>/dev/null || true
309
- ui_ok "Continue" "rendered → $root/.continuerc.json"
310
-
311
- ui_info "Hint" "commit AGENTS.md alongside CLAUDE.md changes (or add to your pre-commit hook)"
312
- ;;
313
- --help | -h | help)
314
- cat <<EOF
315
- Usage: dot agents <subcommand>
316
-
317
- Subcommands:
318
- list Show which agent harnesses are recognised and their target paths
319
- check Verify AGENTS.md tracks CLAUDE.md (exit 0 in sync, 1 drifted)
320
- render Regenerate AGENTS.md + 10 harness-specific files from CLAUDE.md
321
-
322
- CLAUDE.md is the canonical source. AGENTS.md follows the cross-harness
323
- standard read by Codex, Copilot, Cursor, Windsurf, Amp, and Devin.
324
-
325
- Harnesses covered by 'render':
326
- agents-md, cursor, codex, windsurf, zed, roo, cline,
327
- aider, continue, jules, agy.
328
- EOF
329
- ;;
330
- *)
331
- ui_err "Unknown subcommand" "$subcommand"
332
- echo "Run 'dot agents --help' for usage." >&2
333
- return 1
334
- ;;
335
- esac
336
- }