Catalog npm
Back to packageRELEASE DETAILS

0.4.0

npm

@0xdeafcafe/tslsp-cli

Type-aware TypeScript code intelligence CLI — rename, references, definitions, hover, symbols, diagnostics, call hierarchy, code actions. Backed by tsgo.

claudeclaude-codeclilsprefactorrenametsgotypescript
Published8 Jun 2026
Direct dependencies7
Transitive dependenciesNot calculated

README

Current package documentation

tslsp-cli

npm CI node

Type-aware TypeScript/JavaScript code intelligence as a CLI. Wraps tsgo (Microsoft's native Go port of tsserver) and exposes its LSP capabilities — references, definition, rename, rename-file, hover, outline, diagnostics, call-hierarchy, code-action — as a small set of agent-friendly commands.

The point is to give coding agents an alternative to grep/find-and-replace/mv on identifier-level work. rename updates every reference. rename-file rewrites every import. outline returns the LSP's structural view, not 200 lines of source.

One tsgo per tsconfig.json, lazy-spawned. Optional --daemon keeps tsgo warm across calls.

install

Two clients are first-class: Claude Code (via the bundled plugin marketplace) and Codex (via the CLI + AGENTS.md).

Claude Code

/plugin marketplace add 0xdeafcafe/tslsp-cli
/plugin install tslsp@0xdeafcafe-tslsp

The plugin bundles a routing skill that tells Claude to use tslsp-cli instead of grep / string-edit / mv for any TS/JS identifier work — no CLAUDE.md editing required. The skill drives the CLI, so install that too:

npm i -g @0xdeafcafe/tslsp-cli

The skill instructs Claude to verify the CLI is on PATH at the start of each session; a missing install surfaces immediately rather than mid-refactor. Update the skill with /plugin marketplace update 0xdeafcafe-tslsp.

Codex

Codex reads AGENTS.md the same way Claude reads CLAUDE.md. Install the CLI and let it write the routing block:

npm i -g @0xdeafcafe/tslsp-cli

tslsp-cli install --skills --project --with-agents-md   # writes ./AGENTS.md
tslsp-cli install --skills --with-agents-md             # writes ~/.codex/AGENTS.md (user-wide)

Idempotent — guarded by a marker comment, so re-runs are no-ops. --with-claude-md is the equivalent flag for non-marketplace Claude Code installs; both flags can be passed together.

Other agents

Cursor, Cline, Aider, anything else that runs a shell and reads an instructions file: install the CLI (npm i -g @0xdeafcafe/tslsp-cli), then paste the body of skills/tslsp/SKILL.md into the host's equivalent file.

From source

git clone https://github.com/0xdeafcafe/tslsp-cli.git
cd tslsp-cli && pnpm install && pnpm run build
./dist/cli.js --help

commands

commandpurpose
find-symbolWorkspace symbol search. Multi-query positional or --queries a,b,c. --kind, --container.
referencesEvery reference. Locator or --symbols batch. --summary for path (N): lines.
definitionJump to where a symbol is defined. --symbols batch.
type-definitionJump to a value's type declaration (vs. value). --symbols batch.
implementationConcrete implementations of an interface/abstract member. --symbols batch.
renameType-aware rename across every file. --dry-run previews.
rename-fileMove a file or folder; updates every import. Folders walked recursively.
hoverType signature + JSDoc. --symbols batch.
outlineIndented declaration outline. Files, globs ('src/**/*.ts'), directories. --depth, --kind.
diagnosticsType errors. Files, globs, directories. No args → aggregate across every open file.
call-hierarchyCallers and callees. --direction incoming / outgoing / both.
code-actionList quick-fixes / refactors / organize-imports; --apply N applies one.

tslsp-cli --help and tslsp-cli <command> --help are authoritative.

locator

Commands that need a position accept three forms, in priority order:

--file F --line L --character C   explicit LSP position
--file F --line L --symbol NAME   scan line L of F for NAME
--symbol NAME                     workspace search; exit 2 with candidates if ambiguous

Agents typically know the symbol name and line, not the column. Modes 2 and 3 cover the gap.

batch

Every read-only command accepts a list. One CLI call → N parallel LSP queries → one labelled return:

tslsp-cli find-symbol  add double sum                # multi-positional
tslsp-cli hover        --symbols User,Account,Session
tslsp-cli references   --symbols add,sum,double
tslsp-cli outline      'src/**/*.ts'                 # quote the glob
tslsp-cli diagnostics  src/api/                      # directory walk

Blocks are labelled === name ===. find-symbol serializes internally (tsgo's workspace/symbol races at cold-start); everything else fans out.

Glob and directory inputs are filtered through a source-extension set (.ts/.tsx/.mts/.cts/.js/.jsx/.mjs/.cjs) and an ignore set (node_modules, .git, dist, build, out, .next, coverage). Mention an ignored segment in the pattern itself (e.g. node_modules/**/*.ts) to include those hits.

Batched output is squeezed: clean items drop their === file === headers, all-clean batches collapse to one line, and references --summary swaps snippets for path (N): l1, l2, l3 — ~15KB → a few hundred bytes on heavily-referenced symbols.

daemon

tslsp-cli <cmd>             fresh tsgo per invocation; disposed after the call
tslsp-cli --daemon <cmd>    RPC into a per-workspace daemon

Fresh-process mode is fine for one-off calls. For a refactor loop with many calls, --daemon autospawns a per-workspace daemon on first use and reuses it after. Socket path: $CACHE/tslsp/daemon/<sha1(tsconfig-dir)>/<session>.sock (macOS ~/Library/Caches, Linux $XDG_CACHE_HOME, Windows %LOCALAPPDATA%; override with TSLSP_DAEMON_DIR).

tslsp-cli --daemon references --symbol User
tslsp-cli daemon list           # running daemons
tslsp-cli daemon restart        # after upgrading tslsp-cli
tslsp-cli daemon stop           # graceful stop for this workspace
tslsp-cli daemon kill-all       # SIGKILL every daemon

The daemon self-exits after 30 min idle (TSLSP_DAEMON_IDLE_MS); individual tsgos inside reap after 10 min (TSLSP_TSGO_IDLE_MS). Version-skewed daemons refuse new calls — run daemon restart after upgrading.

gotchas

  • @typescript/native-preview is pinned to a specific dev build. tsgo moves fast; bump it deliberately.
  • rename and rename-file write to disk. --dry-run previews first.
  • Always quote glob patterns. An unquoted src/**/*.ts that matches nothing in your shell becomes a literal argument and the LSP errors instead of the expander finding zero files.
  • One tsgo per tsconfig.json root. Monorepos pay project-load cost the first time each project is hit (~50ms small, more on large).
  • --daemon keeps files open across calls. External edits between two daemon-routed calls may briefly lag until the next file-open or didChangeWatchedFiles event.
  • Daemon stderr lives at $CACHE/tslsp/daemon/<hash>/<session>.err — first place to look if a spawn fails.
  • TSLSP_VERBOSE=1 forwards tsgo's stderr to the foreground process.
  • A homebrew-installed tsgo on PATH is ignored; tslsp-cli always uses the npm-pinned one.

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 7

Native requirements
7 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
@typescript/native-preview
Environment
{
  "local_name": "@typescript/native-preview",
  "alias": false,
  "peer_metadata": null
}
7.0.0-dev.20260506.1runtime
oxfmt
Environment
{
  "local_name": "oxfmt",
  "alias": false,
  "peer_metadata": null
}
^0.53.0development
oxlint
Environment
{
  "local_name": "oxlint",
  "alias": false,
  "peer_metadata": null
}
^1.68.0development
vitest
Environment
{
  "local_name": "vitest",
  "alias": false,
  "peer_metadata": null
}
^4.1.8development
@vitest/ui
Environment
{
  "local_name": "@vitest/ui",
  "alias": false,
  "peer_metadata": null
}
^4.1.8development
typescript
Environment
{
  "local_name": "typescript",
  "alias": false,
  "peer_metadata": null
}
^6.0.3development
@types/node
Environment
{
  "local_name": "@types/node",
  "alias": false,
  "peer_metadata": null
}
^22.19.17development

Distribution files

1 collected
Distribution 1

Source distribution

Source file
Checksums from source
{
  "shasum": "8e73ace231df3c895f7006042016b13e57342845",
  "tarball": "https://registry.npmjs.org/@0xdeafcafe/tslsp-cli/-/tslsp-cli-0.4.0.tgz",
  "fileCount": 37,
  "integrity": "sha512-GBT+sgB3MafMPX3H5Z0T38Y/OLBTzKsyp1cYY1fHIgxsu3nARJJiDCNGkbWmWgWaKS30JpoY3M7PHF8xVQiUkg==",
  "signatures": [
    {
      "sig": "MEUCIC/mpTOkJfhX/KSb8WstSAC5eUF3dxt1lhykGpNBYkiqAiEA2klIWBBDc3oaJdAocwWRMmwmTK/XyEHcWQusu/GdyvI=",
      "keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"
    }
  ],
  "attestations": {
    "url": "https://registry.npmjs.org/-/npm/v1/attestations/@0xdeafcafe%2ftslsp-cli@0.4.0",
    "provenance": {
      "predicateType": "https://slsa.dev/provenance/v1"
    }
  },
  "unpackedSize": 292388
}

Repository

PENDING
0xdeafcafe/tslsp-cli

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 23:05 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:532edc08d79d5987c2ce9dbdef660fc1a618ae8cb7f72a46cb992168715fc2d3

Other collected versions

0.6.08 Jun0.5.08 Jun0.3.029 May0.1.028 MayView all collected versions →