Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 13 additions & 4 deletions .claude/hooks/rtk-rewrite.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
# RTK auto-rewrite hook for Claude Code PreToolUse:Bash
# Transparently rewrites raw commands to their rtk equivalents.
# Outputs JSON with updatedInput to modify the command before execution.
# Source of truth: hooks/rtk-rewrite.sh (keep .claude/hooks copy in sync)

# Guards: skip silently if dependencies missing
if ! command -v rtk &>/dev/null || ! command -v jq &>/dev/null; then
Expand Down Expand Up @@ -84,16 +85,24 @@ elif echo "$MATCH_CMD" | grep -qE '^cargo[[:space:]]+check([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^cargo check/rtk cargo check/')"
elif echo "$MATCH_CMD" | grep -qE '^cargo[[:space:]]+install([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^cargo install/rtk cargo install/')"
elif echo "$MATCH_CMD" | grep -qE '^cargo[[:space:]]+nextest([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^cargo nextest/rtk cargo nextest/')"
elif echo "$MATCH_CMD" | grep -qE '^cargo[[:space:]]+fmt([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^cargo fmt/rtk cargo fmt/')"

# --- File operations ---
# Search priority (mandatory): rgai > rg > grep
# Tier 1: semantic intent search (grepai/rgai) -> rtk rgai
# Tier 2: exact search via ripgrep -> rtk grep (rtk grep runs rg -> grep fallback internally)
# Tier 3: exact search via grep -> rtk grep
elif echo "$MATCH_CMD" | grep -qE '^(grepai|rgai)[[:space:]]+search([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed -E 's/^(grepai|rgai)[[:space:]]+search[[:space:]]+/rtk rgai /')"
elif echo "$MATCH_CMD" | grep -qE '^rgai[[:space:]]+'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed -E 's/^rgai[[:space:]]+/rtk rgai /')"
elif echo "$MATCH_CMD" | grep -qE '^cat[[:space:]]+'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^cat /rtk read /')"
elif echo "$MATCH_CMD" | grep -qE '^(rg|grep)[[:space:]]+'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed -E 's/^(rg|grep) /rtk grep /')"
elif echo "$MATCH_CMD" | grep -qE '^rg[[:space:]]+'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed -E 's/^rg /rtk grep /')"
elif echo "$MATCH_CMD" | grep -qE '^grep[[:space:]]+'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed -E 's/^grep /rtk grep /')"
elif echo "$MATCH_CMD" | grep -qE '^ls([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^ls/rtk ls/')"
elif echo "$MATCH_CMD" | grep -qE '^tree([[:space:]]|$)'; then
Expand Down
8 changes: 7 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,10 @@ benchmark-report.md
*.sqlite
*.sqlite3
rtk_tracking.db
claudedocs
claudedocs

# grepai local index (project-specific, not portable)
.grepai/

# Claude Code local settings (user-specific)
.claude/settings.local.json
45 changes: 31 additions & 14 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ Database: ~/.local/share/rtk/history.db

## Module Organization

### Complete Module Map (30 Modules)
### Complete Module Map (49 Modules)

```
┌────────────────────────────────────────────────────────────────────────┐
Expand All @@ -191,11 +191,14 @@ GIT git.rs status, diff, log 85-99% ✓
branch, checkout

CODE SEARCH grep_cmd.rs grep 60-80% ✓
rgai_cmd.rs rgai (semantic) 85% ✓
grepai.rs (grepai delegation) N/A ✓
diff_cmd.rs diff 70-85% ✓
find_cmd.rs find 50-70% ✓

FILE OPS ls.rs ls 50-70% ✓
read.rs read 40-90% ✓
tree.rs (internal for ls) N/A ✓

EXECUTION runner.rs err, test 60-99% ✓
summary.rs smart (heuristic) 50-80% ✓
Expand All @@ -204,51 +207,65 @@ EXECUTION runner.rs err, test 60-99% ✓
LOGS/DATA log_cmd.rs log 70-90% ✓
json_cmd.rs json 80-95% ✓

BUILD cargo_cmd.rs cargo build/test 80-90% ✓

JS/TS STACK lint_cmd.rs lint 84% ✓
tsc_cmd.rs tsc 83% ✓
next_cmd.rs next 87% ✓
prettier_cmd.rs prettier 70% ✓
format_cmd.rs format (black/ruff) 70% ✓
playwright_cmd.rs playwright 94% ✓
prisma_cmd.rs prisma 88% ✓
vitest_cmd.rs vitest 99.5% ✓
pnpm_cmd.rs pnpm 70-90% ✓

CONTAINERS container.rs podman, docker 60-80% ✓

VCS gh_cmd.rs gh 26-87% ✓
npm_cmd.rs npm run, npx 70-80% ✓

PYTHON ruff_cmd.rs ruff check/format 80%+ ✓
pytest_cmd.rs pytest 90%+ ✓
pip_cmd.rs pip list/outdated 70-85% ✓
pip_cmd.rs pip/uv 70-85% ✓

GO go_cmd.rs go test/build/vet 75-90% ✓
GO go_cmd.rs go test/build/vet 80-90% ✓
golangci_cmd.rs golangci-lint 85% ✓

NETWORK wget_cmd.rs wget 85-95% ✓
CONTAINERS container.rs podman, docker 60-80% ✓

VCS gh_cmd.rs gh 26-87% ✓

NETWORK curl_cmd.rs curl 70% ✓
wget_cmd.rs wget 85-95% ✓

DEPENDENCIES deps.rs deps 80-90% ✓

ENVIRONMENT env_cmd.rs env 60-80% ✓

ANALYTICS cc_economics.rs cc-economics N/A ✓
ccusage.rs (internal) N/A ✓
display_helpers.rs (internal) N/A ✓
discover/ discover N/A ✓
learn/ (error learning) N/A ✓

SYSTEM init.rs init N/A ✓
gain.rs gain N/A ✓
config.rs (internal) N/A ✓

SHARED utils.rs Helpers N/A ✓
filter.rs Language filters N/A ✓
tracking.rs Token tracking N/A ✓
parser/ Output parser fwk N/A ✓
rgai_arg_tests (test-only) N/A ✓
```

