Skip to content

jruck/hilt

Repository files navigation

🗡️ Hilt

A shared context space for you and your AI agents. A handle by which to wield AI for good.

Hilt is a viewer and light editor built on top of the file system — the common interface where humans and agents already meet. It doesn't have its own chat. You talk to your agents wherever you already do: Claude Code, Codex, OpenClaw, or whatever you use. Hilt gives both of you a structured window into the same knowledge base, tasks, briefings, and configuration — so your agents can keep you updated, calibrate their work with you, surface things that need your attention, and help you track your own priorities.

It's designed to be used by agents as much as by humans. Your agents write briefings, manage tasks, and update project status. You read, review, adjust, and steer. Hilt is where that loop becomes visible.

Contents

Views

Briefing

Briefing view

Daily briefings generated by your agents. Date selector for browsing past briefings, full GFM markdown rendering, unread indicator (blue dot on the tab), and read state tracking persisted across sessions.

Bridge

Bridge view

Weekly planning and project management. Drag-and-drop task ordering with checkboxes and inline editing. Project board with status columns (considering, refining, doing). Rich text notes with inline images, tables, and file uploads (TipTap editor). Tasks can link to project folders. Real-time updates via WebSocket file watching.

Docs

Docs view

Browse and edit markdown and code files in your knowledge base. Collapsible, resizable sidebar with file tree. MDXEditor for markdown, CodeMirror for 30+ code file types. Obsidian-style [[wikilinks]] with vault-relative resolution. Renders images, PDFs, CSVs, and Mermaid diagrams inline. Code block copy button on hover. Per-folder sorting (A-Z or recent). Deep linking via ?doc=path.

People

People view

