Skip to content

Kyle-Undefined/hlid

Repository files navigation

Hlið

Short for Hliðskjálf, Óðinn's high seat where he could see all nine realms.

Hlið is a local command center for working with an Obsidian vault through AI agents. It puts Claude, Codex, and installed Agent Client Protocol providers in one interface, with visible tool use, permission prompts, vault browsing, and the settings needed to run the whole thing.

It runs on a Windows machine, keeps its data local, and works from other devices over Tailscale. The vault can use PARA, an LLM wiki layout, or its own folder vocabulary. Hlið does not care as long as the paths are set up.

Hlið Watch overview showing activity, sessions, and vault skills

What it does

  • Keeps agent sessions around with live streaming, visible tool calls, approvals, attachments, queued follow-ups, inline questions, plan review, and subagent activity. Supported Claude and Codex chats can be forked whole, while Claude can also branch from a specific reply. Native Codex chats keep their goals and token budgets visible too. The provider, model, effort, and permission mode stay with the chat they belong to.
  • Pulls vault skills, reviewed Hlid-managed skills, provider-native imports, and slash commands into Watch and Raven, including compatible multi-skill runs.
  • Schedules one-time or repeating Routines from Watch. Each run keeps its provider context, follows a narrow unattended permission policy, and can deliver the result to Relics or the vault.
  • Points prompts at exact vault files and managed Relics through the shared @ picker. No copying paths around just to give the agent some context.
  • Lets agents publish generated HTML, PDFs, images, and reports directly into Relics from ordinary chats. The existing Relics previews remain the viewer, and publishing does not require an HTML plan turn.
  • Uses the official Obsidian CLI for the parts only Obsidian knows: the active note, indexed search, backlinks, tasks, properties, Bases, and local file history. Agents get curated tools for reading and changing the vault through Obsidian itself. Writes follow the chat's permission mode, and Raven keeps a vault activity summary of what changed.
  • Browses notes and projects, searches without getting tripped up by accents, manages attachments, and tracks usage and cost. It can pause running sessions near a provider limit, then pick them back up after the window resets.
  • Puts Claude, Codex, and installed ACP providers behind the same session interface.
  • Can route models from Forge-managed CLIProxyAPI OAuth accounts through Claude Code, Codex, and installed OpenCode ACP. Each route keeps its harness and actual model identity in Ledger.
  • Can hand a task to a fresh Windows-native Codex Computer Use worker, while keeping approvals, Umbod policy, and usage accounting inside Hlið.
  • Runs Whisper locally for editable dictation. Native Codex chats can also take a recorded audio turn or use the separately gated Raven Live mode. Completed replies can be read aloud through a local device voice, Microsoft speech on the Windows host, or supported Codex realtime audio.
  • Opens a real project shell in Raven, with an optional interactive Claude CLI mode when the full terminal makes more sense than the structured chat UI.
  • Keeps linked vaults and workspaces, provider commands, permissions, scoped MCP servers, ACP agents, provider extensions, Umbod, networking, updates, and lifecycle controls together without moving source repositories out of WSL.
  • Checks Hlið, Claude, Codex, and enabled ACP agents for updates. It shows the right command or in-app flow for the installation, but it does not silently run installers.
  • Works as a responsive PWA with built-in or custom desktop/mobile themes, pull-to-refresh, and a privacy mode for paths, filenames, and Ledger totals.

Hlið Raven conversation on a mobile display

Install it

Hlið is Windows-first and ships as one x64 executable.

  1. Grab the latest hlid-vX.Y.Z-windows-x64.exe from GitHub Releases.
  2. Run it. The executable is currently unsigned, so Windows SmartScreen may complain. Check the filename, choose More info, then Run anyway if you trust the release.
  3. Hlið copies itself to %LOCALAPPDATA%\Hlid\hlid.exe, refreshes the Start Menu shortcut, starts the local service, and opens the app in a browser.
  4. Create the app password on the machine running Hlið. It needs 12–256 characters, with no uppercase, number, or symbol ceremony.
  5. Pick the Obsidian vault, check the detected folders, choose the default provider and permissions, then pick a theme.

The default address is http://127.0.0.1:3000. It stays on the local machine until network access is turned on. The user guide covers the full first-run flow and the optional Tailscale setup.

The Obsidian CLI integration is optional. With Obsidian 1.12.7 or newer, enable Settings → General → Command line interface, then check the connection under FORGE → Workspace → Obsidian desktop. Hlid still browses the vault directly when the CLI is not available.

Where to start

  • WATCH is for quick prompts, skills, slash commands, and scheduled Routines. A run can stay in the current session or head into the background while the dashboard keeps an eye on it.
  • RAVEN is the full chat workspace. This is where the per-chat provider controls, goals, forks, voice, plans, approvals, attachments, Obsidian actions, and project terminal live.
  • VAULT browses notes, projects, memory, and skills, with a jump back into the Obsidian desktop when the CLI is connected.
  • FORGE is where all the setup lives: providers, permissions, networking, voice, provider extensions, Obsidian CLI, CLIProxyAPI, MCP, ACP, Umbod, updates, and lifecycle controls.

The user guide gets into the meat and potatoes of each page and the workflows that connect them.

Pages

