v0.15.0: 25% fewer tokens on nested tool responses (GCF spec v3)
Upgraded to gcf-go v1.1.0, which implements GCF spec v3. This improves the generic/tabular profile used by all 66 tool handlers.
What changed
Tools that return nested data (diagnostics with metadata, symbols with caller lists, references with context) now encode 25.5% more efficiently. Two improvements:
Inline schema encoding. Nested objects with 3+ fields are encoded positionally on the parent row instead of as separate attachment blocks. Fewer lines, fewer tokens.
Shared array schemas. When multiple records contain arrays with the same structure (e.g., every symbol has a .refs array with {file, line, kind}), the field header is declared once and omitted on subsequent records.
Before (v1.0.0):
@0 AuthMiddleware|fn|src/auth.go|42|^
.refs [3]{file,line,kind}
src/server.go|15|calls
src/router.go|88|calls
@1 ValidateToken|fn|src/auth.go|67|^
.refs [3]{file,line,kind}
src/auth.go|45|calls
src/middleware.go|23|calls
After (v1.1.0):
@0 AuthMiddleware|fn|src/auth.go|42|^
.refs [3]{file,line,kind}
src/server.go|15|calls
src/router.go|88|calls
@1 ValidateToken|fn|src/auth.go|67|^
.refs [3]
src/auth.go|45|calls
src/middleware.go|23|calls
Second record's .refs omits {file,line,kind} (shared schema). Multiplied across a blast_radius response with 50 symbols, each with callers, the savings add up.
Token savings summary
| Profile | Savings vs JSON |
|---|---|
| Tabular (all tools, v0.15.0) | 40-60% (was 30-51%) |
| Graph (symbol-returning tools) | 79-84% |
| Graph + session dedup | 92.7% (5th call) |
Other changes
- Workspace ready check on all LSP query methods: 15 methods now wait for indexing before sending requests, preventing -32001 errors on cold start.
- QualifiedName space sanitization: Symbol names with spaces (TypeScript) no longer break GCF graph decoding.
GCF
GCF (Graph Compact Format) is a token-optimized wire format for LLM tool responses.
- Spec · Go · Python · TypeScript · Proxy · Playground