**Total: 46 modules** (29 command modules + 17 infrastructure modules)
**Total: 49 modules** (33 command modules + 16 infrastructure/internal modules)

### Module Count Breakdown

- **Command Modules**: 29 (directly exposed to users)
- **Infrastructure Modules**: 17 (utils, filter, tracking, config, init, gain, etc.)
- **Command Modules**: 33 (directly exposed to users)
- **Infrastructure Modules**: 16 (utils, filter, tracking, config, init, gain, parser, display, etc.)
- **Git Commands**: 7 operations (status, diff, log, add, commit, push, branch/checkout)
- **JS/TS Tooling**: 8 modules (modern frontend/fullstack development)
- **Python Tooling**: 3 modules (ruff, pytest, pip)
- **Go Tooling**: 2 modules (go test/build/vet, golangci-lint)
- **JS/TS Tooling**: 10 modules (modern frontend/fullstack development)
- **Python Tooling**: 3 modules (ruff, pytest, pip/uv)
- **Go Tooling**: 2 modules (go, golangci-lint)
- **Semantic Search**: 2 modules (rgai_cmd + grepai delegation)

---

Expand Down
13 changes: 12 additions & 1 deletion INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,15 @@ rtk gain # MUST show token savings, not "command not found"

## Project Initialization

### Search Priority

**Search priority: rgai > rg > grep.**

- Use `rtk rgai` first for semantic/intention-based discovery.
- Use `rtk grep` for exact/regex matching.
- `rtk grep` internally follows `rg -> grep` backend fallback.
- For fully raw output, use `rtk proxy <cmd>`.

### Recommended: Global Hook-First Setup

**Best for: All projects, automatic RTK usage**
Expand Down Expand Up @@ -229,7 +238,8 @@ cp ~/.claude/settings.json.bak ~/.claude/settings.json
```bash
rtk ls . # Compact tree view
rtk read file.rs # Optimized reading
rtk grep "pattern" . # Grouped search results
rtk rgai "query" # Semantic code search
rtk grep "pattern" . # Exact/regex search (internal rg -> grep fallback)
```

### Git
Expand Down Expand Up @@ -332,6 +342,7 @@ Before each session:
- [ ] Verify RTK is installed: `rtk --version`
- [ ] If not installed → follow "Install from fork"
- [ ] If project not initialized → `rtk init`
- [ ] Search: use `rtk rgai` first, then `rtk grep` for exact/regex
- [ ] Use `rtk` for ALL git/pnpm/test/vitest commands
- [ ] Check savings: `rtk gain`

Expand Down
21 changes: 20 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,15 @@ With rtk: **~45,000 tokens** → **70% reduction**

> Estimates based on medium-sized TypeScript/Rust projects. Actual savings vary by project size.

## Search Priority

**Search priority: rgai > rg > grep.**

- Use `rtk rgai` first for semantic/intention-based discovery.
- Use `rtk grep` for exact/regex matching.
- `rtk grep` internally follows `rg -> grep` backend fallback.
- For fully raw output, use `rtk proxy <cmd>`.

## Installation

### ⚠️ Pre-Installation Check (REQUIRED)
Expand Down Expand Up @@ -133,7 +142,8 @@ rtk read file.rs # Smart file reading
rtk read file.rs -l aggressive # Signatures only (strips bodies)
rtk smart file.rs # 2-line heuristic code summary
rtk find "*.rs" . # Compact find results
rtk grep "pattern" . # Grouped search results
rtk rgai "auth token refresh" # Semantic code search
rtk grep "pattern" . # Exact/regex search (internal rg -> grep fallback)
```

### Git
Expand Down Expand Up @@ -425,6 +435,11 @@ The most effective way to use rtk is with the **auto-rewrite hook** for Claude C

**Result**: 100% rtk adoption across all conversations and subagents, zero token overhead in Claude's context.

**Search ladder**:
- `rtk rgai` for semantic discovery
- `rtk grep` for exact/regex follow-up (`rg -> grep` fallback)
- `rtk proxy ...` when you need fully raw behavior

### What Are Hooks?

**For Beginners**:
Expand Down Expand Up @@ -516,12 +531,16 @@ The hook is included in this repository at `.claude/hooks/rtk-rewrite.sh`. To us

### Commands Rewritten

Search rewrite order is strict and deterministic: `rgai > rg > grep`.

| Raw Command | Rewritten To |
|-------------|-------------|
| `git status/diff/log/add/commit/push/pull/branch/fetch/stash` | `rtk git ...` |
| `gh pr/issue/run` | `rtk gh ...` |
| `cargo test/build/clippy` | `rtk cargo ...` |
| `cat <file>` | `rtk read <file>` |
| `grepai/rgai search <query>` | `rtk rgai <query>` |
| `rgai <query>` | `rtk rgai <query>` |
| `rg/grep <pattern>` | `rtk grep <pattern>` |
| `ls` | `rtk ls` |
| `vitest/pnpm test` | `rtk vitest run` |
Expand Down
Loading
Loading