Columbia

Monorepo inventory and project status. Four independent projects under projects/; the repository is the source of truth for each.

Projects
4
console · drive · pages · token-tracker
Tracked files
666
under projects/
Source lines
149,509
.ts .svelte .go .js
Open PRs
2
#40 token-tracker · #43 pages

Index

Projects by deployment state
Project Stack Surfaces Commits Last change State
Console TypeScript, Effect v4, SvelteKit, Expo core · web · mobile · desktop (stub) 8 2026-07-09 Built, not installed
Drive TypeScript, SvelteKit, Workers, Postgres, R2 web · REST · CLI · MCP 21 2026-07-09 Production
Pages Go 1.25, SQLite, Railway, Workers server · CLI · theme · skill · release site 20 2026-07-12 Production
Token Tracker Go 1.26.4, SvelteKit SPA, SQLite, Expo, Workers host · collector · CLI · mobile · dist site 79 2026-07-13 Production, private

Commit counts are monorepo commits touching each path; Drive, Console, and Pages carry longer histories from the repositories they were imported from before consolidation.

Console

A dedicated multi-device interface for the Columbia/Hermes agent, replacing Discord as the primary surface.

Path
projects/console/
Version
0.1.0 · private, no public deployment
Size
177 files · 34,855 lines · 100 TS · 16 Svelte · 9 docs
Runtime
Node ≥ 22, Effect v4 core, SvelteKit web, Expo SDK 56 mobile
Store
Local SQLite: disposable transcript mirror, separate durable operational and auth databases

Composition

  • apps/core — Effect v4 sync server on 8700; typed, allowlisted Hermes client; SQLite mirror; FTS5 search indexes.
  • apps/web — SvelteKit (Node adapter today, Cloudflare Worker target retained); /v1 proxied through a fixed service binding.
  • apps/mobile — Expo native app for iPhone and iPad; bearer pairing, SecureStore credentials, SSE replay with polling fallback.
  • apps/desktop — Electron shell; README stub only, deliberately not scaffolded.
  • packages/protocol — shared Effect HttpApi contract and schemas.

Implemented

  • Session management: create, full-history fork, rename, pin, archive/restore, lineage, transcript FTS search.
  • Managed runs on an Activity page: live status, bounded tool context, allow-once/deny approvals, stop controls, restart recovery, idempotent receipts.
  • Device pairing: 16-symbol ten-minute codes, 180-day digest-only credentials, independent revocation, exact-origin CSRF, protected HTTP and SSE.
  • Private Linux/Tailscale hosting path: loopback-only services, staged installer, admin wrapper, durable database layout.
Current boundary

Every phase through private Linux hosting is implemented and tested; no live installation has been recorded. The next rung is the Mac mini Tailscale smoke — pair, reload, SSE reconnect, revoke — before any Cloudflare Tunnel or Workers VPC resource is provisioned.

Not implemented

  • Workstreams, tags, cross-session relationships, decisions.
  • Electron desktop shell; queued behind a proven authenticated remote endpoint.
  • Discovery of Discord/external runs and detached terminal processes — blocked by the current Hermes API.
  • Mobile push notifications; deferred.

Drive

A durable private file library for agents and people. Stable IDs, retained version history, four surfaces over one domain model.

Path
projects/drive/
Production
columbiadrive.net
Size
194 files · 64,331 lines · 105 TS · 18 Svelte · 15 docs
Runtime
SvelteKit on Cloudflare Workers; Node ≥ 22 for cdrive
Store
PlanetScale Postgres through Hyperdrive (Drizzle), private R2 objects, KV for disposable edge state
Auth
Better Auth email/password; one account per instance, claimed at first boot

Composition

  • apps/web — file-management website: files, item, deleted, user, settings, keys.
  • apps/content — public content worker serving item bytes at unguessable URLs.
  • apps/jobs — background work, including generated metadata extraction.
  • packages/cdrive — CLI; cdrive mcp also runs a local stdio MCP server.
  • packages/contracts, packages/server — shared schemas and server domain.
  • openapi.json — 109 KB generated document, checked in CI against the implementation.

Model

Flat collection, no folders. UUIDv4 item keys; filenames are display names and are not unique. Updating an item creates a retained version at the same stable URL, addressable by ?version=<sequence>. Individual versions cannot be deleted; all versions persist until the item is deleted. Deletion is recoverable trash for 30 days. Visibility is one item-level boolean; public access is anonymous, unlisted, and excluded from search indexing. 30 GB per file, 500 GB per user including versions and trash.

Complete

Web application, REST and RPC APIs, CLI, MCP server, versioned storage, search, authentication, and the self-hosting path are all implemented and running in production. Recent work has been auth consolidation — allowlist replaced by a single atomic per-instance claim — and documentation.

Thirteen locked-decision and specification documents live in docs/; they are constraints on future work, not suggestions. The Effect v4 migration recorded in docs/effect-v4-migration-plan.md landed as a seven-PR stack and is fully merged.

Pages

A self-hosted service for publishing HTML reports and returning a shareable URL. This document was published through it.

Path
projects/pages/
Content origin
columbia-pages.davis7.sh
Release site
pages.col-agents.com
Control origin
Railway deployment, separate host from content
Size
70 files · 20,801 lines · 22 Go · 9 TS · 11 docs
Runtime
Go 1.25, modernc.org/sqlite (no CGO), single container with a /data volume
License
Present — the only project with one

