{"id":51572067,"url":"https://github.com/jsavyasachi/ai-dotfiles","last_synced_at":"2026-07-10T20:04:29.311Z","repository":{"id":349263763,"uuid":"1201675279","full_name":"jsavyasachi/ai-dotfiles","owner":"jsavyasachi","description":"Cross-machine AI coding settings (Mac + Linux)","archived":false,"fork":false,"pushed_at":"2026-07-02T07:10:48.000Z","size":260,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-02T09:12:03.896Z","etag":null,"topics":["agentic","ai","claude-code","configuration","developer-tools","dotfiles","llm"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jsavyasachi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-05T02:06:19.000Z","updated_at":"2026-07-02T07:10:51.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jsavyasachi/ai-dotfiles","commit_stats":null,"previous_names":["savyasachi16/claude-dotfiles","savyasachi16/ai-dotfiles","jsavyasachi/ai-dotfiles"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jsavyasachi/ai-dotfiles","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsavyasachi%2Fai-dotfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsavyasachi%2Fai-dotfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsavyasachi%2Fai-dotfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsavyasachi%2Fai-dotfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jsavyasachi","download_url":"https://codeload.github.com/jsavyasachi/ai-dotfiles/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsavyasachi%2Fai-dotfiles/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35341786,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-10T02:00:06.465Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agentic","ai","claude-code","configuration","developer-tools","dotfiles","llm"],"created_at":"2026-07-10T20:04:28.630Z","updated_at":"2026-07-10T20:04:29.300Z","avatar_url":"https://github.com/jsavyasachi.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ai-dotfiles\n\nCross-machine, cross-agent AI harness configuration for Claude Code, OpenCode, Gemini CLI, Codex, and Cursor.\n\n## Stack\n\n\u003ca href=\"https://anthropic.com\"\u003e\u003cimg src=\"https://img.shields.io/badge/Claude_Code-7C4DFF?style=flat\u0026logo=anthropic\u0026logoColor=white\" alt=\"Claude Code\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://opencode.ai\"\u003e\u003cimg src=\"https://img.shields.io/badge/OpenCode-000000?style=flat\u0026logo=openai\u0026logoColor=white\" alt=\"OpenCode\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://google.com\"\u003e\u003cimg src=\"https://img.shields.io/badge/Gemini_CLI-4285F4?style=flat\u0026logo=google\u0026logoColor=white\" alt=\"Gemini CLI\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://developers.openai.com/codex\"\u003e\u003cimg src=\"https://img.shields.io/badge/Codex-000000?style=flat\u0026logo=openai\u0026logoColor=white\" alt=\"Codex\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://cursor.com\"\u003e\u003cimg src=\"https://img.shields.io/badge/Cursor-000000?style=flat\u0026logo=cursor\u0026logoColor=white\" alt=\"Cursor\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://www.gnu.org/software/bash/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Bash-4EAA25?style=flat\u0026logo=gnubash\u0026logoColor=white\" alt=\"Bash\" /\u003e\u003c/a\u003e\n\n## Setup\n\n```bash\ngit clone git@github.com:savyasachi16/ai-dotfiles.git ~/projects/ai-dotfiles\ncd ~/projects/ai-dotfiles\nbash setup.sh\n```\n\nIdempotent: safe to re-run after pulling updates.\n\n## What You Get\n\n**Universal instructions**: `instructions/AI.md` is the canonical source. `instructions/{CLAUDE,OPENCODE,GEMINI,AGENTS}.md` are symlinks to it, and `setup.sh` installs those into each agent's home. Cursor consumes `AGENTS.md` per repo; global Cursor User Rules still require a one-time paste into Settings \u003e Rules.\n\n**Cross-agent commands**: canonical `.md` files live in `extensions/commands/`. `setup.sh` installs them in each tool's native shape:\n\n| Agent | Install format |\n|---|---|\n| Claude Code | `~/.claude/commands/\u003cname\u003e.md` symlink |\n| OpenCode | `~/.config/opencode/commands/\u003cname\u003e.md` symlink + generated `skills/\u003cname\u003e/SKILL.md` |\n| Gemini CLI | generated `~/.gemini/commands/\u003cname\u003e.toml` |\n| Codex | generated `~/.codex/skills/\u003cname\u003e/SKILL.md` |\n| Cursor | not global; per-project commands only |\n\n| Command | What it does |\n|---|---|\n| `/handoff` | Seal session into `.ai/journal.md`; append decisions to `AI.md` / `instructions/AI.md` |\n| `/catchup [N]` | Replay last N journal entries + durable decisions |\n| `/commit` | Commit current logical unit (Conventional Commits) |\n| `/push` | Docs/instructions audit then push |\n| `/configure-agents` | Fetch official docs for all 5 tools, propose + apply a cross-agent settings change |\n\n**Cross-agent skills**: first-party skills live in `extensions/skills/\u003cname\u003e/`. `setup.sh` symlinks them into Claude Code, OpenCode, Codex, and Gemini native skill dirs. Cursor has no global skills path.\n\n**Hooks and guardrails**: Claude Code and Codex get a soft dirty-tree Stop hook. Claude Code also gets a PreToolUse reminder before edits to agent config surfaces. Git gets a repo-local pre-commit hook that validates command and skill frontmatter for every agent.\n\n**Status line**: Claude Code and OpenCode get the shared `scripts/statusline-command.sh`; Codex uses the native TUI status-line config in `config/codex.toml.tpl`.\n\n**Session continuity**: downstream repos use untracked `.ai/journal.md` for handoff/catchup state and tracked `AI.md` decisions for durable project policy.\n\n## Repo layout: where to edit what\n\n| You want to change... | Edit this | How it propagates |\n|---|---|---|\n| Universal AI instructions (tone, conventions, decisions) | `instructions/AI.md` | Symlinked as `CLAUDE.md`, `OPENCODE.md`, `GEMINI.md`, `AGENTS.md` (Codex + Cursor share `AGENTS.md`). Cursor's global User Rules need a one-time manual paste into Settings \u003e Rules. |\n| Cross-agent slash commands | `extensions/commands/\u003cname\u003e.md` (YAML frontmatter + Markdown body) | `setup.sh` symlinks to Claude Code/OpenCode, generates `.toml` for Gemini, generates `SKILL.md` for Codex/OpenCode. Cursor commands are per-repo only and not auto-propagated. |\n| Hooks (Claude Code, e.g. Stop, PreToolUse) | `extensions/hooks/\u003cname\u003e.sh` + reference it in `config/settings.json.tpl` | The hooks dir is symlinked to `~/.claude/hooks/`; settings template is rendered to `~/.claude/settings.json` with absolute paths. |\n| Hooks (Codex) | `config/codex.toml.tpl` `[hooks]` block | Merged into `~/.codex/config.toml` inside an `ai-dotfiles managed` block (preserves your other Codex config). |\n| Memory (Claude Code) | `extensions/memory/MEMORY.md` and `extensions/memory/\u003ctopic\u003e.md` | Symlinked into `~/.claude/projects/\u003cencoded-projects-path\u003e/memory/`. |\n| Skills (cross-agent) | `extensions/skills/\u003cname\u003e/SKILL.md` | Whole-dir symlink to `~/.claude/skills/`; per-skill symlink into `~/.config/opencode/skills/`, `~/.codex/skills/`, and `~/.gemini/skills/`. Cursor has no global skills path. Third-party skills installed via `npx skills add` land here too (gitignored by default); first-party skills authored in this repo (e.g. `mermaid/`) are explicitly un-ignored in `.gitignore`. |\n| Per-agent settings (Claude / OpenCode / Codex / Cursor MCP) | `config/settings.json.tpl`, `config/opencode.json.tpl`, `config/codex.toml.tpl`, `config/cursor-mcp.json` | `setup.sh` renders Claude/OpenCode templates with absolute paths, merges Codex config into an `ai-dotfiles managed` block, and copies Cursor MCP config. Use `@@CLAUDE_DIR@@`, `@@OPENCODE_DIR@@`, `@@DOTFILES_DIR@@` placeholders. |\n| Claude plugins to auto-install | `config/plugins.txt` (one plugin id per line) | `setup.sh` calls `claude plugin install` for any plugin not already installed. |\n| Status line | `scripts/statusline-command.sh` | Symlinked to Claude Code and OpenCode. |\n| Stop-hook dirty-tree behavior | `scripts/dirty-tree-check.sh` | Symlinked to `~/.claude/`; Codex references it via absolute path in the merged config block. |\n\nAfter editing any of the above, run `bash setup.sh`. It's idempotent and prints what changed.\n\n## Adding a new agent\n\nCross-agent parity work goes through the `/configure-agents` command, which fetches official docs for all 5 tools before any file is touched. See `instructions/AI.md` `## Cross-agent config` for the canonical mapping.\n\n## Testing\n\n```bash\nmake test   # installer checks\nmake lint   # bash syntax\n```\n\nCI runs both targets on macOS and Linux for every PR and push to `main`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsavyasachi%2Fai-dotfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjsavyasachi%2Fai-dotfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsavyasachi%2Fai-dotfiles/lists"}