@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.
- package/CHANGELOG.md +18 -0
- package/LICENSE-APACHE +190 -0
- package/LICENSE-MIT +21 -0
- package/README.md +43 -37
- package/install.sh +76 -10
- package/package.json +7 -7
- package/tools/README.md +49 -0
- package/tools/ci/install-chezmoi-verified.sh +68 -0
- package/docs/.vitepress/reports/localization-readability-audit.md +0 -73
- package/docs/AI.md +0 -179
- package/docs/ARCHITECTURE.md +0 -117
- package/docs/CNAME +0 -1
- package/docs/CONFIG_STRATEGY.md +0 -124
- package/docs/COPYRIGHT +0 -7
- package/docs/ECOSYSTEM.md +0 -220
- package/docs/GOLD-STANDARD-AUDIT.md +0 -352
- package/docs/GOVERNANCE.md +0 -98
- package/docs/MAINTAINERS.md +0 -41
- package/docs/MINIMUM-TOOLCHAIN.md +0 -100
- package/docs/NAMING_CONVENTIONS.md +0 -102
- package/docs/OPENCODE.md +0 -127
- package/docs/README.md +0 -84
- package/docs/STRUCTURE.md +0 -102
- package/docs/adr/ADR-001-ci-cd-pipeline.md +0 -118
- package/docs/adr/ADR-002-shell-performance.md +0 -130
- package/docs/adr/ADR-003-security-first.md +0 -158
- package/docs/adr/ADR-004-cli-architecture.md +0 -171
- package/docs/adr/ADR-005-chezmoi-choice.md +0 -99
- package/docs/adr/ADR-006-shell-selection.md +0 -124
- package/docs/adr/ADR-007-multi-shell-parity.md +0 -62
- package/docs/adr/ADR-008-alias-system-architecture.md +0 -95
- package/docs/adr/ADR-009-wallpaper-driven-theming.md +0 -131
- package/docs/adr/ADR-010-starship-transient-prompt.md +0 -144
- package/docs/adr/ADR-011-nushell-tier3-keep.md +0 -144
- package/docs/adr/ADR-012-ai-fleet-local-proxy.md +0 -79
- package/docs/adr/README.md +0 -40
- package/docs/architecture/AI_COST_OPTIMIZATION.md +0 -144
- package/docs/architecture/ARCHITECTURE.md +0 -20
- package/docs/architecture/INTEROP.md +0 -44
- package/docs/architecture/REPO_LAYOUT.md +0 -241
- package/docs/architecture/WALKTHROUGH.md +0 -86
- package/docs/architecture/fleet-deployment.md +0 -77
- package/docs/archive/EUXIS_2026_REVIEW.md +0 -127
- package/docs/archive/LEGACY_ROADMAP.md +0 -6
- package/docs/archive/MILESTONE_v0.2.493.md +0 -47
- package/docs/archive/PLAN.md +0 -199
- package/docs/archive/REPO_AUDIT.md +0 -31
- package/docs/articles/.pages +0 -6
- package/docs/articles/2026-07-05-custom-mkdocs-material-dark-theme.md +0 -216
- package/docs/articles/2026-07-05-fish-startup-abbr.md +0 -153
- package/docs/articles/2026-07-05-master-to-main-rename-runbook.md +0 -128
- package/docs/articles/index.md +0 -36
- package/docs/guides/INSTALL.md +0 -144
- package/docs/guides/MACOS_ICLOUD_SYMLINKS.md +0 -121
- package/docs/guides/NEOVIM_IDE_GUIDE.md +0 -61
- package/docs/guides/THEMING.md +0 -230
- package/docs/guides/TROUBLESHOOTING.md +0 -176
- package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +0 -792
- package/docs/index.md +0 -132
- package/docs/interop/A2A.md +0 -39
- package/docs/interop/POWERSHELL.md +0 -102
- package/docs/manual/00-introduction.md +0 -89
- package/docs/manual/01-concepts/01-architecture.md +0 -138
- package/docs/manual/01-concepts/02-trust-model.md +0 -183
- package/docs/manual/01-concepts/03-theme-engine.md +0 -186
- package/docs/manual/01-concepts/04-fleet.md +0 -148
- package/docs/manual/01-concepts/05-self-healing.md +0 -204
- package/docs/manual/02-tutorials/01-first-install.md +0 -197
- package/docs/manual/02-tutorials/02-add-wallpaper.md +0 -216
- package/docs/manual/02-tutorials/03-create-profile.md +0 -244
- package/docs/manual/02-tutorials/04-encrypt-secret.md +0 -281
- package/docs/manual/02-tutorials/05-deploy-fleet.md +0 -283
- package/docs/manual/03-reference/01-dot-cli.md +0 -475
- package/docs/manual/03-reference/02-config-files.md +0 -265
- package/docs/manual/03-reference/03-environment.md +0 -124
- package/docs/manual/03-reference/04-templates.md +0 -190
- package/docs/manual/03-reference/05-feature-flags.md +0 -187
- package/docs/manual/04-cookbook/01-recipes.md +0 -285
- package/docs/manual/04-cookbook/02-troubleshooting.md +0 -351
- package/docs/manual/04-cookbook/03-faq.md +0 -175
- package/docs/manual/05-appendices/A-platform-matrix.md +0 -101
- package/docs/manual/05-appendices/B-security-checklist.md +0 -85
- package/docs/manual/05-appendices/C-glossary.md +0 -40
- package/docs/manual/05-appendices/D-bibliography.md +0 -58
- package/docs/manual/05-appendices/E-license.md +0 -38
- package/docs/manual/_toc.yml +0 -58
- package/docs/manual/command-index.md +0 -175
- package/docs/manual/concept-index.md +0 -170
- package/docs/manual/index.md +0 -66
- package/docs/migration/README.md +0 -81
- package/docs/migration/from-bare-git-repo.md +0 -156
- package/docs/migration/from-gnu-stow.md +0 -165
- package/docs/migration/from-plain-chezmoi.md +0 -148
- package/docs/migration/from-yadm.md +0 -187
- package/docs/operations/ARCHITECTURE_ROADMAP.md +0 -7
- package/docs/operations/ATTESTATION.md +0 -44
- package/docs/operations/CI_CADENCE.md +0 -107
- package/docs/operations/CI_COMPOSITES.md +0 -156
- package/docs/operations/COMPLETIONS.md +0 -123
- package/docs/operations/COVERAGE.md +0 -204
- package/docs/operations/DRIFT.md +0 -107
- package/docs/operations/HARD_AUDIT_2026.md +0 -631
- package/docs/operations/MAINTENANCE.md +0 -63
- package/docs/operations/MANIFEST.md +0 -127
- package/docs/operations/MIGRATION.md +0 -109
- package/docs/operations/OPERATIONS.md +0 -188
- package/docs/operations/PERFORMANCE.md +0 -133
- package/docs/operations/PERFORMANCE_BUDGETS.md +0 -196
- package/docs/operations/REGISTRY.md +0 -90
- package/docs/operations/RELEASE_PIPELINE.md +0 -128
- package/docs/operations/RELIABILITY.md +0 -122
- package/docs/operations/RFC_v0_2_503_reorganization.md +0 -280
- package/docs/operations/ROADMAP.md +0 -10
- package/docs/operations/ROADMAP_2026.md +0 -7
- package/docs/operations/ROADMAP_V0_2_503.md +0 -10
- package/docs/operations/TESTING.md +0 -216
- package/docs/operations/TRACEABILITY.md +0 -44
- package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +0 -65
- package/docs/operations/VERSION_SYNC.md +0 -393
- package/docs/packaging.md +0 -222
- package/docs/reference/ALIASES.md +0 -131
- package/docs/reference/ALIASES_CHEATSHEET.md +0 -32
- package/docs/reference/ALIASES_DEPRECATIONS.md +0 -13
- package/docs/reference/FEATURE-MATRIX.md +0 -646
- package/docs/reference/FEATURES.md +0 -66
- package/docs/reference/FONTS.md +0 -112
- package/docs/reference/POWERSHELL_PARITY.md +0 -82
- package/docs/reference/PROFILES.md +0 -69
- package/docs/reference/SCREENSHOTS.md +0 -121
- package/docs/reference/SCRIPTS.md +0 -71
- package/docs/reference/SUPPORT_MATRIX.md +0 -80
- package/docs/reference/THEMES.md +0 -117
- package/docs/reference/TOOLS.md +0 -110
- package/docs/reference/UTILS.md +0 -243
- package/docs/registry.json +0 -6
- package/docs/schema/dot-env-v1.json +0 -110
- package/docs/schema/dot-registry-v1.json +0 -33
- package/docs/security/AI_ACT_COMPLIANCE.md +0 -94
- package/docs/security/AUDIT_BYPASS.md +0 -103
- package/docs/security/AUTOMATION_SECRETS.md +0 -26
- package/docs/security/CI_EGRESS_ALLOWLIST.md +0 -127
- package/docs/security/CI_PINNING.md +0 -129
- package/docs/security/COMMIT_SIGNING.md +0 -138
- package/docs/security/COMPLIANCE.md +0 -458
- package/docs/security/DEPS_DEV_EXCEPTIONS.md +0 -86
- package/docs/security/DISCLOSURE.md +0 -130
- package/docs/security/ENCRYPTION.md +0 -57
- package/docs/security/FMEA.md +0 -159
- package/docs/security/FUZZING.md +0 -209
- package/docs/security/HISTORY_FILTERING.md +0 -132
- package/docs/security/INCIDENT_RESPONSE.md +0 -579
- package/docs/security/INSTALL_VERIFICATION.md +0 -122
- package/docs/security/KEYS.md +0 -49
- package/docs/security/KEY_ROTATION.md +0 -303
- package/docs/security/MCP_POLICY.md +0 -78
- package/docs/security/POLICY_RELEASES.md +0 -37
- package/docs/security/README.md +0 -28
- package/docs/security/SCORECARD.md +0 -195
- package/docs/security/SECRETS.md +0 -158
- package/docs/security/SECURITY.md +0 -45
- package/docs/security/SECURITY_CHECKLIST.md +0 -55
- package/docs/security/SHELL_EXEMPTIONS.md +0 -145
- package/docs/security/SOUP_REGISTER.md +0 -36
- package/docs/security/THREAT_MODEL.md +0 -130
- package/docs/security/VERIFICATION_VALIDATION.md +0 -228
- package/docs/security/VERIFY_RELEASE.md +0 -201
- package/docs/security/security-pubkey.asc +0 -15
- package/docs/stylesheets/extra.css +0 -444
- package/docs/themes/README.md +0 -10
- package/docs/themes/VISUAL_INTEGRITY_REPORT.md +0 -30
- package/docs/themes/hero-shot.svg +0 -78
- package/scripts/README.md +0 -123
- package/scripts/ci/check-copyright-headers.sh +0 -8
- package/scripts/ci/check-shell-preamble.sh +0 -8
- package/scripts/ci/guard-gitleaks-checkout.sh +0 -8
- package/scripts/demo/record.sh +0 -43
- package/scripts/diagnostics/a2a-conformance.sh +0 -163
- package/scripts/diagnostics/alias-governance.sh +0 -165
- package/scripts/diagnostics/aliases-cheatsheet.sh +0 -74
- package/scripts/diagnostics/aliases-manifest.sh +0 -77
- package/scripts/diagnostics/attest-verify.sh +0 -147
- package/scripts/diagnostics/benchmark.sh +0 -408
- package/scripts/diagnostics/conflicts.sh +0 -73
- package/scripts/diagnostics/doctor-unified.sh +0 -43
- package/scripts/diagnostics/doctor.sh +0 -797
- package/scripts/diagnostics/drift-dashboard.sh +0 -203
- package/scripts/diagnostics/health.sh +0 -656
- package/scripts/diagnostics/history-analysis.sh +0 -86
- package/scripts/diagnostics/mcp-doctor.sh +0 -582
- package/scripts/diagnostics/perf.sh +0 -453
- package/scripts/diagnostics/scorecard.sh +0 -120
- package/scripts/diagnostics/secret-governance.sh +0 -65
- package/scripts/diagnostics/security-score.sh +0 -467
- package/scripts/diagnostics/smoke-test.sh +0 -88
- package/scripts/diagnostics/snapshot.sh +0 -90
- package/scripts/diagnostics/verify.sh +0 -108
- package/scripts/diagnostics/verify_state.sh +0 -73
- package/scripts/diagnostics/version-locks.sh +0 -94
- package/scripts/diagnostics/workstation-attestation.sh +0 -212
- package/scripts/dot/commands/agent.sh +0 -535
- package/scripts/dot/commands/agents.sh +0 -352
- package/scripts/dot/commands/ai.sh +0 -600
- package/scripts/dot/commands/aliases.sh +0 -277
- package/scripts/dot/commands/appearance.sh +0 -110
- package/scripts/dot/commands/completion.sh +0 -171
- package/scripts/dot/commands/core.sh +0 -217
- package/scripts/dot/commands/diagnostics.sh +0 -265
- package/scripts/dot/commands/env-emit.sh +0 -203
- package/scripts/dot/commands/fleet.sh +0 -711
- package/scripts/dot/commands/init.sh +0 -185
- package/scripts/dot/commands/lint.sh +0 -208
- package/scripts/dot/commands/manual.sh +0 -169
- package/scripts/dot/commands/meta.sh +0 -438
- package/scripts/dot/commands/patterns.sh +0 -55
- package/scripts/dot/commands/registry.sh +0 -455
- package/scripts/dot/commands/restore.sh +0 -232
- package/scripts/dot/commands/secrets.sh +0 -296
- package/scripts/dot/commands/security.sh +0 -102
- package/scripts/dot/commands/tools.sh +0 -570
- package/scripts/dot/data/alias-deprecations.tsv +0 -2
- package/scripts/dot/powershell/Dot.psm1 +0 -319
- package/scripts/fonts/install-nerd-fonts.sh +0 -75
- package/scripts/fonts/patch-fonts.sh +0 -36
- package/scripts/git-hooks/install.sh +0 -12
- package/scripts/git-hooks/pre-commit +0 -12
- package/scripts/git-hooks/pre-commit-audit.sh +0 -146
- package/scripts/git-hooks/pre-push +0 -105
- package/scripts/git-hooks/prepare-commit-msg +0 -29
- package/scripts/lib/secrets_provider.sh +0 -200
- package/scripts/nvim/headless-upgrade.lua +0 -81
- package/scripts/ops/ai-setup.sh +0 -71
- package/scripts/ops/bundle.sh +0 -104
- package/scripts/ops/chaos.sh +0 -50
- package/scripts/ops/chezmoi-apply.sh +0 -333
- package/scripts/ops/chezmoi-diff.sh +0 -16
- package/scripts/ops/chezmoi-remove.sh +0 -46
- package/scripts/ops/chezmoi-update.sh +0 -67
- package/scripts/ops/heal-chezmoi.sh +0 -87
- package/scripts/ops/heal-system.sh +0 -129
- package/scripts/ops/heal-tools.sh +0 -297
- package/scripts/ops/heal.sh +0 -223
- package/scripts/ops/post-apply-repair.sh +0 -107
- package/scripts/ops/prewarm.sh +0 -128
- package/scripts/ops/release.sh +0 -262
- package/scripts/ops/rollback.sh +0 -613
- package/scripts/ops/setup.sh +0 -138
- package/scripts/ops/teleport.sh +0 -34
- package/scripts/qa/check-feature-matrix.sh +0 -296
- package/scripts/qa/check-version-consistency.sh +0 -12
- package/scripts/qa/coverage-baseline.sh +0 -61
- package/scripts/qa/docs-coverage.sh +0 -118
- package/scripts/qa/examples-coverage.sh +0 -94
- package/scripts/qa/powershell-contract.ps1 +0 -95
- package/scripts/qa/reliability-audit.sh +0 -139
- package/scripts/qa/scorecard-snapshot.sh +0 -128
- package/scripts/qa/traceability-coverage.sh +0 -124
- package/scripts/qa/validate-examples.sh +0 -90
- package/scripts/qa/wsl-contract.sh +0 -12
- package/scripts/secrets/age-init.sh +0 -82
- package/scripts/secrets/create-secrets-file.sh +0 -46
- package/scripts/secrets/encrypt-ssh-key.sh +0 -44
- package/scripts/security/backup.sh +0 -58
- package/scripts/security/check-disclosure-key-expiry.sh +0 -111
- package/scripts/security/dns-doh.sh +0 -52
- package/scripts/security/encryption-check.sh +0 -55
- package/scripts/security/enforce-policies.sh +0 -552
- package/scripts/security/firewall.sh +0 -91
- package/scripts/security/lock-configs.sh +0 -67
- package/scripts/security/lock-screen.sh +0 -56
- package/scripts/security/manage-secrets.sh +0 -429
- package/scripts/security/ssh-cert.sh +0 -204
- package/scripts/security/telemetry-kill.sh +0 -51
- package/scripts/security/usb-safety.sh +0 -52
- package/scripts/theme/apply-gnome-theme.sh +0 -333
- package/scripts/theme/extract-heic-frames.sh +0 -115
- package/scripts/theme/extract-theme.py +0 -1020
- package/scripts/theme/install-boot-logo.sh +0 -63
- package/scripts/theme/install-catppuccin-themes.sh +0 -371
- package/scripts/theme/install-cursors.sh +0 -26
- package/scripts/theme/install-file-icons.sh +0 -27
- package/scripts/theme/install-grub-theme.sh +0 -62
- package/scripts/theme/install-lock-icon.sh +0 -31
- package/scripts/theme/merge-wallpaper.sh +0 -146
- package/scripts/theme/rebuild-themes.sh +0 -603
- package/scripts/theme/switch.sh +0 -476
- package/scripts/theme/wallpaper-rotate.sh +0 -137
- package/scripts/theme/wallpaper-sync.sh +0 -690
- package/scripts/tools/cmatrix.sh +0 -22
- package/scripts/tools/detect-collisions.py +0 -103
- package/scripts/tools/emoji-picker.sh +0 -49
- package/scripts/tools/figlet-banner.sh +0 -19
- package/scripts/tools/log-rotate.sh +0 -31
- package/scripts/tools/lolcat-wrap.sh +0 -20
- package/scripts/tools/pipes.sh +0 -49
- package/scripts/tuning/linux.sh +0 -186
- package/scripts/tuning/macos.sh +0 -56
- package/scripts/uninstall.sh +0 -86
- package/scripts/verify-release-versions +0 -156
- package/scripts/version-sync.sh +0 -714
- package/templates/chezmoi-data/geekom-a9.toml.example +0 -21
- package/templates/chezmoi-data/mac-m1.toml.example +0 -16
- package/templates/chezmoi-data/mac-t2-linux.toml.example +0 -21
- package/templates/chezmoi-data/surface-pro-7p.toml.example +0 -21
- package/templates/projects/go/.github/workflows/ci.yml +0 -31
- package/templates/projects/go/README.md +0 -7
- package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +0 -8
- package/templates/projects/go/go.mod +0 -3
- package/templates/projects/go/go.sum +0 -0
- package/templates/projects/molecule/README.md +0 -7
- package/templates/projects/molecule/converge.yml +0 -7
- package/templates/projects/molecule/molecule.yml +0 -16
- package/templates/projects/node/.github/workflows/ci.yml +0 -30
- package/templates/projects/node/README.md +0 -7
- package/templates/projects/node/package-lock.json +0 -12
- package/templates/projects/node/package.json +0 -10
- package/templates/projects/node/src/index.js +0 -3
- package/templates/projects/packer/README.md +0 -15
- package/templates/projects/packer/main.pkr.hcl +0 -15
- package/templates/projects/python/.github/workflows/ci.yml +0 -34
- package/templates/projects/python/README.md +0 -7
- package/templates/projects/python/pyproject.toml +0 -25
- package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +0 -2
- 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
|
-
}
|