Composition

  • cmd/server — HTTP service: authenticated API, public homepage, page and version URLs.
  • cmd/cpages — CLI: login, status, create, list, get, update, delete, skills.
  • internal/store — page HTML, repository provenance, metadata, device tokens in one SQLite database.
  • theme/theme.css — house theme, embedded in the server binary; themed pages store body HTML and are wrapped at serve time.
  • .skills/columbia-pages — the agent skill, embedded in the CLI and installable to Claude Code, Codex, and ~/.agents/skills.
  • site/ — SvelteKit release site on Cloudflare Workers; serves the installer and versioned binaries from R2.

Security posture

Published HTML is active and unsanitized, so content and control never share an origin. Device tokens are scoped, revocable, 90-day, and stored at mode 0600. Login is a browser device-authorization flow — the admin passcode is never handed to an agent. The public homepage enumerates every unexpired page; page IDs are identifiers, not access control.

Recently landed

  • Public page index with version history (#41).
  • Grouping by --repo owner/name, with per-version repository labels (#42).
  • cpages skills install for the embedded agent skill (#39).
In flight — PR #43

Hosted MCP server, +4,004 / −214. A stateless MCP 2025-11-25 Streamable HTTP endpoint at the control origin, exposing page CRUD, versions, and token operations as typed tools, with OAuth discovery, dynamic client registration, PKCE, and audience-bound scoped tokens. Adds keyset pagination to page and version lists. Both review bots pass; awaiting merge.

Token Tracker

Hourly aggregate token usage from local AI coding tools. Raw history stays on the device; only counters leave it.

Path
projects/token-tracker/
Version
v0.4.0
Host
Private, self-hosted on siva:8443 behind Tailscale Serve
Distribution
tokens.col-agents.com
Size
225 files · 29,522 lines · 71 Go · 58 TS · 11 Svelte
Runtime
Go 1.26.4, single ctoken binary with the SPA embedded
Adapters
Codex, Claude Code, Pi, Factory/Droid, Cursor (best effort)

Composition

  • cmd/ctoken — one binary, role chosen at setup: host or node. Subcommands for connect, collect, device, doctor, pricing, setup, upgrade, uninstall.
  • internal/ — adapters, collector, config, domain, pricing, report, server, setup, storage, subscriptions.
  • web/ — SvelteKit SPA built with adapter-static and embedded into the Go binary; a stale build fails the compile loudly rather than shipping an empty UI.
  • apps/mobile — Expo client reading the same aggregate report through GET /api/mobile.
  • site/ — Cloudflare Worker serving the one-line installer and release binaries.

Privacy boundary

The server stores device, project, agent, model, quality, UTC hour, token-category counters, and session starts. It never stores prompts, transcript content, local paths, or session and event identifiers. The service binds to 127.0.0.1; a chosen HTTPS port is published with Tailscale Serve, never Funnel. Ingestion additionally requires a revocable per-device bearer credential. Data quality is labeled at the source: exact, estimated-time, or lower-bound.

Trajectory

The largest and most active project — 79 commits, and every merged PR since 2026-07-09 except the Pages work. The Go rewrite replaced a SvelteKit + tsx CLI installed by roughly 650 lines of bash requiring git, pnpm, and Node 24 on every host; it landed as a six-PR stack with no data migration, backfilling instead from each tool's local history.

Release line
VersionContentsState
v0.2.0Go rewrite complete; CLI renamed to ctokenTagged
v0.3.0–v0.3.2Subscription quota dashboard for Claude Code and Codex; draining meters; shared-credential setupSuperseded
v0.4.0Multi-account OAuth sign-in; Bars/Lines chart toggle on UsageCurrent
In flight — PR #40

Grok Build X subscription quota, +898 / −58. xAI as a third quota provider, enrolled by OAuth device-code grant rather than the paste-back PKCE flow the other two use. Verified live against the real billing endpoint; both review bots pass. Open since 2026-07-12 — the longest-standing open branch.

Open queue

Open pull requests
PR Project Diff Opened Checks
#43 Hosted MCP server Pages +4,004 / −214 2026-07-13 Passing
#40 Grok quota Token Tracker +898 / −58 2026-07-12 Passing

Known work not yet started

  • Console — live Linux/Tailscale installation; Mac mini smoke test; Cloudflare Tunnel and Workers VPC deployment; workstreams and tags; Electron shell.
  • Token Tracker — the siva host upgrade to v0.4.0 and legacy subscription-ACL cleanup, both needing interactive sudo.
  • Root — private vulnerability reporting must be enabled in repository settings before a public release; no repository-wide license has been selected.

Root

The root holds architecture, coordination, and device setup only; projects/ intentionally contains no root-owned implementation. The root is not a JavaScript workspace — every project's commands run from its own directory.

Package manager
Vite+ (vp / vpr), pnpm underneath, per-project lockfiles
Toolchain
Node ≥ 24, Go ≥ 1.26.4, Git
Worktrees
scripts/setup-worktree.sh — copies only missing, ignored .env* and .dev.vars* at mode 0600, then installs locked dependencies. Never overwrites, never prints values.
Conventions
One project per commit; feature branches and PRs, never direct pushes to main; project checks run before a PR opens

Two of the four projects consumed subtrees or submodules before consolidation. Those imports are retired: Columbia is now the single source of truth, and the standalone repositories are archived.