Contact directory and meeting timeline. Three-column layout: people list, meeting feed, and meeting detail. Tracks inline meeting notes (dated ### YYYY-MM-DD entries in each person's markdown file) and recorded meetings (standalone files in meetings/ matched by name). "Next" section for prepping upcoming conversations. Filter meetings by written or recorded. Supports both individual people and recurring group meetings.

Stack

Inspect and edit Claude's configuration across all four layers (System, User, Project, Local). Browse CLAUDE.md files, settings, hooks, commands, skills, agents, MCP servers, and plugins. Inline editing for markdown and JSON. Search and filter by name or type.

Navigation

Breadcrumb nav for folder hierarchy. Pinned folders with custom emoji icons. Global search across all views. URL-based routing for bookmarking and browser history. "+" button to create Bridge tasks from anywhere.

Desktop App

Native macOS app via Electron with back/forward navigation (Cmd+[/] and trackpad swipe). DMG installer for easy distribution.

CLI Navigation

Any Claude session (or script) can tell the running Hilt app to navigate to a specific file, person, or view:

PORT=$(cat ~/.hilt-ws-port)

# Open a file in Docs view
curl -s -X POST "http://localhost:$PORT/navigate" \
  -H "Content-Type: application/json" \
  -d '{"view":"docs","path":"/Users/me/work/bridge/meetings/2026-03-04/standup.md"}'

# Focus on a person
curl -s -X POST "http://localhost:$PORT/navigate" \
  -H "Content-Type: application/json" \
  -d '{"view":"people","path":"/art-vandelay"}'

# Switch to Bridge view
curl -s -X POST "http://localhost:$PORT/navigate" \
  -d '{"view":"bridge"}'

Views: bridge, docs, stack, briefings, people. The path field is optional — omit it to just switch views. docs and stack use absolute file paths; people uses slug paths (e.g., /art-vandelay). In Electron, the window auto-focuses.

A /hilt skill is included at .claude/skills/hilt/ — symlink it to ~/.claude/skills/hilt to make it available globally. Then any Claude session can respond to "show me my last meeting" or "pull up Art Vandelay" by discovering the right file and navigating Hilt to it.

Getting Started

Prerequisites: Node.js 18.18+ (download or use nvm) and the Claude Code CLI.

Install

git clone https://github.com/jruck/hilt.git
cd hilt
npm install

Configure

cp .env.example .env

Edit .env with your settings:

Variable Required Description
HILT_WORKING_FOLDER Yes Your working folder — the top-level directory where your knowledge base, code, and other important context live downstream (e.g., ~/work or ~/projects). Not your home folder.
BRIDGE_VAULT_PATH No Path to your knowledge base (weekly tasks, projects, notes). Only needed if it lives outside your working folder. Defaults to HILT_WORKING_FOLDER.
NEXT_PUBLIC_REMOTE_HOST No Hostname for remote access (e.g., a Tailscale machine name). When set, Hilt shows a local/remote switcher.

Tip

Want to try it first? Set HILT_WORKING_FOLDER=./docs/demo to explore Hilt with sample briefings, tasks, projects, people, and meetings — no setup needed. This is the same content shown in the screenshots above.

Run

The best way to use Hilt is as a native macOS app in dev mode — live reloading, so you see changes from your agents in real time:

npm run app
open dist/Hilt.app

This creates a dev-mode .app you can drag to your Dock and launch from Spotlight or Raycast like any other app. Re-run npm run app after changing Electron code (UI changes hot-reload automatically).

You can also run it in the browser:

npm run dev:all

Open http://localhost:3000. A compiled Electron build (npm run electron:build) exists for wider distribution but isn't necessary for day-to-day use.

Folder Structure

Hilt reads from a known folder structure inside your working folder (or BRIDGE_VAULT_PATH if set separately). You can create these yourself, or let your agents create them as they produce output.

your-working-folder/
├── briefings/                 ← Briefing view: daily markdown files
│   └── 2026-02-17.md          (one per day, YYYY-MM-DD.md)
├── lists/
│   └── now/                   ← Bridge view: weekly task lists
│       └── 2026-02-17.md      (one per week, YYYY-MM-DD.md)
├── people/                    ← People view: contact directory
│   ├── index.md               (directory listing with descriptions)
│   └── art-vandelay.md        (person file: Next topics, dated notes)
├── meetings/                  ← People view: recorded meeting files
│   └── 2026-02-11/
│       └── art-vandelay__elaine-benes.md
├── projects/                  ← Bridge view: project folders
│   └── my-project/
│       └── index.md           (frontmatter: status, area, tags)
├── thoughts/                  ← Bridge view: ideas and backlog
│   └── some-idea/
│       └── index.md           (frontmatter: status, icon, created)
├── libraries/                 ← Shared libraries (each its own git repo)
│   └── my-library/
│       ├── projects/
│       │   └── sub-project/
│       │       └── index.md
│       └── ...                (library's own structure)
└── meta/                      ← Templates and operating protocols
    └── templates/
        └── weekly-list.md

Most folders are optional — if they don't exist, the corresponding view section is simply empty. The Docs view browses any folder you point it at; it has no fixed structure requirements.

Briefings (briefings/YYYY-MM-DD.md) are markdown files with optional YAML frontmatter (title, summary). Your agents write these to keep you updated.

Weekly lists (lists/now/YYYY-MM-DD.md) contain ## Tasks and ## Notes sections with checkbox task items. Hilt reads the most recent file.

People (people/*.md) are person files with ## Next (upcoming topics) and ## Notes (dated ### YYYY-MM-DD meeting entries). The people/index.md file maps slugs to one-line descriptions. Meeting files in meetings/ are matched to people by name — filenames like art-vandelay__elaine-benes.md link to both people.

Projects (projects/*/index.md) use frontmatter to track status (considering, refining, doing, done), which maps to columns on the project board.

Thoughts (thoughts/*/index.md) use frontmatter status (next, later) for prioritization.

Libraries (libraries/) are for external, shared libraries. Each library should be its own git repository — the libraries/ folder itself is gitignored so its contents don't get committed to your personal knowledge base. Each library is shared with whoever is appropriate for that library's scope. Hilt's views look across both your personal folders and all libraries, so you get a unified view.

Meta (meta/) holds templates and operating protocols for how your agents generate content. The meta/templates/weekly-list.md template defines the structure for new weekly task lists. You can add other templates and protocol documents here for your agents to reference.

A note on agent protocols: Hilt defines the folder structure and file formats, but the instructions that tell your agents how to generate content — when to write a briefing, how to break down a project, what to put in a weekly list — currently live outside of Hilt, in each agent's own configuration (CLAUDE.md files, system prompts, custom skills, etc.). Over time, we'd like to bake the common protocols into Hilt itself. The meta/ folder is a starting point.

Architecture

graph TD
    subgraph Browser["Browser (localhost:3000)"]
        App["Next.js React App<br/>Briefing · Bridge · Docs · Stack"]
    end

    App --> API["Next.js API<br/>port 3000"]
    App --> WS["WebSocket<br/>port 3001"]
    App --> Events["Event Server<br/>port 3002"]

    API --> Vault["Bridge Vault<br/>(configurable)"]
    WS --> Config["Claude Config<br/>~/.claude/"]
    Events --> Watchers["File Watchers<br/>Real-time events"]
Loading

Tech Stack

Layer Technology Purpose
Framework Next.js 16 + React 19 UI and API routes
Language TypeScript 5 Type safety
Styling Tailwind CSS 4 Utility-first CSS
Drag & Drop dnd-kit Task and folder reordering
Bridge Editor TipTap Rich text editing for tasks and notes
Docs Editor MDXEditor + CodeMirror Markdown and code file editing
Data Fetching SWR Server state with WebSocket-driven updates
WebSocket ws Real-time file change events
Validation Zod Schema validation

Scripts

Command Description
npm run app Build dev-mode macOS app (dist/Hilt.app)
npm run dev:all Start development in browser (Next.js + WebSocket + Event servers)
npm run build Production build
npm run lint Run ESLint
npm run electron:dist:mac Build production macOS app (rarely needed)

Contributing

Before making changes:

  1. Read docs/ARCHITECTURE.md for system context
  2. Check docs/CHANGELOG.md for recent changes
  3. For UI work: Read docs/DESIGN-PHILOSOPHY.md for design preferences

After completing work:

  1. Update docs/CHANGELOG.md under [Unreleased]
  2. Update relevant docs if architecture/API/types changed

Detailed documentation in docs/: Architecture · API · Data Models · Components · Development · Design Philosophy · Changelog

License

MIT

About

A handle by which to wield AI for good.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors