@josephakern/pi-tree-sitter-cli
Thin pi extension exposing the tree-sitter CLI as capped agent tools.
Package details
Install @josephakern/pi-tree-sitter-cli from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@josephakern/pi-tree-sitter-cli- Package
@josephakern/pi-tree-sitter-cli- Version
0.2.8- Published
- Jul 9, 2026
- Downloads
- 825/mo · 51/wk
- Author
- josephakern
- License
- unknown
- Types
- extension, skill
- Size
- 91.3 KB
- Dependencies
- 0 dependencies · 2 peers
Pi manifest JSON
{
"extensions": [
"./index.ts"
],
"skills": [
"./skills"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
@josephakern/pi-tree-sitter-cli
Thin pi extension for exposing the existing tree-sitter CLI to agents.
Installation
Install this package by itself from npm:
pi install npm:@josephakern/pi-tree-sitter-cli
Install it for the current project instead of globally:
pi install -l npm:@josephakern/pi-tree-sitter-cli
Try it for one pi run without saving it to settings:
pi -e npm:@josephakern/pi-tree-sitter-cli
For local development from this monorepo:
pi install -l ./packages/pi-tree-sitter-cli
This pi package exposes Tree-sitter, but it does not install the tree-sitter CLI or language grammars. Install the CLI and any globally available grammars with npm, for example:
npm install -g tree-sitter-cli tree-sitter-typescript tree-sitter-python
Then confirm Tree-sitter can discover them:
tree-sitter dump-languages
Contract
This package does not install, bundle, or vendor Tree-sitter itself. It requires an existing tree-sitter executable on PATH, or an explicit TREE_SITTER_BIN=/absolute/path/to/tree-sitter.
At runtime, pi provides the pi extension peer packages used by this package: @earendil-works/pi-coding-agent and typebox. The external tree-sitter CLI and language grammar packages are separate system/npm installs.
If the executable is missing, tools fail with installation/configuration guidance instead of silently falling back or attempting auto-installation.
Child processes are capped: runs are killed (process group and all) on timeout, processTimeoutMs tops out at 600000 (10 minutes), and a run that produces more than 2MB of output is terminated with the captured prefix returned plus an explicit incompleteness notice (a capped grammar install is treated as a failure instead). Positional arguments (paths, queryFile) are passed after a -- terminator so they can never be parsed as CLI flags; npm packages specs must not start with -. On Windows, .cmd/.bat shims such as npm.cmd are spawned through cmd.exe with quoting, since Node refuses to spawn them directly.
Optional grammar acquisition is explicit: tree_sitter_grammar_install installs npm grammar packages into a tool-local cache and writes a tool-local Tree-sitter config. It does not mutate your global Tree-sitter config. Tree-sitter and npm cache paths are also kept under the tool-local cache when these tools execute.
Grammar installation options
Tree-sitter discovers grammars from the parser-directories listed in its config. If you want a grammar to behave like the globally available Python grammar, install the npm grammar package into a directory already listed in the default Tree-sitter config, commonly the active global npm prefix:
npm install -g tree-sitter-typescript tree-sitter-javascript tree-sitter-rust
Then verify:
tree-sitter dump-languages
Grammars installed this way are available to the default tool calls, without useManagedConfig.
For isolated, tool-local installation, use this package's managed cache instead:
{
"packages": ["tree-sitter-typescript"],
"allowScripts": true
}
via tree_sitter_grammar_install, then call the other Tree-sitter tools with:
{
"useManagedConfig": true
}
Use tree_sitter_languages to inspect the default config and tree_sitter_grammar_status to inspect the managed cache.
Principle
Expose the tool, do not domesticate it. Tree-sitter's query language is the abstraction; this package should stay a safe, capped, convenient doorway to the CLI.
Status
Implemented:
tree_sitter_languages— wrapstree-sitter dump-languagestree_sitter_parse— wrapstree-sitter parsetree_sitter_query— wrapstree-sitter query; passcompact: truefor token-efficient capture linestree_sitter_tags— wrapstree-sitter tags; passcompact: truefor token-efficient tag linestree_sitter_grammar_status— inspects the tool-local grammar cachetree_sitter_grammar_install— explicitly installs npm grammar packages into the tool-local cache
The minimal Tree-sitter CLI plan from PLAN.md is implemented, plus optional tool-local npm grammar management.
Query recipes
This package also ships a small recipe catalog. Recipes are plain .scm files plus the tree-sitter-recipes skill; they do not wrap or replace the raw tools.
Included query files:
queries/
universal/syntax-errors.scm
typescript/function-signatures.scm
typescript/imports.scm
typescript/exports.scm
typescript/type-declarations.scm
typescript/tool-registrations.scm
javascript/function-signatures.scm
javascript/imports.scm
javascript/exports.scm
python/function-signatures.scm
python/imports.scm
python/exports.scm
python/type-declarations.scm
Shipped skills, all small and workflow-shaped:
tree-sitter-recipes— the recipe catalog and how to use itstructural-review— review code/diffs from structural facts before reading bodiestree-sitter-query-authoring— write and validate new.scmqueries from parse outputpost-edit-syntax-check— verify edited files still parse before moving on
The tree_sitter_query tool also advertises the absolute shipped-recipes directory in its prompt guidelines, so agents can reach recipes without reading a skill first.
For project-specific patterns, prefer adding .scm files under .pi/tree-sitter/queries/ or tree-sitter/queries/ instead of adding wrapper tools.
test/skills.test.mjs pins skills to reality (referenced query files exist, capture contracts match the shipped queries, mentioned tools are registered, example parameters exist in schemas). npm run eval:skills runs live tasks through pi against a configured model and scores whether the agent actually used the tools, recipes, and skills.
Development
From the repository root:
npm install
npm run check
Temporary pi load:
pi -e ./packages/pi-tree-sitter-cli
Project-local install once stable:
pi install -l ./packages/pi-tree-sitter-cli
Set TREE_SITTER_BIN if tree-sitter is not on PATH. Set PI_TREE_SITTER_CLI_HOME to override the managed grammar cache directory.