Agentic Unix Skills CLI - unified command interface for agent-driven codebase exploration
Project description
AUx CLI
Structured I/O layer for agentic workflows — wraps Unix primitives (rg, fd, git, sed, mv, curl, tree-sitter) as deterministic, schema-driven skills with bounded output.
Installation
# From repo root
./scripts/install.sh
# Verify dependencies
aux doctor
Benchmarks
Across model tiers and task types, aux skills reduce tool calls by 53–93% and tokens by 9–46% while maintaining or improving output quality.
| Task | Skill | Token Δ | Tool call Δ | Notes |
|---|---|---|---|---|
| Codebase discovery | search |
−16 to −36% | −53 to −76% | GPT-5.2, Haiku 4.5 |
| Bulk text replacement | replace |
−46% | −93% | Haiku 4.5; 79 occurrences / 6 files |
| Symbol cross-reference | usages |
−9% | −80% | Haiku 4.5 |
| Dependency graph | deps |
−11% | −80% + accuracy† | Haiku 4.5 |
| Semantic git diff | delta |
+8%‡ | −71% | Haiku 4.5 |
†
aux depsproduced correct coupling values where manual analysis made computation errors. ‡ Benchmark snapshot ran with the historical stat-only fallback (tree-sitter not installed). Tree-sitter is now bundled, so semantic symbol output is the default.
Cross-model: GPT-5.2 Medium + AUx reduces total context cost to ~0.64× baseline. GPT-5.2 Low + AUx achieves comparable quality at ~0.35× baseline cost.
Full methodology: docs/benchmark/
Commands
| Command | Category | Description |
|---|---|---|
files |
read | Enumerate files by name/glob (fd) |
search |
read | Hierarchical pipeline: fd → rg [→ tree-sitter AST] |
find |
read | Tree-sitter AST structural search |
usages |
analysis | Symbol cross-reference: definitions + references |
prune |
analysis | Dead code candidate audit (advisory) |
deps |
analysis | Module dependency graph: coupling, cycles, blast radius |
delta |
analysis | Semantic git diff: files changed + symbols added/removed |
robert |
analysis | Robert C. Martin package design metrics (Go, Python) |
ccx |
analysis | Cyclomatic + Cognitive Complexity per function |
ck |
analysis | Chidamber & Kemerer class metrics (CBO, DIT, NOC, WMC) |
hotspots |
analysis | Growth-weighted complexity hotspots per file |
halstead |
analysis | Halstead Software Science metrics (Volume, Difficulty) |
npath |
analysis | NPATH acyclic execution path count per function |
replace |
write | Bulk fixed-string replacement (dry-run by default) |
rename |
write | Move/rename files or directories (dry-run by default) |
curl |
network | Agent-optimised HTTP fetch with progressive disclosure |
capabilities |
meta | Emit skill registry for agent discovery/routing |
doctor |
— | Verify system dependencies |
Usage
# Help
aux --help
aux search --help
# Get JSON schema for plan-based invocation
aux search --schema
aux replace --schema
# Enumerate files
aux files --root /path --glob "**/*.py"
# Hierarchical search (fd → rg)
aux search --plan '{"root":"/path","surface":{"globs":["**/*.py"]},"search":{"patterns":[{"value":"TODO"}]}}'
# Symbol cross-reference
aux usages DataProcessor --root /path --glob "**/*.py"
# Bulk replacement (dry-run by default — shows preview without mutating files)
aux replace OldClass NewClass --root /path --glob "**/*.py"
# Apply after reviewing dry-run output:
aux replace OldClass NewClass --root /path --glob "**/*.py" --apply
# Agent bootstrap — emit full skill registry
aux capabilities
# System check
aux doctor
Architecture
AUx has two layers:
Kernels — structured I/O wrappers around Unix primitives:
rg → grep_kernel (content search)
fd → find_kernel (file enumeration)
git → delta_kernel (change analysis)
sed → sed_kernel (text replacement)
mv → mv_kernel (filesystem moves)
curl → curl_kernel (HTTP fetch)
tree-sitter → query_kernel (AST queries)
Commands — semantic ontologies built from kernel combinations:
search = find_kernel + grep_kernel [+ query_kernel]
usages = grep_kernel + query_kernel
prune = find_kernel + query_kernel + grep_kernel
delta = delta_kernel [+ query_kernel]
Kernels provide structured I/O over system tools. Commands express user intent as named semantic operations rather than raw tool chains. Same determinism guarantee, higher-level abstraction.
Two invocation modes for every command:
- Simple:
aux search "pattern" --root /path --glob "*.py" - Plan:
aux search --plan '<json>'— accepts a full plan JSON matching the Pydantic schema
commands/<skill>.py → arg parsing, plan construction, output formatting
plans/schemas.py → Pydantic models (SearchPlan, ReplacePlan, ...)
kernels/<skill>.py → deterministic execution
output/ → format_output(), TTY detection, truncation
System Dependencies
| Dependency | Required for |
|---|---|
rg (ripgrep) |
search, usages, prune, replace |
fd / fdfind |
files, search, prune, deps, rename |
git |
delta |
tree-sitter |
find, usages, prune, delta, deps, robert (bundled core dependency) |
httpx |
curl (optional; install aux-skills[curl]) |
Run aux doctor to check availability.
Environment Variables
| Variable | Description | Default |
|---|---|---|
AUX_OUTPUT |
Output format: json, text, summary |
json |
AUX_MAX_MATCHES |
Maximum matches to return | unlimited |
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aux_skills-0.3.0.tar.gz.
File metadata
- Download URL: aux_skills-0.3.0.tar.gz
- Upload date:
- Size: 195.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
872209383f5a7657992505bc5cb6948d4b8907152270aa3d93bb45d9abc95dc3
|
|
| MD5 |
4cc4eb506ac1e56cb52b8456f0db5c11
|
|
| BLAKE2b-256 |
5cbf6211aeb8d8e9bf09a7b2b7487b94ddffd3bcb1f3f1b95c757e783cf6526a
|
Provenance
The following attestation bundles were made for aux_skills-0.3.0.tar.gz:
Publisher:
publish.yml on JordanGunn/aux
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aux_skills-0.3.0.tar.gz -
Subject digest:
872209383f5a7657992505bc5cb6948d4b8907152270aa3d93bb45d9abc95dc3 - Sigstore transparency entry: 1285564284
- Sigstore integration time:
-
Permalink:
JordanGunn/aux@5c8ecb735072b97455bb9f7a94697f688c10881d -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/JordanGunn
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@5c8ecb735072b97455bb9f7a94697f688c10881d -
Trigger Event:
push
-
Statement type:
File details
Details for the file aux_skills-0.3.0-py3-none-any.whl.
File metadata
- Download URL: aux_skills-0.3.0-py3-none-any.whl
- Upload date:
- Size: 123.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5e97c95adea025768940367fed65e8cd87f277b075fd4f70f81aebd680234349
|
|
| MD5 |
b48044c2fabfbc2291f02bdae497fb4b
|
|
| BLAKE2b-256 |
46f9e8667f2827e681fbdaf6ab36da9bdea7cdb5c347a5459e4db997da873210
|
Provenance
The following attestation bundles were made for aux_skills-0.3.0-py3-none-any.whl:
Publisher:
publish.yml on JordanGunn/aux
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aux_skills-0.3.0-py3-none-any.whl -
Subject digest:
5e97c95adea025768940367fed65e8cd87f277b075fd4f70f81aebd680234349 - Sigstore transparency entry: 1285564346
- Sigstore integration time:
-
Permalink:
JordanGunn/aux@5c8ecb735072b97455bb9f7a94697f688c10881d -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/JordanGunn
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@5c8ecb735072b97455bb9f7a94697f688c10881d -
Trigger Event:
push
-
Statement type: