Releases: iiTzSenn/Sens
Release list
v0.8.0 — dynamic CLI command suggestions
Added
- Dynamic command suggestions — every query command now ends with context-aware
next steps, with your own argument spliced in: afterfind loginit suggests
sens who login/sens explain login; afterdead-codeit points at
sens who <candidate>to confirm before deleting. When a query finds nothing, the
suggestions turn into help instead of a dead end (e.g.findwith no match nudges you
tosens exists <keywords>or to reindex). Terminal-only — nothing here reaches the
model over MCP or the hook.
v0.7.0 — redesigned CLI, agent logos, shareable dashboard
Added
- Shareable dashboard —
sens dashboardnow prints Local / Network / Public URLs
(Vite-style) with a scannable QR code.--hostexposes it on your LAN;--tunnel
creates a public URL via cloudflared or ngrok if either is installed — and when
neither is found, prints a "How to install" line with clickable links to their
official pages. Both are opt-in and guarded by an access token in the link, since the
dashboard can write your config; by default it stays bound tolocalhost.
Changed
- Redesigned terminal UI — every command now shares one modern look, modeled on
Claude Code / gh / Vercel CLIs: a consistentsens › <command>header, a braille
spinner with live status while indexing (resolving to✓/✗in place), 2-space
hierarchy with meaningful glyphs (● ○ › → ⎿), thin─separators, rounded summary
boxes, and color that carries meaning (green ok, red error, yellow warning, gray for
paths/counts/timings) around a single brand accent. Errors are now a single clear line
with an optional hint — no raw stack traces unless you pass--verbose. All output is
centralized in one module (src/cli/ui.ts) so the commands stay visually identical.
Crucially, this styling is terminal-only: the MCP server and the answering hook
still return plain text, so nothing here changes (or bloats) what the model reads.
Internally,picocolorswas replaced bychalk+ora+boxen.
v0.6.0 — modular rules at session start, multi-agent init, dashboard rules manager
Added
- Modular working rules — the rules are now composable modules (search-first, minimal, no-orphans, optimization, plus opt-in error-handling and testing). A project enables/disables modules or adds its own in
sens.config.json;sens rules --listshows the state of each. - Rules applied automatically at session start —
sens initnow also wires aSessionStarthook that injects the active rules at the start of every Claude Code session, so they are in force without the model having to load anything. - Multi-agent setup —
sens init --agent codex|copilot|cursor|allwrites the sens usage guide + active rules into that agent's instructions file (AGENTS.md,.github/copilot-instructions.md,.cursorrules), between markers so re-running just refreshes the block.--agent claude(default) still installs the skill + hooks. - Dashboard rules manager — a "Working rules" panel to view every module, toggle it on or off, and add or remove your own rules, persisted to
sens.config.json.
npm: npm i -g sens-mcp@0.6.0 · Full changelog in CHANGELOG.md
v0.5.0 — sens init, an answering hook, and a skill
Added
sens init— one command to set sens up in a project: builds the index, installs the skill into.claude/skills/sens/, and wires thePreToolUsehook into.claude/settings.json(merging, never clobbering existing settings). This is the recommended setup path; the MCP server stays available for hosts that only speak MCP.- Skill — sens now ships as a Claude Code skill (
sens skillprints it, or--writeinstalls it). Unlike the always-loaded MCP tool schemas, a skill's guidance only enters context when relevant, so it costs no tokens on turns that don't touch code. It is composed from the same working rules assens rules.
Improved
- The hook now answers, not just nudges. When the model is about to grep for a symbol sens knows, the hook substitutes the grep and returns the full
who_usesresult; a Read of an indexed file gets that file's outline injected; anything sens can't answer falls back to a one-line reminder. - One shared query path (
runQuery) now backs the CLI, the MCP server and the hook, so usage logging and output formatting are identical across all three — andsens usagerecords CLI- and hook-driven calls too, not only MCP.
Fixed
sens --versionreported a hard-coded0.0.1regardless of the real version; it now derives frompackage.jsonat build time and tracksnpm version.
npm: npm i -g sens-mcp@0.5.0 · Full changelog in CHANGELOG.md
v0.4.0 — symbol call graph (explain/path), nudge hook, graph export
Added
- Symbol-level call graph — references now record their caller (the symbol whose body contains each use), turning the flat usage list into a real call/reference graph. Two new queries expose it:
explain(a symbol's callers and callees in one call) andpath(the shortest chain of calls connecting two symbols). Available as CLI commands (sens explain,sens path) and MCP tools (explain_symbol,symbol_path);who_usesnow also shows which symbol each use sits in. - Nudge hook —
sens hookis aPreToolUsehook that gently reminds the model to reach for sens (find_symbol,file_outline,explain_symbol, …) before it greps or reads whole files. Fires at most once per session per tool and stays silent on non-source files. - Graph export — the dashboard can export the dependency graph to GEXF, GraphML, DOT, JSON and a CSV edge list via
/api/export, so it opens in Gephi, yEd, Cytoscape or Graphviz.
Improved
- Faster queries — the query engine builds its name/file/id lookups, the import adjacency and the call graph once up front (O(1) lookups), and the engine is memoized per project so repeated MCP calls skip re-reading and re-parsing the index from disk.
npm: npm i -g sens-mcp@0.4.0 · Full changelog in CHANGELOG.md
v0.2.0 — 10 languages, working rules, usage log, smarter dead code
✨ Highlights
10 more languages
Beyond JavaScript/TypeScript, Sens now indexes Python, Go, Rust, Java, C#, C, C++, PHP, Ruby and Kotlin via tree-sitter. A mixed repo (e.g. a TS frontend + a Python or Go backend) is indexed as a single project. Adding a language is now a small self-contained parser under src/indexer/languages/.
Working rules the model follows
The MCP server now hands the model a concrete set of coding rules — reuse what exists instead of duplicating, leave no orphan code, keep it minimal but maintainable — each tied to the Sens tool that lets it verify the rule. They load automatically over MCP; you can also print them with sens rules or inject them with the /sens rules prompt.
Know it's actually being used
Every MCP tool call is now recorded to .sens/usage.jsonl. Run sens usage to see exactly which tools the model called, when, and with what arguments — proof, not faith.
Smarter dead_code
dead_code no longer flags code that is used but was invisible to static analysis:
- dynamic
import("./x") export * from "./y"barrels and named re-exports- names referenced via string / reflective access (
obj["name"], registries) - the same, for quoted names in the tree-sitter languages
📦 Install
npx sens-mcp@0.2.0 mcp # run the MCP server
# or add to .mcp.json: { "command": "npx", "args": ["-y", "sens-mcp", "mcp"] }⚠️ Notes
- Swift is intentionally not included: its tree-sitter grammar crashes Node's WASM teardown. Every other listed language is fully supported.
- The on-disk index schema was bumped — caches rebuild automatically on first run after upgrading.
Full changelog: 0.1.0...v0.2.0