From odin
Initializes or idempotently updates repo .gitignore using gitignore.io templates for detected languages, AI/IDE patterns, and user-confirmed untracked files from git status.
npx claudepluginhub outlinedriven/odin-claude-plugin --plugin odinThis skill uses the workspace's default tool permissions.
Initialize or idempotently revise the current repo's `.gitignore` — never the global excludesfile.
Initializes .gitignore with exclusion patterns based on detected project technologies via file globs for Node.js, Python, Go, Rust, Java, Docker, Next.js, and more. Use for new repos to exclude artifacts.
Creates or updates .gitignore using git-agent AI, preserving custom rules, handling auth errors with free retry, and showing diff. For initializing or adding ignore rules.
Generates .gitignore files and configurations for DevOps projects including git, docker, and CI/CD setups. Activates automatically on 'gitignore generator' or 'gitignore' phrases.
Share bugs, ideas, or general feedback.
Initialize or idempotently revise the current repo's .gitignore — never the global excludesfile.
Per-repo only. Never read or write ~/.gitignore, ~/.config/git/ignore, or run git config --global. The user's global excludesfile handles cross-machine noise; this skill handles language/tool specifics for the current repo.
references/AI-TOOLING.mdreferences/IDE-EDITOR.mdgit status, confirmed interactivelygit rev-parse --show-toplevel
Abort with a clear error if not inside a git repo.
Read references/LANGUAGE-DETECTION.md for the manifest → gitignore.io key table. Scan manifests:
fd --max-depth 2 -t f
Match filenames against the detection table; build a comma-separated key list (e.g., rust,node,typescript). If no manifests detected, use an empty key list (bundled blocks still apply).
If .gitignore exists, snapshot it before any modification:
cp .gitignore /tmp/gitignore-snapshot-$(date +%s).bak
git status -s -uall | rg '^\?\?' | rg -v '^\?\? \.gitignore'
Cluster untracked paths by top-level directory or extension. Present clusters to the user and wait for explicit confirmation. Do not add any empirical pattern without confirmation.
Run scripts/compose-gitignore.sh <csv> to fetch and merge gitignore.io templates. If the network call fails, tell the user and ask whether to continue with bundled-only mode.
Append the bundled blocks after the API output in order:
# === AI TOOLING ===
<contents of references/AI-TOOLING.md>
# === IDE / EDITOR ===
<contents of references/IDE-EDITOR.md>
# === EMPIRICAL ===
<user-confirmed patterns, one per line>
.gitignore: write the composed output directly..gitignore: merge each # === SECTION === block idempotently — patterns already present in the file are deduplicated (first occurrence wins). Preserve all user content outside section headers. Show the full diff via difft; write only after user confirms.git status -s -uall | rg '^\?\?' | wc -l
Report untracked count before and after. List any paths still untracked so the user can decide whether to add further patterns.
Re-running the skill on a repo where the skill already ran produces no diff. Section headers act as stable merge anchors. User content outside sections is never modified.