J
jahala/tilth
Smart code reading for humans and AI agents
View on GitHub ↗Link checked 2026-11-12 · HTTP 200 · opens the vendor's own site
Official descriptionSmart code reading for humans and AI agents. Definitions, callers, dependencies and function-level diffs from tree-sitter. One binary, no index. MCP server + CLI. Install: cargo install tilth or npx tilth
Install & config
Client config (built from the install command this repo gives)
{
"mcpServers": {
"jahala-tilth": {
"command": "npx",
"args": ["tilth"]
}
}
}Parsed from the README we fetched on 2026-11-11; we have not executed it.
command/args come from the install command the repository states. When it is ambiguous, the project README wins.
VS Code (.vscode/mcp.json - the key is servers)
{
"servers": {
"jahala-tilth": {
"command": "npx",
"args": ["tilth"]
}
}
}Same server, but VS Code keeps it under <code>servers</code>.
Claude Code (command line)
claude mcp add --transport stdio jahala-tilth -- npx tilth
Claude Code does not read a config file; add the server with this command.
Key names differ by client: Clients & CLI
- Star count
- 362 ★ · jahala/tilth · read from the GitHub search API · (checked 2026-11-13 20:00:50)
- Source
- read directly from its GitHub page · type: open-source project
- Harvest history
- first seen 2026-11-12 · last seen 2026-11-14 · seen 3× · listed by 2 sources
- Score
- score 204 · 362 ★ · 2 sources · repo
- Install
npx tilth
FAQ (answers come from our records)
How do I install it?
The repository provides this install command:
npx tilth. It comes from the repository itself; we cannot guarantee it runs as-is in your client.Who is it for?
We filed it under these tags: 开源项目. The tags come from the entry itself, not a taxonomy we imposed.
Who maintains it?
repository
jahala/tilth;first catalogued 2026-11-12;last seen 2026-11-14。There is no official certification or quality rating here — we record sources and dates only.# tilth
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
Smart code reading for humans and AI agents. tilth parses your code with tree-sitter and answers questions that text search can't. It shows where a symbol is defined, who calls it, what it calls, what depends on a file, and what changed at function level.
tilth is one binary. It works as a command-line tool and as an MCP server, which is how most agent hosts connect to tools. It builds no index and needs no setup.
$ tilth fastapi/dependencies/utils.py
# fastapi/dependencies/utils.py (1026 lines, ~9.6k tokens)
[1-] imports: dataclasses, inspect, sys
[86-110] fn ensure_multipart_is_installed
def ensure_multipart_is_installed() -> None
[113-125] fn get_parameterless_sub_dependant
def get_parameterless_sub_dependant(, depends: params.Depends, path: str) -> Dependant
[128-179] fn get_flat_dependant
def get_flat_dependant(
...
[203-215] fn _get_signature
def _get_signature(call: Callable[..., Any]) -> inspect.Signature
[218-232] fn get_typed_signature
def get_typed_signature(call: Callable[..., Any]) -> inspect.Signature
...
Small files come back whole. Large files come back as an outline with line ranges. Ask for the part you need with --section:
bash
tilth fastapi/dependencies/utils.py --section 218-232
tilth docs/guide.md --section "## Installation"
The examples in this README are real output from the FastAPI and Gin repositories. Lines marked ... are cut for length.
## Search finds definitions first
$ tilth get_typed_signature --scope fastapi --expand=1
# Search: "get_typed_signature" in fastapi — 2 matches (1 definitions, 1 usages)
### dependencies/utils.py:218-232 [definition]
[203-215] fn _get_signature
def _get_signature(call: Callable[..., Any]) -> inspect.Signature
-> [218-232] fn get_typed_signature
def get_typed_signature(call: Callable[..., Any]) -> inspect.Signature
[235-241] fn get_typed_annotation
dependencies/utils.py:218-232
218 | def get_typed_signature(call: Callable[..., Any]) -> inspect.Signature:
219 | signature = _get_signature(call)
220 | unwrapped = inspect.unwrap(call)
...
232 | return typed_signature
-- calls --
_get_signature dependencies/utils.py:203-215 def _get_signature(call: Callable[..., Any]) -> inspect.Signature
get_typed_annotation dependencies/utils.py:235-241 def get_typed_annotation(annotation: Any, globalns: dict[str, Any]) -> Any
### dependencies/utils.py:277 [usage in function get_dependant]
[244-253] fn get_typed_return_annotation
def get_typed_return_annotation(call: Callable[..., Any]) -> Any
-> [256-328] fn get_dependant
def get_dependant(
[331-352] fn add_non_field_param_to_dependency
(~439 tokens)
tilth uses the syntax tree to tell a definition from a mention, and it lists definitions first. Each match is shown with the symbols around it, so you can see where you are without reading the file.
An expanded definition ends with a -- calls -- footer. It lists the functions the definition calls, each with its file, line range and signature. An agent can follow a call chain from there without searching again.
A qualified name such as Engine::handleHTTPRequest or Context.reset finds the definition that type holds, in search and in grok. A qualifier that names a module or package (gin.New, crate::search::symbol::search) finds the function at the top level of that module, and Self::new, self.run or this.handle find the name in whichever type holds it.
tilth is one binary. It works as a command-line tool and as an MCP server, which is how most agent hosts connect to tools. It builds no index and needs no setup.
$ tilth fastapi/dependencies/utils.py
# fastapi/dependencies/utils.py (1026 lines, ~9.6k tokens)
[1-] imports: dataclasses, inspect, sys
[86-110] fn ensure_multipart_is_installed
def ensure_multipart_is_installed() -> None
[113-125] fn get_parameterless_sub_dependant
def get_parameterless_sub_dependant(, depends: params.Depends, path: str) -> Dependant
[128-179] fn get_flat_dependant
def get_flat_dependant(
...
[203-215] fn _get_signature
def _get_signature(call: Callable[..., Any]) -> inspect.Signature
[218-232] fn get_typed_signature
def get_typed_signature(call: Callable[..., Any]) -> inspect.Signature
...
Small files come back whole. Large files come back as an outline with line ranges. Ask for the part you need with --section:
bash
tilth fastapi/dependencies/utils.py --section 218-232
tilth docs/guide.md --section "## Installation"
The examples in this README are real output from the FastAPI and Gin repositories. Lines marked ... are cut for length.
## Search finds definitions first
$ tilth get_typed_signature --scope fastapi --expand=1
# Search: "get_typed_signature" in fastapi — 2 matches (1 definitions, 1 usages)
### dependencies/utils.py:218-232 [definition]
[203-215] fn _get_signature
def _get_signature(call: Callable[..., Any]) -> inspect.Signature
-> [218-232] fn get_typed_signature
def get_typed_signature(call: Callable[..., Any]) -> inspect.Signature
[235-241] fn get_typed_annotation
dependencies/utils.py:218-232
218 | def get_typed_signature(call: Callable[..., Any]) -> inspect.Signature:
219 | signature = _get_signature(call)
220 | unwrapped = inspect.unwrap(call)
...
232 | return typed_signature
-- calls --
_get_signature dependencies/utils.py:203-215 def _get_signature(call: Callable[..., Any]) -> inspect.Signature
get_typed_annotation dependencies/utils.py:235-241 def get_typed_annotation(annotation: Any, globalns: dict[str, Any]) -> Any
### dependencies/utils.py:277 [usage in function get_dependant]
[244-253] fn get_typed_return_annotation
def get_typed_return_annotation(call: Callable[..., Any]) -> Any
-> [256-328] fn get_dependant
def get_dependant(
[331-352] fn add_non_field_param_to_dependency
(~439 tokens)
tilth uses the syntax tree to tell a definition from a mention, and it lists definitions first. Each match is shown with the symbols around it, so you can see where you are without reading the file.
An expanded definition ends with a -- calls -- footer. It lists the functions the definition calls, each with its file, line range and signature. An agent can follow a call chain from there without searching again.
A qualified name such as Engine::handleHTTPRequest or Context.reset finds the definition that type holds, in search and in grok. A qualifier that names a module or package (gin.New, crate::search::symbol::search) finds the function at the top level of that module, and Self::new, self.run or this.handle find the name in whichever type holds it.
Listed badge (optional)
Copy this line into the README if you want the listing mark. Optional, and it does not affect being listed.
[](https://anclum.com/en/s/jahala-tilth/)
- Source
- github · https://github.com/jahala/tilth
- Browse by field
- Open source
- Traction
- 362 ★
- Listed by
- 2 independent sources
- added
- today
More like this
Filed under
Every tag opens the full list for that filter. Counts are the live catalogue figures.