Page What it is for
WATCH (/) Quick prompts, skills, slash commands, scheduled Routines, usage, MCP state, recent sessions, and vault context.
VAULT (/vault) Notes, projects, memory, skills, and a jump into the matching Obsidian desktop note.
RELICS (/relics) Hlid-owned attachments, plans, reports, and reviewed Agent Skill packages.
RAVEN (/raven) Full agent chat with provider controls, commands, goals, exact forks, voice, @ references, plans, approvals, questions, queues, and a real project terminal.
EINHERJAR (/einherjar) Extra working directories or personality/context overlays.
LEDGER (/ledger) Live-session controls, pinned and archived sessions, provider-history import, and analytics for tokens, cost, cache behavior, tools, stop reasons, context, and provider limits.
FORGE (/forge) Settings, provider extensions, integrations, access, updates, maintenance, and developer tools.

Configuration and data

The packaged app keeps its executable, config, database, downloaded voice models, and runtime data under %LOCALAPPDATA%\Hlid.

hlid.config.toml holds the vault layout, providers, server and TLS ports, network access, attachments, voice, UI preferences, and registered agents. Most of that can be changed in Forge. If a setting shows a restart marker, it does not take effect until Hlið restarts. Server, ACP, and Umbod changes are the main ones that need it.

Changing the working context is different. Reload that provider session so the agent gets the new context. A browser refresh only reloads the UI.

pricing-overrides.toml, managed from FORGE → Developer → Pricing, adds effective-dated model rates and aliases without touching the built-in pricing code. Old priced Ledger rows stay frozen, which keeps historical accounting honest.

Forge can also keep separate custom palettes for desktop and mobile. Codex Computer Use model and effort defaults live under FORGE → Agents → Computer Use and apply to the next one-shot Windows worker.

There is a small starting point in hlid.config.example.toml. The Obsidian CLI bridge covers the optional desktop setup, note actions, agent tools, and approval behavior. The CLIProxyAPI integration covers the routed harnesses, OAuth accounts, and exactly what Hlid records for them.

Remote access and security

Hlið uses one owner password. It stores an Argon2id hash, then gives a successful browser an opaque HttpOnly trusted-device session for 30 days. The first password can only be created on the Hlið machine, and remote password login only works over HTTPS.

For another device, open FORGE → Access → Network and follow the guided Tailscale/TLS setup. By default, Hlið accepts localhost and Tailscale CGNAT peers. Regular RFC1918 LAN devices need the separate local-network switch. The same server-side session protects HTTP routes, APIs, chat WebSockets, and terminal WebSockets.

Lost the password? Run this on the Hlið machine and restart it:

hlid.exe auth reset

That removes the credential and every trusted-device session. It leaves the vault and app config alone.

Working from source

You need Bun 1.3.14 or something compatible, plus a local Obsidian vault for interactive testing.

bun install
bun run dev:all

dev:all starts the Vite UI and the Bun API/WebSocket server. The TLS proxy joins in when certificate paths exist in hlid.config.toml.

The useful checks are pretty straightforward:

bun run check          # Biome, TypeScript, and changed-code Fallow analysis
bun run test           # Vitest suite
bun run test:db        # Bun-only database and auth tests
bun run validate       # Static checks, merged coverage, and full Fallow analysis
bun run build:win      # Windows executable build

Ledger's Import provider history action discovers Claude CLI/SDK/Cowork and Codex CLI/Desktop/editor sessions on Windows and configured WSL distros. It stores the transcripts and usage in Hlid, then makes those sessions resumable in Raven. Sessions created through Hlid's Codex bridge are excluded so the same work does not get counted twice. The dry-run-first CLI remains available for advanced recovery work.

bun scripts/import-provider-history.ts --db /path/to/hlid.db \
  --codex-root /path/to/.codex/sessions \
  --claude-root /path/to/.claude/projects

# Discover Claude and Codex history automatically.
bun scripts/import-provider-history.ts --db /path/to/hlid.db \
  --discover-claude --discover-codex

bun scripts/repair-codex-usage.ts --db /path/to/hlid.db \
  --rollout-root /path/to/.codex/sessions

bun scripts/repair-claude-usage.ts --db /path/to/hlid.db \
  --transcript-root /path/to/.claude/projects

Each one writes a JSON manifest first. Read it. If the plan looks right, run the same command with --apply. Apply mode verifies a standalone SQLite backup before it touches hlid.db. Current imports retain their source surface and can be resumed in Raven. Older usage-only rows stay read-only until the original transcript is found and imported again. The same provider-history discovery is available from Ledger's actions menu, where Hlid handles the backup automatically.

Under the hood, Hlið uses TanStack Start/Router, React, a Bun server, SQLite, WebSockets, and an AgentProvider abstraction. The Vite client and runtime assets get embedded into the executable, so a release does not need a loose dist folder sitting beside it.

Tagged releases validate on Linux, build and smoke-test the executable on Windows, then publish the executable and its SHA-256 checksum. The release workflow is the source of truth there.

License

MIT

About

A Windows command center for Claude, Codex, and ACP agents working across your Obsidian vault and projects, with persistent chats, visible tool use, approvals, terminals, and usage analytics.

Topics

Resources

Stars

Watchers

Forks

Releases

Contributors

Languages