gsttt

pronounced ghost

A deterministic dependency graph that tells you, and your coding agent, which files a change reaches. No model, no daemon.

Install

Install the command line tool first. Add the Claude Code plugin if you work with Claude Code.

Install the command line tool

curl -fsSL https://raw.githubusercontent.com/SkuratovichA/gsttt/main/install.sh | sh

For Linux and macOS, on x86_64 and aarch64. The script verifies the SHA-256 of the download and installs to ~/.local/bin, or to GSTTT_INSTALL_DIR if you set it.

Add the Claude Code plugin

/plugin marketplace add SkuratovichA/gsttt
/plugin install gsttt@gsttt

Run these inside Claude Code. The plugin registers the MCP server, a session start hook and a skill. It needs the command line tool from the first step.

See an answer

Ask what depends on a file. The answer lists the affected files by distance with the reason for each, lists the tests that reach the file, and ends with how much code gsttt could read and how fresh the index is.

gsttt impact api/bookings/router.pyaffected files (4)  1  web/src/api/bookings.ts      calls http GET /bookings/{}  2  web/src/pages/Bookings.tsx   imports web/src/api/bookings.ts  2  web/src/pages/Dashboard.tsx  imports web/src/api/bookings.ts  3  web/src/App.tsx              imports web/src/pages/Bookings.tsxtests (1)  1  api/tests/test_bookings.py   imports api/bookings/router.pypython: 212 of 214 files read, 99% of imports resolved. ts: 340 of 340 files read, 100% of imports resolved.fresh at a1b2c3d, 3 files dirty
An example answer for a Python API with a TypeScript client. The files and numbers are illustrative.

What it does

  • Imports, across languages

    TypeScript, Python and Rust files go into one graph, with the imports between files resolved to the files they point at.

  • Contracts, between services

    HTTP routes, GraphQL operations, gRPC methods, tRPC procedures, tables, queues and environment variables link the files that declare them to the files that serve and call them, so a change to a route lists the client that calls it.

  • Answers that state their limits

    Every answer ends with a coverage line, saying how much code gsttt could read, and a freshness line, saying whether the index matches the tree. It does not hide what it could not see.

Works with agents

gsttt speaks MCP over stdio with gsttt mcp, so any agent that supports MCP can ask what a change touches before it makes the change. For Claude Code, the plugin registers that server and adds a session start hook and a skill.