Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
234 commits
Select commit Hold shift + click to select a range
0d2ad03
Merge pull request #6 from FlorianBruniaux/feat/pnpm-support
pszymkowiak Jan 28, 2026
1f0a068
Merge pull request #7 from FlorianBruniaux/feat/vitest-support
pszymkowiak Jan 28, 2026
7da4a93
chore: bump version to 0.2.1 and trigger release on master push
pszymkowiak Jan 24, 2026
c9f2805
feat: add chaining instructions to init command
pszymkowiak Jan 24, 2026
ba644cf
adding in readme exemple of multiple days sessions
pszymkowiak Jan 26, 2026
1384ea7
correcting ls bug
pszymkowiak Jan 28, 2026
c5d8f4e
adding benchmark
pszymkowiak Jan 28, 2026
e9df5c0
Merge pull request #1 from pszymkowiak/feature/v0.2.1
pszymkowiak Jan 28, 2026
7ed2d0f
Merge branch 'master' into docs/installation-guide
pszymkowiak Jan 28, 2026
2fd752c
Merge pull request #8 from FlorianBruniaux/docs/installation-guide
pszymkowiak Jan 28, 2026
7161795
feat: add shared utils module for JS stack commands
FlorianBruniaux Jan 29, 2026
7d33a5e
feat: add modern JavaScript tooling support
FlorianBruniaux Jan 29, 2026
38b57b2
docs: add CHANGELOG for modern JS tooling
FlorianBruniaux Jan 29, 2026
1a5cc72
feat: add Modern JS Stack commands to benchmark script
FlorianBruniaux Jan 29, 2026
2813b40
feat: add --quota flag to rtk gain with tier-based analysis
FlorianBruniaux Jan 29, 2026
2464758
Merge pull request #9 from FlorianBruniaux/feat/modern-js-stack
pszymkowiak Jan 29, 2026
1fd8358
feat: add GitHub CLI integration with token optimizations
FlorianBruniaux Jan 29, 2026
4c8ca46
docs: update CLAUDE.md with PR #9 features
FlorianBruniaux Jan 29, 2026
ae20700
fix(ci): correct rust-toolchain action name
FlorianBruniaux Jan 29, 2026
1f05529
Merge pull request #10 from FlorianBruniaux/feat/github-cli
pszymkowiak Jan 29, 2026
0d5c607
Merge pull request #11 from FlorianBruniaux/feat/quota-analysis
pszymkowiak Jan 29, 2026
21a085e
feat: add CI/CD automation (release management and automated metrics)
FlorianBruniaux Jan 29, 2026
bfffe65
Merge pull request #12 from FlorianBruniaux/feat/all-features
pszymkowiak Jan 29, 2026
15f7c1f
chore(master): release 0.3.0
github-actions[bot] Jan 29, 2026
b53a018
Merge pull request #13 from pszymkowiak/release-please--branches--mas…
pszymkowiak Jan 29, 2026
92ef345
fix: improve command robustness and flag support
FlorianBruniaux Jan 29, 2026
1967a4c
Merge pull request #14 from FlorianBruniaux/fix/critical-command-bugs
pszymkowiak Jan 29, 2026
f030270
chore(master): release 0.3.1
github-actions[bot] Jan 29, 2026
88f777b
Merge pull request #15 from pszymkowiak/release-please--branches--mas…
pszymkowiak Jan 29, 2026
86922f8
docs: add comprehensive ARCHITECTURE.md v2.0
FlorianBruniaux Jan 29, 2026
fe8b82b
Merge pull request #16 from FlorianBruniaux/docs/architecture-v2
pszymkowiak Jan 29, 2026
62fb55b
docs: comprehensive documentation update for v0.3.1
FlorianBruniaux Jan 30, 2026
a690bb1
Merge pull request #17 from FlorianBruniaux/docs/comprehensive-update
pszymkowiak Jan 30, 2026
0453b90
ci: automate 'latest' tag update on releases
FlorianBruniaux Jan 30, 2026
361b993
Merge pull request #18 from FlorianBruniaux/feature/auto-latest-tag
pszymkowiak Jan 30, 2026
adc8453
feat: add comprehensive temporal audit system for token savings analy…
FlorianBruniaux Jan 30, 2026
0d201cf
Merge pull request #19 from FlorianBruniaux/feature/temporal-audit-sy…
pszymkowiak Jan 30, 2026
abb29a5
chore(master): release 0.4.0
github-actions[bot] Jan 30, 2026
d5b5c5c
Merge pull request #20 from pszymkowiak/release-please--branches--mas…
pszymkowiak Jan 30, 2026
641171e
feat: add comprehensive claude code economics analysis
FlorianBruniaux Jan 30, 2026
54fc1f5
fix: comprehensive code quality improvements
FlorianBruniaux Jan 30, 2026
1394c46
fix: optimize HashMap merge and add safety checks
FlorianBruniaux Jan 30, 2026
f640db6
Merge pull request #21 from FlorianBruniaux/feature/temporal-audit-sy…
pszymkowiak Jan 30, 2026
db17eb8
chore(master): release 0.5.0
github-actions[bot] Jan 30, 2026
ca9c878
Merge pull request #22 from pszymkowiak/release-please--branches--mas…
pszymkowiak Jan 30, 2026
39a7b65
fix: patrick's 3 issues (latest tag, ccusage fallback, versioning)
FlorianBruniaux Jan 30, 2026
c4c06f4
Merge pull request #23 from FlorianBruniaux/master
pszymkowiak Jan 30, 2026
05ffd88
chore(master): release 0.5.1
github-actions[bot] Jan 30, 2026
2d62b84
Merge pull request #24 from pszymkowiak/release-please--branches--mas…
pszymkowiak Jan 30, 2026
3cd2342
fix: release pipeline trigger and version-agnostic package URLs
FlorianBruniaux Jan 30, 2026
c7e049b
Merge pull request #25 from FlorianBruniaux/fix/release-pipeline
pszymkowiak Jan 30, 2026
ba23af7
chore(master): release 0.5.2
github-actions[bot] Jan 30, 2026
87c7a2d
Merge pull request #26 from pszymkowiak/release-please--branches--mas…
pszymkowiak Jan 30, 2026
37750a8
feat: shared infrastructure for new commands
FlorianBruniaux Jan 31, 2026
0033da2
feat: cargo build/test/clippy with compact output
FlorianBruniaux Jan 31, 2026
e089a27
feat: git branch, fetch, stash, worktree commands
FlorianBruniaux Jan 31, 2026
734d510
feat: gh pr create/merge/diff/comment/edit + gh api
FlorianBruniaux Jan 31, 2026
181e32e
feat: npm/npx routing, pnpm build/typecheck, --skip-env flag
FlorianBruniaux Jan 31, 2026
7476bef
feat: curl with auto-JSON detection
FlorianBruniaux Jan 31, 2026
fb24699
Merge pull request #28 from FlorianBruniaux/feat/shared-infra
pszymkowiak Feb 1, 2026
e3bdfd1
Merge pull request #29 from FlorianBruniaux/feat/cargo-commands
pszymkowiak Feb 1, 2026
743e50f
Merge pull request #30 from FlorianBruniaux/feat/git-extensions
pszymkowiak Feb 1, 2026
5ab3269
Merge pull request #31 from FlorianBruniaux/feat/gh-expansion
pszymkowiak Feb 1, 2026
11c64fd
Merge pull request #32 from FlorianBruniaux/feat/js-ecosystem
pszymkowiak Feb 1, 2026
4b31f68
Merge pull request #33 from FlorianBruniaux/feat/curl-command
pszymkowiak Feb 1, 2026
d991a21
chore(master): release 0.6.0
github-actions[bot] Feb 1, 2026
caf1085
Add TDD skill, fix 3 failing tests, add 17 diff_cmd tests
FlorianBruniaux Feb 1, 2026
b763298
Merge pull request #35 from FlorianBruniaux/feat/tdd-testing-skill
pszymkowiak Feb 1, 2026
c222c20
Merge pull request #34 from pszymkowiak/release-please--branches--mas…
pszymkowiak Feb 1, 2026
0148fe0
feat: add discover command, auto-rewrite hook, and git show support
FlorianBruniaux Feb 1, 2026
c2650cf
fix: forward args in rtk git push/pull to support -u, remote, branch
FlorianBruniaux Feb 1, 2026
8ce46f2
Merge pull request #36 from FlorianBruniaux/feat/git-show
pszymkowiak Feb 1, 2026
4bfac53
chore(master): release 0.7.0
github-actions[bot] Feb 1, 2026
6f99311
Merge pull request #37 from pszymkowiak/release-please--branches--mas…
pszymkowiak Feb 1, 2026
5ae4b2f
fix: convert rtk ls from reimplementation to native proxy
FlorianBruniaux Feb 1, 2026
2a199fb
Merge pull request #38 from FlorianBruniaux/fix/ls-native-proxy
pszymkowiak Feb 1, 2026
edaca71
fix: trigger release build after release-please creates tag
FlorianBruniaux Feb 1, 2026
5f7e1ae
chore: set version to 0.7.1 (skip unintended 1.0.0 bump)
FlorianBruniaux Feb 1, 2026
d1ed572
feat: add execution time tracking to rtk gain analytics
FlorianBruniaux Feb 1, 2026
a31183a
docs: add execution time tracking test guide
FlorianBruniaux Feb 1, 2026
1757b62
Merge pull request #40 from FlorianBruniaux/fix/release-workflow-trigger
pszymkowiak Feb 2, 2026
9201a25
Merge pull request #42 from FlorianBruniaux/feat/execution-time-tracking
pszymkowiak Feb 2, 2026
96184b3
feat: add local LLM analysis, filter improvements, and testing scripts
FlorianBruniaux Feb 1, 2026
ac786d7
feat: add JSON parsing with safe fallbacks for vitest, playwright, pnpm
FlorianBruniaux Feb 1, 2026
a9bfa59
feat: add parser infrastructure with three-tier fallback system
FlorianBruniaux Feb 1, 2026
3603b45
feat: migrate vitest, playwright, pnpm to OutputParser trait
FlorianBruniaux Feb 2, 2026
aec0d00
Merge pull request #43 from FlorianBruniaux/feat/git-show
pszymkowiak Feb 2, 2026
50fb431
Merge pull request #41 from FlorianBruniaux/fix/release-manifest-version
pszymkowiak Feb 2, 2026
4ba5125
docs: document execution time tracking feature in v0.7.1
FlorianBruniaux Feb 2, 2026
1e072e9
Merge pull request #44 from FlorianBruniaux/docs/execution-time-track…
pszymkowiak Feb 2, 2026
eeb368a
feat: add comprehensive security review workflow for PRs
FlorianBruniaux Feb 2, 2026
480da90
docs: document security review workflow and /rtk-pr-security skill
FlorianBruniaux Feb 2, 2026
201f656
Merge pull request #46 from FlorianBruniaux/feat/security-review-work…
pszymkowiak Feb 2, 2026
0ffdff7
chore(master): release 0.8.0
github-actions[bot] Feb 2, 2026
90414cb
Merge pull request #47 from rtk-ai/release-please--branches--master--…
pszymkowiak Feb 2, 2026
c6d5cb9
docs: clarify rtk name collision and fix installation confusion
FlorianBruniaux Feb 2, 2026
b8aa986
Merge pull request #48 from FlorianBruniaux/docs/fix-name-collision-c…
pszymkowiak Feb 2, 2026
30a394e
fix: allow git status to accept native flags
FlorianBruniaux Feb 2, 2026
aa84395
Merge pull request #49 from FlorianBruniaux/fix/git-status-accept-flags
pszymkowiak Feb 2, 2026
89878cc
chore(master): release 0.8.1
github-actions[bot] Feb 2, 2026
3c250a0
Merge pull request #50 from rtk-ai/release-please--branches--master--…
pszymkowiak Feb 2, 2026
c569faf
docs: add suggest hook pattern + fix discover issues URL
FlorianBruniaux Feb 2, 2026
953bc15
Merge pull request #51 from FlorianBruniaux/docs/suggest-hook-pattern
pszymkowiak Feb 2, 2026
dcec70e
docs: point all documentation to upstream instead of fork
FlorianBruniaux Feb 2, 2026
6806d7e
Update installation script URLs to new repository
pszymkowiak Feb 2, 2026
f65902c
Fix installation script URL and update project info
pszymkowiak Feb 2, 2026
47b8bf8
Update name collision warning in CLAUDE.md
pszymkowiak Feb 2, 2026
0df7f78
Fix repository link in INSTALL.md
pszymkowiak Feb 2, 2026
bc16a4f
Update README.md
pszymkowiak Feb 2, 2026
11ceca7
Revise RTK roadmap for clarity and updated goals
pszymkowiak Feb 2, 2026
fe5c8a9
Merge pull request #52 from FlorianBruniaux/docs/point-to-upstream
pszymkowiak Feb 2, 2026
6a27406
feat: add rtk tree + fix rtk ls + audit phase 1-2
FlorianBruniaux Feb 2, 2026
43c2249
chore: untrack claudedocs files (keep local)
FlorianBruniaux Feb 2, 2026
685e5a1
feat(git): add fallback passthrough for unsupported subcommands
FlorianBruniaux Feb 2, 2026
daf85d2
feat(pnpm): add fallback passthrough for unsupported subcommands
FlorianBruniaux Feb 2, 2026
b7957c6
feat(grep): add extra args passthrough (-i, -A/-B/-C, etc.)
FlorianBruniaux Feb 2, 2026
d453579
feat(read): add stdin support via "-" path
FlorianBruniaux Feb 2, 2026
beea4f0
chore: trigger CI
FlorianBruniaux Feb 3, 2026
3bcde11
Fix install script URL
LivioGama Feb 3, 2026
d05038b
Fix global init path and append behavior
LivioGama Feb 3, 2026
7d9b571
feat: audit phase 3 + tracking validation + rtk learn
FlorianBruniaux Feb 3, 2026
a62e422
docs(tracking): complete API documentation + rustdoc comments
FlorianBruniaux Feb 3, 2026
54a84ef
fix(docs): escape HTML tags in rustdoc comments
FlorianBruniaux Feb 3, 2026
e08104e
fix(find): rewrite with ignore crate + fix json stdin + benchmark pip…
pszymkowiak Feb 3, 2026
62aa1c0
chore: cleanup diff references, fix docker ps, widen diff truncation
pszymkowiak Feb 3, 2026
8e83e3c
fix(ls): compact output (-72% tokens) + fix discover panic
pszymkowiak Feb 3, 2026
56621f0
Merge pull request #53 from FlorianBruniaux/feat/rtk-tree-clean
pszymkowiak Feb 3, 2026
093cf60
chore(master): release 0.9.0
github-actions[bot] Feb 3, 2026
4db95dd
Merge pull request #56 from rtk-ai/release-please--branches--master--…
pszymkowiak Feb 3, 2026
cb42b31
Merge pull request #54 from LivioGama/master
pszymkowiak Feb 3, 2026
dee689f
Merge pull request #55 from LivioGama/fix/rtk-init-global-path
pszymkowiak Feb 3, 2026
71b0d41
fix(tsc): show every TypeScript error instead of collapsing by code
FlorianBruniaux Feb 4, 2026
65ddd3d
Merge pull request #57 from FlorianBruniaux/fix/rtk-tsc-show-all-errors
pszymkowiak Feb 4, 2026
6c25b99
chore(master): release 0.9.1
github-actions[bot] Feb 4, 2026
9795b94
Merge pull request #58 from rtk-ai/release-please--branches--master--…
pszymkowiak Feb 4, 2026
028274a
fix(git): accept native git flags in add command (including -A)
FlorianBruniaux Feb 4, 2026
7883944
Merge pull request #59 from FlorianBruniaux/fix/git-add-native-flags
pszymkowiak Feb 5, 2026
facab26
chore(master): release 0.9.2
github-actions[bot] Feb 5, 2026
8191cab
Merge pull request #60 from rtk-ai/release-please--branches--master--…
pszymkowiak Feb 5, 2026
df2668f
fix: P0 crashes + cargo check + dedup utilities + discover status
FlorianBruniaux Feb 6, 2026
196ce3b
Merge pull request #61 from FlorianBruniaux/fix/crashes-check-dedup-d…
pszymkowiak Feb 6, 2026
192e9cc
chore(master): release 0.9.3
github-actions[bot] Feb 6, 2026
04bdf41
Merge pull request #62 from rtk-ai/release-please--branches--master--…
pszymkowiak Feb 6, 2026
1761299
fix(discover): add cargo check support, wire RtkStatus::Passthrough, …
FlorianBruniaux Feb 6, 2026
624dd7c
Merge pull request #63 from FlorianBruniaux/fix/discover-cargo-check-…
pszymkowiak Feb 6, 2026
020ebbd
chore(master): release 0.9.4
github-actions[bot] Feb 6, 2026
ce01c0c
Merge pull request #64 from rtk-ai/release-please--branches--master--…
pszymkowiak Feb 6, 2026
45ac16a
feat(init): refactor to hook-first with slim RTK.md
FlorianBruniaux Feb 7, 2026
133c472
refactor(init): eliminate DRY violations and improve error handling
FlorianBruniaux Feb 7, 2026
e8ad908
docs: update for hook-first installation mode
FlorianBruniaux Feb 7, 2026
fe35436
feat(init): auto-patch settings.json for frictionless hook installation
FlorianBruniaux Feb 7, 2026
5472f82
Merge pull request #65 from FlorianBruniaux/master
pszymkowiak Feb 7, 2026
2330ced
chore(master): release 0.10.0
github-actions[bot] Feb 7, 2026
41860e7
Merge pull request #67 from rtk-ai/release-please--branches--master--…
pszymkowiak Feb 7, 2026
2f2b046
Merge branch 'master' into feat/auto-patch-settings-json
pszymkowiak Feb 7, 2026
db8fcf9
Merge pull request #66 from FlorianBruniaux/feat/auto-patch-settings-…
pszymkowiak Feb 7, 2026
4b59fc7
chore(master): release 0.11.0
github-actions[bot] Feb 7, 2026
c34763f
Merge pull request #68 from rtk-ai/release-please--branches--master--…
pszymkowiak Feb 7, 2026
3517512
feat(cargo): add `cargo install` filtering with 80-90% token reduction
FlorianBruniaux Feb 8, 2026
3beb2bc
Merge pull request #70 from FlorianBruniaux/feat/cargo-install-filtering
pszymkowiak Feb 9, 2026
71eb4c3
chore(master): release 0.12.0
github-actions[bot] Feb 9, 2026
97c80ba
Merge pull request #71 from rtk-ai/release-please--branches--master--…
pszymkowiak Feb 9, 2026
6cfcfac
feat(sqlite): add custom sqlite db location
Feb 10, 2026
7cf365c
Merge pull request #72 from agregio-solutions/feat/configurable-db-path
pszymkowiak Feb 12, 2026
194aee1
chore(master): release 0.13.0
github-actions[bot] Feb 12, 2026
6242661
Merge pull request #74 from rtk-ai/release-please--branches--master--…
pszymkowiak Feb 12, 2026
0bef421
fix(ci): fix release workflow not uploading artifacts to GitHub releases
pszymkowiak Feb 12, 2026
c193b0a
Merge pull request #75 from rtk-ai/fix/release-workflow-73
pszymkowiak Feb 12, 2026
7ff588f
chore(master): release 0.13.1
github-actions[bot] Feb 12, 2026
c84d93e
Merge pull request #76 from rtk-ai/release-please--branches--master--…
pszymkowiak Feb 12, 2026
df71cd3
fix: update stale repo URLs from pszymkowiak/rtk to rtk-ai/rtk (#78)
pszymkowiak Feb 12, 2026
22ff280
feat(ci): automate Homebrew formula update on release (#80)
pszymkowiak Feb 12, 2026
61a16db
fix: add website URL (rtk-ai.app) across project metadata (#81)
pszymkowiak Feb 12, 2026
4a6e35f
chore(master): release 0.14.0 (#79)
github-actions[bot] Feb 12, 2026
4edc2f7
feat(cargo): aggregate test output into single line (#83)
FlorianBruniaux Feb 12, 2026
e100e37
feat(cargo): aggregate test output into single line (#83) (#85)
FlorianBruniaux Feb 12, 2026
5c87b92
feat: add Python and Go support (#88)
FlorianBruniaux Feb 12, 2026
50a7ba3
feat: make install-local.sh self-contained (#89)
mhcoen Feb 12, 2026
27033f9
chore(master): release 0.15.0 (#90)
github-actions[bot] Feb 12, 2026
6dda3f7
fix(vitest): robust JSON extraction for pnpm/dotenv prefixes (#92)
FlorianBruniaux Feb 12, 2026
367e2b2
fix: improve CI reliability and hook coverage (#95)
FlorianBruniaux Feb 12, 2026
30442dd
chore(master): release 0.15.1 (#96)
github-actions[bot] Feb 12, 2026
891b310
feat: add Python and Go support (#88)
FlorianBruniaux Feb 12, 2026
5d47034
feat: make install-local.sh self-contained (#89)
mhcoen Feb 12, 2026
a7c80aa
chore(master): release 0.15.0 (#90)
github-actions[bot] Feb 12, 2026
49f7a2e
fix(vitest): robust JSON extraction for pnpm/dotenv prefixes (#92)
FlorianBruniaux Feb 12, 2026
f7ec5cd
fix: improve CI reliability and hook coverage (#95)
FlorianBruniaux Feb 12, 2026
e0a2a28
chore(master): release 0.15.1 (#96)
github-actions[bot] Feb 12, 2026
ba41c0c
docs: comprehensive v0.15.1 documentation update for Python/Go support
FlorianBruniaux Feb 13, 2026
20e10d8
fix(hook): use POSIX character classes for cross-platform grep compat…
mhcoen Feb 13, 2026
3234013
chore(master): release 0.15.2 (#104)
github-actions[bot] Feb 13, 2026
9fb840d
fix: prevent UTF-8 panics on multi-byte characters (#93)
polaminggkub-debug Feb 13, 2026
ce1e335
chore(master): release 0.15.3 (#108)
github-actions[bot] Feb 13, 2026
394b99e
improve: hook coverage from 0.2% to ~80% with env prefix stripping (#97)
polaminggkub-debug Feb 13, 2026
1d80de2
fix(git): fix for issue #82
ChrisGVE Feb 14, 2026
7a6e59d
Merge pull request #116 from ChrisGVE/master
FlorianBruniaux Feb 14, 2026
9affc95
chore(master): release 0.15.4 (#120)
github-actions[bot] Feb 14, 2026
95f795c
feat(python): add lint dispatcher + universal format command (#100)
FlorianBruniaux Feb 14, 2026
a134fe5
chore(master): release 0.16.0 (#121)
github-actions[bot] Feb 14, 2026
292d5c7
Merge branch 'master' into docs/v0.15.1-python-go-complete
FlorianBruniaux Feb 14, 2026
9324f4c
feat(hook): handle global options before subcommands (#99)
mhcoen Feb 15, 2026
1363981
feat(cargo): add cargo nextest support with failures-only output (#107)
ilaborie Feb 15, 2026
352d172
refactor(init): add upsert_rtk_block for idempotent CLAUDE.md managem…
heAdz0r Feb 15, 2026
6ae0a14
chore(master): release 0.17.0 (#126)
github-actions[bot] Feb 15, 2026
40600dd
feat(gain): colored dashboard with efficiency meter and impact bars (…
heAdz0r Feb 15, 2026
fe3b39a
chore(master): release 0.18.0 (#132)
github-actions[bot] Feb 15, 2026
46bacc1
fix: update version references to 0.16.0 in README.md and CLAUDE.md
FlorianBruniaux Feb 15, 2026
7225605
Merge remote-tracking branch 'origin/master' into docs/v0.15.1-python…
FlorianBruniaux Feb 15, 2026
64c7932
fix: update version references to 0.18.0 in docs
FlorianBruniaux Feb 15, 2026
cf78a04
fix: update ARCHITECTURE.md version to 0.18.0
FlorianBruniaux Feb 15, 2026
4b04389
Merge pull request #102 from FlorianBruniaux/docs/v0.15.1-python-go-c…
FlorianBruniaux Feb 15, 2026
254c21f
chore(master): release 0.18.1 (#133)
github-actions[bot] Feb 16, 2026
d8b5bb0
chore: add Claude Code agents, commands, skills, hooks and rules
FlorianBruniaux Feb 16, 2026
27c6daa
fix: update README.md version to 0.18.1
FlorianBruniaux Feb 16, 2026
b6137e5
feat: add /repo-recap skill for PR/issue/release summaries
FlorianBruniaux Feb 16, 2026
7518d1f
fix: update CLAUDE.md version to 0.18.1
FlorianBruniaux Feb 16, 2026
24c03c6
feat: tee raw output to file for LLM re-read without re-run (#134)
FlorianBruniaux Feb 16, 2026
e0cd87f
chore(master): release 0.19.0 (#148)
github-actions[bot] Feb 16, 2026
81c835d
Merge pull request #144 from rtk-ai/chore/claude-config
FlorianBruniaux Feb 16, 2026
0b0071d
feat: add hook audit mode for verifiable rewrite metrics (#151)
FlorianBruniaux Feb 16, 2026
7efe55d
feat: add Rust-based hook engine with chained command rewriting
ahundt Feb 16, 2026
17ba68f
fix(hook): add lexer integration and route single commands to rtk sub…
ahundt Feb 19, 2026
a2fc0b9
registry.rs,hook.rs: remove no-op route, fix fallback tests
ahundt Feb 19, 2026
608ca6f
registry.rs,hook.rs: add missing routing test coverage from main branch
ahundt Feb 19, 2026
2e09a7a
hook.rs: add e2e token savings tests for git status, ls, git log
ahundt Feb 19, 2026
21b03b8
feat(stream): port streaming pipeline + pipe filter to hooks-v2
ahundt Feb 21, 2026
4a381a6
test(shell): add redirect/pipe suffix coverage for lexer and analysis
ahundt Feb 21, 2026
f79a313
feat(hook): env-prefix routing + suffix-aware RTK filter preservation
ahundt Feb 21, 2026
025f3f3
fix(lexer): treat \$SIMPLE_VAR as Arg, not Shellism
ahundt Feb 21, 2026
ba67fce
feat(hook): substitute RTK commands inside multi-command chains
ahundt Feb 21, 2026
4faf929
feat(hook): add FORMAT_PRESERVING and TRANSPARENT_SINKS classificatio…
ahundt Feb 21, 2026
9294bb1
fix(hook): pnpm eslint routing + remove personal path + fix cd comment
ahundt Feb 22, 2026
6c0dfea
Merge remote-tracking branch 'upstream/master' into feat/rust-hooks-v2
ahundt Feb 23, 2026
670cd3f
feat: add Gemini CLI hook support
ahundt Feb 17, 2026
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
330 changes: 269 additions & 61 deletions Cargo.lock

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ rusqlite = { version = "0.31", features = ["bundled"] }
toml = "0.8"
chrono = "0.4"
thiserror = "1.0"
which = "7"
tempfile = "3"

[dev-dependencies]
Expand Down
31 changes: 31 additions & 0 deletions INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,37 @@ rtk init # Creates ./CLAUDE.md with full RTK instructions (137 lines)

**Token savings**: Instructions loaded only for this project

### Gemini CLI Setup

**Best for: Gemini CLI users wanting the same token optimization**

```bash
rtk init --gemini
# → Registers "rtk hook gemini" in ~/.gemini/settings.json
# → Prompts: "Patch settings.json? [y/N]"
# → If yes: patches + creates backup (~/.gemini/settings.json.bak)

# Automated alternatives:
rtk init --gemini --auto-patch # Patch without prompting
rtk init --gemini --no-patch # Print manual instructions instead

# Verify installation
rtk init --show # Shows both Claude and Gemini hook status
```

**Manual setup** (if `rtk init --gemini` isn't available):
```json
// Add to ~/.gemini/settings.json
{
"hooks": {
"BeforeTool": [{
"matcher": "run_shell_command",
"hooks": [{ "type": "command", "command": "rtk hook gemini" }]
}]
}
}
```

### Upgrading from Previous Version

If you previously used `rtk init -g` with the old system (137-line injection):
Expand Down
70 changes: 66 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

[Website](https://www.rtk-ai.app) | [GitHub](https://github.com/rtk-ai/rtk) | [Install](INSTALL.md)

rtk filters and compresses command outputs before they reach your LLM context, saving 60-90% of tokens on common operations.
rtk filters and compresses command outputs before they reach your LLM context, saving 60-90% of tokens on common operations. Works with **Claude Code** and **Gemini CLI**.

## ⚠️ Important: Name Collision Warning

Expand Down Expand Up @@ -684,19 +684,81 @@ chmod +x ~/.claude/hooks/rtk-suggest.sh

The suggest hook detects the same commands as the rewrite hook but outputs a `systemMessage` instead of `updatedInput`, informing Claude Code that an rtk alternative exists.

## Gemini CLI Integration

RTK also supports [Gemini CLI](https://github.com/google-gemini/gemini-cli) via its **BeforeTool** hook protocol. The same safety engine that powers the Claude Code hook is used for Gemini, providing consistent command rewriting and blocking across both agents.

### Quick Install (Automated)

```bash
rtk init --gemini
# → Patches ~/.gemini/settings.json with BeforeTool hook
# → Prompts: "Patch settings.json? [y/N]"
# → Creates backup (~/.gemini/settings.json.bak) if file exists

# Options:
rtk init --gemini --auto-patch # Patch without prompting (CI/CD)
rtk init --gemini --no-patch # Skip patching, print manual JSON snippet

# Verify installation
rtk init --show
```

### Manual Install

Add the following to `~/.gemini/settings.json`:

```json
{
"hooks": {
"BeforeTool": [
{
"matcher": "run_shell_command",
"hooks": [
{
"type": "command",
"command": "rtk hook gemini"
}
]
}
]
}
}
```

### How It Works

When Gemini CLI is about to execute a shell command, it sends a JSON payload to `rtk hook gemini` on stdin. RTK's safety engine evaluates the command and responds with:

- **Allow + rewrite**: Rewrites the command to its `rtk run -c '...'` equivalent
- **Block**: Returns `"deny"` with a reason explaining which native tool to use instead
- **Passthrough**: Commands already using `rtk` pass through unchanged

The `matcher` field (`run_shell_command`) identifies Gemini's shell execution tool (analogous to Claude Code's `Bash` matcher). Non-shell tool events pass through without inspection.

### Uninstalling Gemini Hook

```bash
rtk init --gemini --uninstall
# → Removes RTK hook entry from ~/.gemini/settings.json
# → Preserves other hooks and settings
```

The global `rtk init -g --uninstall` also removes Gemini hooks alongside Claude Code hooks.

## Uninstalling RTK

**Complete Removal (Global Only)**:
```bash
rtk init -g --uninstall

# Removes:
# - ~/.claude/hooks/rtk-rewrite.sh
# - RTK hook from ~/.claude/settings.json
# - RTK hook from ~/.gemini/settings.json
# - ~/.claude/RTK.md
# - @RTK.md reference from ~/.claude/CLAUDE.md
# - RTK hook entry from ~/.claude/settings.json

# Restart Claude Code after uninstall
# Restart Claude Code / Gemini CLI after uninstall
```

**Restore from Backup** (if needed):
Expand Down
213 changes: 4 additions & 209 deletions hooks/rtk-rewrite.sh
Original file line number Diff line number Diff line change
@@ -1,209 +1,4 @@
#!/bin/bash
# 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.

# Guards: skip silently if dependencies missing
if ! command -v rtk &>/dev/null || ! command -v jq &>/dev/null; then
exit 0
fi

set -euo pipefail

INPUT=$(cat)
CMD=$(echo "$INPUT" | jq -r '.tool_input.command // empty')

if [ -z "$CMD" ]; then
exit 0
fi

# Extract the first meaningful command (before pipes, &&, etc.)
# We only rewrite if the FIRST command in a chain matches.
FIRST_CMD="$CMD"

# Skip if already using rtk
case "$FIRST_CMD" in
rtk\ *|*/rtk\ *) exit 0 ;;
esac

# Skip commands with heredocs, variable assignments as the whole command, etc.
case "$FIRST_CMD" in
*'<<'*) exit 0 ;;
esac

# Strip leading env var assignments for pattern matching
# e.g., "TEST_SESSION_ID=2 npx playwright test" → match against "npx playwright test"
# but preserve them in the rewritten command for execution.
ENV_PREFIX=$(echo "$FIRST_CMD" | grep -oE '^([A-Za-z_][A-Za-z0-9_]*=[^ ]* +)+' || echo "")
if [ -n "$ENV_PREFIX" ]; then
MATCH_CMD="${FIRST_CMD:${#ENV_PREFIX}}"
CMD_BODY="${CMD:${#ENV_PREFIX}}"
else
MATCH_CMD="$FIRST_CMD"
CMD_BODY="$CMD"
fi

REWRITTEN=""

# --- Git commands ---
if echo "$MATCH_CMD" | grep -qE '^git[[:space:]]'; then
GIT_SUBCMD=$(echo "$MATCH_CMD" | sed -E \
-e 's/^git[[:space:]]+//' \
-e 's/(-C|-c)[[:space:]]+[^[:space:]]+[[:space:]]*//g' \
-e 's/--[a-z-]+=[^[:space:]]+[[:space:]]*//g' \
-e 's/--(no-pager|no-optional-locks|bare|literal-pathspecs)[[:space:]]*//g' \
-e 's/^[[:space:]]+//')
case "$GIT_SUBCMD" in
status|status\ *|diff|diff\ *|log|log\ *|add|add\ *|commit|commit\ *|push|push\ *|pull|pull\ *|branch|branch\ *|fetch|fetch\ *|stash|stash\ *|show|show\ *)
REWRITTEN="${ENV_PREFIX}rtk $CMD_BODY"
;;
esac

# --- GitHub CLI (added: api, release) ---
elif echo "$MATCH_CMD" | grep -qE '^gh[[:space:]]+(pr|issue|run|api|release)([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^gh /rtk gh /')"

# --- Cargo ---
elif echo "$MATCH_CMD" | grep -qE '^cargo[[:space:]]'; then
CARGO_SUBCMD=$(echo "$MATCH_CMD" | sed -E 's/^cargo[[:space:]]+(\+[^[:space:]]+[[:space:]]+)?//')
case "$CARGO_SUBCMD" in
test|test\ *|build|build\ *|clippy|clippy\ *|check|check\ *|install|install\ *|fmt|fmt\ *)
REWRITTEN="${ENV_PREFIX}rtk $CMD_BODY"
;;
esac

# --- File operations ---
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 '^ls([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^ls/rtk ls/')"
elif echo "$MATCH_CMD" | grep -qE '^tree([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^tree/rtk tree/')"
elif echo "$MATCH_CMD" | grep -qE '^find[[:space:]]+'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^find /rtk find /')"
elif echo "$MATCH_CMD" | grep -qE '^diff[[:space:]]+'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^diff /rtk diff /')"
elif echo "$MATCH_CMD" | grep -qE '^head[[:space:]]+'; then
# Transform: head -N file → rtk read file --max-lines N
# Also handle: head --lines=N file
if echo "$MATCH_CMD" | grep -qE '^head[[:space:]]+-[0-9]+[[:space:]]+'; then
LINES=$(echo "$MATCH_CMD" | sed -E 's/^head +-([0-9]+) +.+$/\1/')
FILE=$(echo "$MATCH_CMD" | sed -E 's/^head +-[0-9]+ +(.+)$/\1/')
REWRITTEN="${ENV_PREFIX}rtk read $FILE --max-lines $LINES"
elif echo "$MATCH_CMD" | grep -qE '^head[[:space:]]+--lines=[0-9]+[[:space:]]+'; then
LINES=$(echo "$MATCH_CMD" | sed -E 's/^head +--lines=([0-9]+) +.+$/\1/')
FILE=$(echo "$MATCH_CMD" | sed -E 's/^head +--lines=[0-9]+ +(.+)$/\1/')
REWRITTEN="${ENV_PREFIX}rtk read $FILE --max-lines $LINES"
fi

# --- JS/TS tooling (added: npm run, npm test, vue-tsc) ---
elif echo "$MATCH_CMD" | grep -qE '^(pnpm[[:space:]]+)?(npx[[:space:]]+)?vitest([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed -E 's/^(pnpm )?(npx )?vitest( run)?/rtk vitest run/')"
elif echo "$MATCH_CMD" | grep -qE '^pnpm[[:space:]]+test([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^pnpm test/rtk vitest run/')"
elif echo "$MATCH_CMD" | grep -qE '^npm[[:space:]]+test([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^npm test/rtk npm test/')"
elif echo "$MATCH_CMD" | grep -qE '^npm[[:space:]]+run[[:space:]]+'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^npm run /rtk npm /')"
elif echo "$MATCH_CMD" | grep -qE '^(npx[[:space:]]+)?vue-tsc([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed -E 's/^(npx )?vue-tsc/rtk tsc/')"
elif echo "$MATCH_CMD" | grep -qE '^pnpm[[:space:]]+tsc([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^pnpm tsc/rtk tsc/')"
elif echo "$MATCH_CMD" | grep -qE '^(npx[[:space:]]+)?tsc([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed -E 's/^(npx )?tsc/rtk tsc/')"
elif echo "$MATCH_CMD" | grep -qE '^pnpm[[:space:]]+lint([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^pnpm lint/rtk lint/')"
elif echo "$MATCH_CMD" | grep -qE '^(npx[[:space:]]+)?eslint([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed -E 's/^(npx )?eslint/rtk lint/')"
elif echo "$MATCH_CMD" | grep -qE '^(npx[[:space:]]+)?prettier([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed -E 's/^(npx )?prettier/rtk prettier/')"
elif echo "$MATCH_CMD" | grep -qE '^(npx[[:space:]]+)?playwright([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed -E 's/^(npx )?playwright/rtk playwright/')"
elif echo "$MATCH_CMD" | grep -qE '^pnpm[[:space:]]+playwright([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^pnpm playwright/rtk playwright/')"
elif echo "$MATCH_CMD" | grep -qE '^(npx[[:space:]]+)?prisma([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed -E 's/^(npx )?prisma/rtk prisma/')"

# --- Containers (added: docker compose, docker run/build/exec, kubectl describe/apply) ---
elif echo "$MATCH_CMD" | grep -qE '^docker[[:space:]]'; then
if echo "$MATCH_CMD" | grep -qE '^docker[[:space:]]+compose([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^docker /rtk docker /')"
else
DOCKER_SUBCMD=$(echo "$MATCH_CMD" | sed -E \
-e 's/^docker[[:space:]]+//' \
-e 's/(-H|--context|--config)[[:space:]]+[^[:space:]]+[[:space:]]*//g' \
-e 's/--[a-z-]+=[^[:space:]]+[[:space:]]*//g' \
-e 's/^[[:space:]]+//')
case "$DOCKER_SUBCMD" in
ps|ps\ *|images|images\ *|logs|logs\ *|run|run\ *|build|build\ *|exec|exec\ *)
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^docker /rtk docker /')"
;;
esac
fi
elif echo "$MATCH_CMD" | grep -qE '^kubectl[[:space:]]'; then
KUBE_SUBCMD=$(echo "$MATCH_CMD" | sed -E \
-e 's/^kubectl[[:space:]]+//' \
-e 's/(--context|--kubeconfig|--namespace|-n)[[:space:]]+[^[:space:]]+[[:space:]]*//g' \
-e 's/--[a-z-]+=[^[:space:]]+[[:space:]]*//g' \
-e 's/^[[:space:]]+//')
case "$KUBE_SUBCMD" in
get|get\ *|logs|logs\ *|describe|describe\ *|apply|apply\ *)
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^kubectl /rtk kubectl /')"
;;
esac

# --- Network ---
elif echo "$MATCH_CMD" | grep -qE '^curl[[:space:]]+'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^curl /rtk curl /')"
elif echo "$MATCH_CMD" | grep -qE '^wget[[:space:]]+'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^wget /rtk wget /')"

# --- pnpm package management ---
elif echo "$MATCH_CMD" | grep -qE '^pnpm[[:space:]]+(list|ls|outdated)([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^pnpm /rtk pnpm /')"

# --- Python tooling ---
elif echo "$MATCH_CMD" | grep -qE '^pytest([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^pytest/rtk pytest/')"
elif echo "$MATCH_CMD" | grep -qE '^python[[:space:]]+-m[[:space:]]+pytest([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^python -m pytest/rtk pytest/')"
elif echo "$MATCH_CMD" | grep -qE '^ruff[[:space:]]+(check|format)([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^ruff /rtk ruff /')"
elif echo "$MATCH_CMD" | grep -qE '^pip[[:space:]]+(list|outdated|install|show)([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^pip /rtk pip /')"
elif echo "$MATCH_CMD" | grep -qE '^uv[[:space:]]+pip[[:space:]]+(list|outdated|install|show)([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^uv pip /rtk pip /')"

# --- Go tooling ---
elif echo "$MATCH_CMD" | grep -qE '^go[[:space:]]+test([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^go test/rtk go test/')"
elif echo "$MATCH_CMD" | grep -qE '^go[[:space:]]+build([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^go build/rtk go build/')"
elif echo "$MATCH_CMD" | grep -qE '^go[[:space:]]+vet([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^go vet/rtk go vet/')"
elif echo "$MATCH_CMD" | grep -qE '^golangci-lint([[:space:]]|$)'; then
REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^golangci-lint/rtk golangci-lint/')"
fi

# If no rewrite needed, approve as-is
if [ -z "$REWRITTEN" ]; then
exit 0
fi

# Build the updated tool_input with all original fields preserved, only command changed
ORIGINAL_INPUT=$(echo "$INPUT" | jq -c '.tool_input')
UPDATED_INPUT=$(echo "$ORIGINAL_INPUT" | jq --arg cmd "$REWRITTEN" '.command = $cmd')

# Output the rewrite instruction
jq -n \
--argjson updated "$UPDATED_INPUT" \
'{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "allow",
"permissionDecisionReason": "RTK auto-rewrite",
"updatedInput": $updated
}
}'
#!/bin/sh
# Legacy shim — actual hook logic is in the rtk binary.
# Direct usage: rtk hook claude (reads JSON from stdin)
exec rtk hook claude
Loading