Agent skill
srgn-cli
Practical guide for building safe, syntax-aware srgn CLI commands for source-code search and transformation. Use when users ask for srgn commands, scoped refactors (comments/docstrings/imports/functions), multi-file rewrites with --glob, custom tree-sitter query usage, or CI-style checks with --fail-any/--fail-none.
Install this agent skill to your Project
npx add-skill https://github.com/OutlineDriven/odin-claude-plugin/tree/main/skills/srgn-cli
SKILL.md
srgn CLI
Overview
Use this skill to convert user intent into precise srgn commands with safe defaults.
Focus on CLI workflows for search, transformation, scoped migrations, and lint-like checks.
Workflow Decision Tree
- Classify the request.
- Search only: no content changes expected.
- Transform in stream: stdin/stdout pipeline usage.
- Transform files: in-place updates over globs.
- Identify scope strategy.
- Regex scope only.
- Language scope only.
- Combined language + regex scope.
- Custom tree-sitter query scope.
- Identify action strategy.
- Replacement (positional replacement argument after
--). - Composable actions (
--upper,--lower,--titlecase,--normalize,--symbols,--german). - Standalone actions (
-d,-s).
- Replacement (positional replacement argument after
- Apply safety controls.
- Prefer
--dry-runfor file operations. - Keep globs quoted.
- Add
--fail-no-fileswhen missing files should fail CI.
- Prefer
- Choose output mode.
- Human-readable (default tty).
- Machine-readable (
--stdout-detection force-pipe).
- Validate behavior.
- Confirm expected match count.
- Confirm no out-of-scope edits.
- Re-run with stricter scope if needed.
Safety Protocol
- Default to non-destructive behavior first.
- Prefer stdin-based or search-mode examples before in-place rewrites.
- For file edits, require preview path.
- Use
--dry-runfirst. - Then run the same command without
--dry-runonly after confirmation.
- Use
- Protect shell parsing boundaries.
- Quote regex.
- Quote globs:
--glob '**/*.py'. - Use
--before replacement values.
--globaccepts exactly one pattern (cannot repeat).- Glob syntax:
*,?,[...],**only. No{a,b}brace expansion. - For multiple files: broader glob +
--dry-run, or per-file viafd(CWD only—no [path] arg):fd -e <ext> --strip-cwd-prefix -x srgn --glob '{}' --stdin-detection force-unreadable [OPTIONS] [PATTERN]
- Glob syntax:
- Use the narrowest scope that solves the task.
- Prefer language scope + anchored regex over broad regex-only replacement.
- Treat
-dand-sas high-risk operations.- Always provide explicit scope for them.
Command Construction Template
Use this template when building commands:
srgn [LANGUAGE_SCOPE_FLAGS...] [GLOBAL_FLAGS...] [ACTION_FLAGS...] [SCOPE_REGEX] -- [REPLACEMENT]
Build incrementally:
- Scope first.
- Example:
--python 'imports'
- Example:
- Regex filter second.
- Example:
'^old_pkg'
- Example:
- Action third.
- Replacement:
-- 'new_pkg' - Or composable flag:
--upper
- Replacement:
- File mode flags fourth (if needed).
--glob '**/*.py' --dry-run
- CI behavior last.
--fail-anyor--fail-none
High-Value Task Recipes
- Rename module imports in Python only:
srgn --python 'imports' '^old_pkg' --glob '**/*.py' --dry-run -- 'new_pkg'
- Convert
printcalls to logging in Python call-sites only:
srgn --python 'function-calls' '^print$' --glob '**/*.py' --dry-run -- 'logging.info'
- Rename Rust
useprefixes without touching strings/comments:
srgn --rust 'uses' '^good_company' --glob '**/*.rs' --dry-run -- 'better_company'
- Remove C# comments only:
srgn --csharp 'comments' -d '.*'
- Search for Rust
unsafelanguage keyword usage only:
srgn --rust 'unsafe'
- Fail CI if undesirable pattern appears in Python docstrings:
srgn --python 'doc-strings' --fail-any 'param.+type'
- Force machine-readable output for downstream parsers:
srgn --python 'strings' --stdout-detection force-pipe '(foo|bar)'
- Preview multi-file changes with deterministic ordering:
srgn --typescript 'imports' '^legacy-lib' --glob 'src/**/*.ts' --sorted --dry-run -- 'modern-lib'
For broader, categorized examples, load references/cli-cookbook.md.
Failure and Debug Playbook
- No matches when matches are expected.
- Verify language scope and prepared query name.
- Remove regex temporarily to test scope alone.
- Add
--stdout-detection force-pipeto inspect exact matched columns.
- Too many matches.
- Anchor regex (
^...$) where possible. - Narrow from generic language scope to a specific prepared query.
- Anchor regex (
- Wrong files targeted.
- Confirm
--globpattern and shell quoting. - Add
--fail-no-filesin CI to catch empty globs.
- Confirm
--globused multiple times.--globis a single-value argument; cannot repeat.- Broader glob +
--dry-run, or per-file (CWD only—no [path] arg):fd -e <ext> --strip-cwd-prefix -x srgn --glob '{}' --stdin-detection force-unreadable [OPTIONS] [PATTERN]
- Unclear behavior across multiple language scopes.
- Default is intersection (left-to-right narrowing).
- Use
-jfor OR behavior.
- Special characters misinterpreted as regex.
- Use
--literal-stringwhen literal matching is intended.
- Use
Reference Loading Guide
Load reference files based on request type:
references/cli-cookbook.md- Load for routine command construction and practical recipes.
references/language-scopes.md- Load for prepared query selection by language.
references/advanced-patterns.md- Load for custom queries, capture substitutions, join semantics, and CI failure modes.
references/deepwiki-recursive-notes.md- Load for complete DeepWiki-derived background and architecture context.
Intent-to-Command Map
Use this map to respond quickly:
- "Rename imports safely"
- Use language import scope + anchored regex +
--glob ... --dry-run.
- Use language import scope + anchored regex +
- "Update function calls only"
- Use language call-site scope (for example
--python 'function-calls') + exact name regex.
- Use language call-site scope (for example
- "Only comments/docstrings"
- Use prepared comment/docstring scopes, add
-jonly when OR semantics are required.
- Use prepared comment/docstring scopes, add
- "CI should fail if pattern appears"
- Use scoped search +
--fail-any.
- Use scoped search +
- "CI should fail if required pattern is missing"
- Use scoped search +
--fail-none.
- Use scoped search +
- "I need parseable output"
- Use
--stdout-detection force-pipe.
- Use
- "Regex escaping is painful"
- Use
--literal-stringand explicit replacement via--.
- Use
Execution Checklist
Before returning a final command, verify:
- Scope is minimal and syntax-aware where possible.
- Replacement argument is after
--(if replacement is used). - Globs are quoted.
--dry-runis present for file edits unless user requested direct apply.- Join semantics are explicit when multiple language scopes are used (
-jvs default intersect). - Failure flags align with user intent (
--fail-any,--fail-none,--fail-no-files). - Output mode is explicit if user needs machine parsing.
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
refactor-break-bw-compat
Refactor by removing backward compatibility and legacy layers. Use when modernizing APIs, cleaning up migration debt, removing compat shims, or eliminating stale feature flags.
pr-merge-temporal
Merge multiple PRs into a temporal integration branch before merging to base, with ordered conflict resolution. Use when you want to validate a set of PRs together on a staging branch before advancing the base branch.
tests-adversarial
Write adversarial tests that intentionally stress failure paths. Use when hardening error handling, stress-testing assumptions, validating boundary behavior, or hunting silent failures.
askme
Verbalized Sampling (VS) protocol for deep intent exploration before planning. Use when starting ambiguous or complex tasks, when multiple interpretations exist, or when you need to explore diverse intent hypotheses and ask maximum clarifying questions before committing to an approach.
pr-merge-base
Merge one or more PRs into the base branch with queue-like sequencing and conflict resolution. Use when merging PRs that may conflict with each other or the base, requiring ordered application and intelligent conflict handling.
gh-fix-ci
Inspect GitHub PR checks with gh, pull failing GitHub Actions logs, summarize failure context, then create a fix plan and implement after user approval. Use when a user asks to debug or fix failing PR CI/CD checks on GitHub Actions and wants a plan + code changes; for external checks (e.g., Buildkite), only report the details URL and mark them out of scope.
Didn't find tool you were looking for?