TypeScript language server
VS Code uses the TypeScript language server for go-to-definition, find-all-references, and red squiggles. tsforge embeds the same engine in-process. You do not run a separate tsserver process.
It does two jobs:
- Navigation tools for the model on existing codebases (search symbols, rename, etc.)
- Write diagnostics after each edit (Write diagnostics)
The full-project gate still runs tsc separately when a task finishes. The language server is for faster, file-local feedback and smarter exploration.
Navigation tools (existing repos)
Section titled “Navigation tools (existing repos)”Offered when tsforge detects real code to explore (existing repo, resumed session, non-empty tree). Omitted on greenfield scratch work so the model does not wander.
| Tool | What it does |
|---|---|
search | ripgrep by text pattern |
symbol_search | find declarations by name |
find_references | all usages of a symbol |
go_to_definition | jump to where a symbol is declared |
type_at | inferred type at a position |
impact | blast radius: which files/lines reference a symbol (excluding its declaration) |
symbol_context | 360° view: type, definition site(s), and every reference in one call |
diagnostics | errors for one file on demand |
rename_symbol | rename across the project |
move_file | move/rename a file and rewrite every importer |
organize_imports | sort and clean imports |
Navigation and write feedback (instant per-file type diagnostics after each edit) are always on for real work; navigation can be withheld for eval/headless runs with TSFORGE_NO_LSP_TOOLS=1.
On existing repos the model is also offered git_context: read-only, structured access to history and diffs (scope a fix to what changed). It is git-backed, not part of the language server, so TSFORGE_NO_LSP_TOOLS does not affect it; withhold it for eval/headless runs with TSFORGE_NO_GIT_TOOL=1. See Git context.
Safe auto-fixes
Section titled “Safe auto-fixes”tsforge can apply TypeScript quick fixes that match its strict gate (imports, unused vars, missing await). It skips fixes that add ! or unsafe as casts.
Per-edit ESLint
Section titled “Per-edit ESLint”On each write, tsforge can lint just the touched file for idioms tsc misses (same rules as the gate, scoped to one file).
Requirements
Section titled “Requirements”tsconfig.jsonin the project for full semantic features- tsforge refreshes its view after harness writes so diagnostics stay current