for Claude Code · macOS

deixis

A visual surface for terminal Claude Code. The agent draws its plan to a browser canvas, every session reports its own status and cost, and a menu-bar glyph tells you which one needs you.

deixis — the pointing words: this, here, look.

GitHub → open-source · runs on your machine
localhost:3939
Deixis
3 sessions 2 working 118.0k tok $0.53
auth-refactor working
84.2k tok$0.42
Edit
Rotating refresh tokens on a 30-day window — writing the failing tests first.
BashRead◆ Progress Update
Progress1/4
  • draft spec
  • write tests
  • wire routes
  • run e2e
Plan. Refresh tokens rotate on every use; reuse of a retired token revokes the whole family via auth/rotate.ts.
pollar-chat working
21.8k tok$0.07
◆ Render Markdown
ReadBash
Progress1/3
  • fetch threads
  • summarize
  • render digest
api errored
12.0k tok$0.04
Bash
Error: connect ECONNREFUSED 127.0.0.1:5432 — is Postgres running?
specs/token-rotation.md

Token rotation

Refresh tokens rotate on every use within a 30-day sliding window. Reuse of a retired token is treated as compromise: revoke the whole family and force re-authentication.

  • one active token per family
  • 30-day sliding expiry
  • reuse ⇒ revoke + audit log
Reviewing specs/token-rotation.md — reply in your Claude Code session.

A live replica of the dashboard at localhost:3939 — running on a script.


01 — canvas

The agent draws, instead of you scrolling.

Four MCP tools let a session render Markdown, a live progress checklist, and a full document to a card that survives across turns. You glance instead of hunting the transcript for where it's at. The dashboard defaults to a single-column feed; a Pinterest-style masonry grid is one click away in Settings.

render_markdown(...) → notes & explanations progress_set([...]) → the checklist progress_update(id, …) → tick one step render_file("spec.md") → open it in the reading view
02 — review

The spec it wrote, shown — not filed away.

When the agent has a spec or plan for you to read, render_file opens it in a full reading view instead of saving a Markdown file you'd hunt down in an editor. It asks for your verdict in a plain message — so the approval relays through Claude Code Remote Control and you can read and accept it from your phone, away from the keyboard.

auth-refactor — reviewing ─────────────────────────── # Spec: token rotation Approve to proceed → reply in terminal · or from phone
03 — telemetry

Every session reports itself.

A hook posts each session's lifecycle — working, waiting, errored, finished — and a transcript reader adds tokens and an equivalent API cost. Nothing scraped; the data was already in the transcript. Cost is a usage gauge, not your subscription bill.

deixis working 678k ctx pollar-chat waiting 65k ctx claude idle 48k ctx
04 — menu bar

One glyph that tells you when to look.

A SwiftBar plugin keeps it in the macOS menu bar: ◆ when everything's calm, ⚠ the moment a session is waiting for input or has errored. Click for the list — status, current tool, time in state, context size. No dollars in the bar, on purpose.

⚠ 1 ─────────────────────────── api errored 2m Bash deixis working 9s Edit · 678k claude idle 20m · 48k
how it works

One hub, two pipes, two surfaces.

Claude Code session ├─ MCP shim ──┐ └─ hook ──────┼──→ hub :3939 ──→ dashboard └───────→ menu bar

A long-running hub holds state in memory and pushes updates over SSE. The MCP shim and the hook both report under Claude Code's real session id, so the agent's canvas and its telemetry land on one card.

install

Clone, init, done.

# macOS · Node 20+ · pnpm
git clone https://github.com/alcides-collective/deixis
cd deixis && pnpm install

node packages/cli/dist/index.js init      # hub + tools + telemetry hooks
node packages/cli/dist/index.js menubar   # SwiftBar glyph (needs SwiftBar)

macOS only. The menu bar needs SwiftBar. Brand fonts (Overused Grotesk) are proprietary — the installer copies your own licensed copy locally and never ships them.