Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use terminal_rg / terminal_find when you need raw filesystem search outside the project tree — system configs, /var/log, /etc, archive contents — or when files-tools.search_files is too project-scoped. Teaches the rg vs find vs terminal_exec("ls/du/tree") split, common rg flag combos for code/logs/configs, find predicates for mtime/size/type queries, and the rule that for tree views or single-file stat info you should just use terminal_exec instead of inventing a tool. Read before reaching for r
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 182% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 48% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 292% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 102% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 49% | 0% |
terminal-tools provides two structured search tools: terminal_rg (ripgrep for content) and terminal_glob (find files by name/glob). Predicate queries (mtime/size/type) and everything else (tree, stat, du) are just terminal_exec.
| Task | Tool | |---|---| | Find code/text matching a pattern (project tree or any path) | terminal_rg (gitignore-aware; defaults to your session workdir) | | Find files by name/glob (any path) | terminal_glob | | Find files by mtime/size/type predicate | terminal_exec("find ...") (see references/find_predicates.md) | | List a directory | terminal_exec("ls -la /path") | | Tree view | terminal_exec("tree -L 2 /path") | | Single-path stat | terminal_exec("stat /path") | | Disk usage | terminal_exec("du -sh /path") or terminal_exec("du -h --max-depth=2 /") | | Count matches across files | terminal_rg(pattern, count=True via extra_args=["-c"]) |
terminal_rg — content searchripgrep is fast, gitignore-aware, and has a deep flag surface. The structured wrapper exposes the most useful flags directly; extra_args covers the rest.
# All Python files containing "TODO"
terminal_rg(pattern="TODO", path=".", type_filter="py")
# Case-insensitive, with context
terminal_rg(pattern="error", path="/var/log", ignore_case=True, context=2)
# Search hidden files (rg ignores them by default)
terminal_rg(pattern="api_key", path="~", hidden=True)
# Don't respect .gitignore (find files git would ignore)
terminal_rg(pattern="generated", path=".", no_ignore=True)
# Multi-line pattern (e.g., function definitions spanning lines)
terminal_rg(pattern=r"def\s+\w+\(.*\n.*\n", path="src", extra_args=["--multiline"])
# Specific filename glob
terminal_rg(pattern="version", path=".", glob="*.toml")| Flag | Effect | |---|---| | -tpy (type_filter="py") | Only Python files | | -uu | Don't respect any ignores (incl. .git/) | | --multiline (extra_args) | Allow regex spanning lines | | --max-count (max_count) | Stop after N matches per file | | --max-depth (max_depth) | Limit recursion | | -w (extra_args) | Whole word match | | -F (extra_args) | Fixed string (no regex) |
See references/ripgrep_cheatsheet.md for the long form.
terminal_glob — find files by nameLists files matching a glob, gitignore-aware (backed by rg --files). The pattern is widened for you so a bare stem Just Works — the actual glob run is returned as expanded_pattern:
lk_scan_post_reactors → matched as **/*lk_scan_post_reactors* (recursive substring)*.py → matched as **/*.py (recursive by default)src/**/*.py → used verbatim# Find a file by stem anywhere under a tree
terminal_glob(pattern="lk_scan_post_reactors", path="core/framework/skills")
# All YAML configs under /etc
terminal_glob(pattern="*.yaml", path="/etc")
# Include .gitignored / hidden / build-cache files
terminal_glob(pattern="*.log", path=".", include_ignored=True)For predicate queries (modified in last N days, larger than N MB, only dirs/symlinks), terminal_glob is the wrong tool — drop to terminal_exec("find ..."). See references/find_predicates.md.
Both tools return truncated: true when output exceeded the inline cap. For terminal_rg, matches were dropped (refine the pattern or narrow the path); for terminal_glob, results past max_results (default 1000) were dropped — the search stops early at the cap, so narrow the pattern rather than raising it. terminal_glob also returns timed_out: true (with the partial results it gathered) when the walk exceeded its deadline.
terminal_rg is the project search tool — gitignore-aware and returns structured matches; use it for in-project search as well as raw paths.terminal_glob to list one directory — terminal_exec("ls -la /path") is shorter.terminal_exec("grep ...") when terminal_rg exists — rg is faster, gitignore-aware, and returns structured matches.terminal_exec("find ... -name ...") for a plain name search — use terminal_glob. Reserve terminal_exec("find ...") for mtime/size/type predicates.Other measured skills in the registry, with their headline benchmark lift.