{"id":48845266,"url":"https://github.com/cdbattags/ai","last_synced_at":"2026-04-15T05:01:35.916Z","repository":{"id":342131535,"uuid":"1171185150","full_name":"cdbattags/ai","owner":"cdbattags","description":"User \u0026 workspace level rules and skills for consistent AI agent behavior across projects","archived":false,"fork":false,"pushed_at":"2026-03-04T22:29:26.000Z","size":62,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-05T03:40:35.646Z","etag":null,"topics":["ai","ai-agent","cursor","cursor-rules","cursor-skills","developer-tools","dotfiles"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cdbattags.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-03-03T00:44:43.000Z","updated_at":"2026-03-05T02:33:24.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/cdbattags/ai","commit_stats":null,"previous_names":["cdbattags/ai"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/cdbattags/ai","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cdbattags%2Fai","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cdbattags%2Fai/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cdbattags%2Fai/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cdbattags%2Fai/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cdbattags","download_url":"https://codeload.github.com/cdbattags/ai/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cdbattags%2Fai/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31826902,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T18:05:02.291Z","status":"online","status_checked_at":"2026-04-15T02:00:06.175Z","response_time":63,"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":["ai","ai-agent","cursor","cursor-rules","cursor-skills","developer-tools","dotfiles"],"created_at":"2026-04-15T05:01:35.174Z","updated_at":"2026-04-15T05:01:35.910Z","avatar_url":"https://github.com/cdbattags.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ai\n\nUser-level AI agent configuration: [Cursor](https://cursor.com) rules and skills, [Claude Code](https://code.claude.com) config, [OpenCode](https://opencode.ai) config, and composable MCP server profiles. One repo, symlinked everywhere.\n\n## Setup\n\nRequires Node.js 22.6+ (native TypeScript execution).\n\n```bash\ngit clone --recurse-submodules git@github.com:cdbattags/ai.git ~/ai\ncd ~/ai \u0026\u0026 npm install\n\nnode link.ts              # build dist/ + install to ~/\nnode link.ts --dry-run    # preview without changes\n```\n\n## How it works\n\n**`src/`** holds authored content (rules, skills, tool configs, MCP server definitions).\n\n**`vendor/`** holds community repos as git submodules. Cherry-picks are declared in `vendor.json`.\n\n**`dist/\u003cname\u003e/`** is the assembled per-tool tree, built by `link.ts`. Each user gets their own directory (default: `cdbattags`). It contains relative symlinks back to `src/` and `vendor/`; browsing `dist/cdbattags/` on GitHub shows the full resolved config. Forkers can build their own with `--name`.\n\n**`link.ts`** has two phases:\n\n1. **build**: Wipe `dist/\u003cname\u003e/`, recreate symlinks from `src/` + vendor cherry-picks, generate `mcp.json` from profile\n2. **install**: Symlink `dist/\u003cname\u003e/` contents into `~/.cursor/`, `~/.claude/`, `~/.config/opencode/` (or into cwd with `--workspace`)\n\n## Repository layout\n\n```\nsrc/\n  rules/                        Cursor rules (.mdc)\n  skills/                       Cross-tool skills (SKILL.md)\n  cursor/commands/              Cursor-specific commands\n  claude/                       Claude Code config (CLAUDE.md, settings, commands)\n  opencode/                     OpenCode config (opencode.json)\n  mcp/servers/                  Individual MCP server configs\n  mcp/profiles/                 Named sets of servers\n\nvendor/                         Git submodules (community rules/skills)\nvendor.json                     Declares which vendor items to cherry-pick\n\ndist/cdbattags/                 Built output (git-tracked symlinks per tool)\n  cursor/                       -\u003e ~/.cursor/\n  claude/                       -\u003e ~/.claude/\n  opencode/                     -\u003e ~/.config/opencode/\n\nlink.ts                         Build + install script\n```\n\n## Rules\n\n| Rule | What it does |\n|------|-------------|\n| `direnv-shell-bootstrap` | Bootstrap Nix/direnv in non-interactive Cursor shells |\n| `git-commit-confirmation` | Require explicit user approval before every commit |\n| `gh-cli` | Use `gh` CLI instead of raw API calls for GitHub operations |\n| `github-repo-triage` | Conventions for triaging issues/PRs, cherry-picks, releases |\n| `documentation` | README placement and `docs/` folder structure |\n| `markdownlint-compliance` | Keep markdown files lint-clean |\n| `no-sleep-process-monitoring` | Use Shell tool waiting instead of `sleep`/polling |\n| `install-latest-packages` | Always resolve real latest versions when adding dependencies |\n| `deduplicate-rules` | Prevent overlap between user-level and project-level rules |\n| `sandbox-domains` | Network allowlist for Cursor sandbox |\n| `use-trash-not-rm` | Prefer recoverable `trash` over `rm` |\n\n## Skills\n\n| Skill | Source | What it does |\n|-------|--------|-------------|\n| `direnv-shell-commands` | own | Cached direnv/Nix environment for fast shell bootstrap |\n| `find-3d-assets` | own | Find and integrate low-poly 3D models (GLB/GLTF) |\n| `gh-cli` | own | GitHub CLI patterns for PRs, issues, releases, API calls |\n| `github-repo-triage` | own | Full triage, cherry-pick, release, and publishing workflow |\n| `markdownlint-compliance` | own | Auto-fix and manual-fix guidance for markdownlint |\n| `process-monitoring` | own | Wait for processes without `sleep` or polling loops |\n| `submodule-worktree` | own | Manage git worktrees across repos and submodules |\n| `karpathy-guidelines` | vendor | Behavioral guardrails: think first, simplicity, surgical changes |\n| `logging-best-practices` | vendor | Structured logging and wide events (Stripe canonical log lines) |\n| `test-driven-development` | vendor | Red-green-refactor TDD with rationalization rebuttals |\n\n## MCP profiles\n\nCompose per-workspace MCP configs from individual server definitions.\n\n```bash\nnode link.ts build --mcp web        # build with 'web' profile\nnode link.ts build --mcp backend    # build with 'backend' profile\n```\n\n| Profile | Servers |\n|---------|---------|\n| `base` | context7, memory, sequential-thinking, fetch |\n| `web` | base + playwright |\n| `backend` | base + docker, sentry |\n| `full` | all servers |\n\nAvailable servers: `context7`, `docker`, `fetch`, `github`, `memory`, `playwright`, `sequential-thinking`, `sentry`\n\n## Vendor submodules\n\nCommunity rules and skills pulled in as git submodules under `vendor/`. Cherry-picks are declared in `vendor.json`.\n\n| Vendor | Repo | Cherry-picked |\n|--------|------|---------------|\n| hutchic | [hutchic/.cursor](https://github.com/hutchic/.cursor) | karpathy-guidelines, logging-best-practices, test-driven-development |\n| aussiegingersnap | [cursor-skills](https://github.com/aussiegingersnap/cursor-skills) | (available; none selected yet) |\n\nTo cherry-pick a new vendor skill, add it to `vendor.json` and rebuild:\n\n```bash\n# Edit vendor.json, then:\nnode link.ts build\n```\n\n## link.ts\n\n```\nUsage: node link.ts [command] [options]\n       npx @cdbattags/ai [command] [options]\n\nCommands:\n  build               Build dist/\u003cname\u003e/ from src/ + vendor\n  install [tool...]   Symlink dist/\u003cname\u003e/ into ~/ (cursor, claude, opencode, or all)\n  (no command)        Build + install all\n\nOptions:\n  --name NAME         Output directory under dist/ (default: cdbattags)\n  --mcp PROFILE       MCP profile to use (default: base)\n  --workspace         Install into cwd (.cursor/, .claude/) instead of ~/\n  --dry-run           Show what would happen without doing it\n  --clean             Remove installed symlinks\n  -h, --help          Show this help\n```\n\nForkers can build their own dist (gitignored) without touching the tracked one:\n\n```bash\nnode link.ts build --name myname\nnode link.ts install --name myname\n```\n\n### Workspace install (npx)\n\nInstall rules and skills into the current project instead of your home directory:\n\n```bash\nnpx @cdbattags/ai install --workspace               # all tools\nnpx @cdbattags/ai install cursor --workspace         # cursor only\nnpx @cdbattags/ai install --workspace --dry-run      # preview\nnpx @cdbattags/ai install --workspace --clean        # remove\n```\n\nThis creates `.cursor/`, `.claude/`, `.opencode/` in `cwd` with symlinks back\nto the built dist. Useful for per-project overrides or sharing config across a\nteam repo.\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcdbattags%2Fai","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcdbattags%2Fai","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcdbattags%2Fai/lists"}