Orchestration-first IDE for spec-driven AI development
Project description
Hangar
The orchestration-first IDE for spec-driven AI development.
Plan specs. Track dependencies. Run agents. Review changes. Ship.
The code editor is the agent. You're the architect.
What is Hangar?
Hangar is a visual control surface for Beads + OpenSpec workflows. Instead of managing specs and task graphs through CLI commands, you get a real-time dashboard that covers the full development lifecycle — from initial idea to shipped feature.
The interface is split into three zones:
- Left sidebar — Ready queue (unblocked tasks) and completed epics
- Main content — Switchable between Specs (browse/manage OpenSpec changes) and Tasks (dependency DAG)
- Bottom panel — Terminal, Review, Timeline, Stats
Everything updates live. When an agent closes a task in the terminal, the DAG redraws, the timeline gains an entry, and stats recalculate — no manual refresh needed.
Specs — Plan What to Build
The Specs tab is a first-class view for browsing and managing OpenSpec changes. Each change is a rich card showing status, artifact availability, and task progress.
Click into any change to see its full detail view with breadcrumb navigation, a summary header with completion ring, and tabbed artifact viewer for Proposal, Design, Specs, and Tasks documents.
Spec Wizard — AI-Powered Planning
The Spec Wizard is a step-by-step flow where you describe what you want to build, an AI agent generates each OpenSpec artifact, and you review and approve at every stage:
Describe intent -> Agent drafts Proposal -> You review -> Approve
Agent drafts Specs -> You review -> Approve
Agent drafts Design -> You review -> Approve
Agent drafts Tasks -> You review -> Approve -> Import to Beads
Each stage is a review gate: approve, edit inline, or regenerate with feedback. The wizard chains context — each artifact builds on approved predecessors.
See the Spec Wizard Guide for details.
Tasks — See the Dependency Graph
The Tasks tab renders the full Beads dependency graph using ELK.js with hybrid node design: phase-colored stripes, task number panels, 2-line title wrapping, status pills, and smooth bezier edge routing.
Click any node to highlight its dependency chain and open the detail panel with metadata, dependency navigation with status badges, and close reasons.
9 phase-colored categories (Foundation through Polish) with named aliases shown in legends and tooltips. Ready queue in the sidebar shows unblocked tasks sorted by priority.
Terminal — Run Any Agent
The embedded xterm.js terminal is agent-agnostic. Run any CLI tool:
| Agent | Usage |
|---|---|
| Claude Code | claude "Work on task bd-x1y2" |
| Codex CLI | codex --full-auto "Implement auth" |
| Aider | aider --auto-commits |
| Plain bash | bd close bd-x1y2 --reason "Done" |
Expand the terminal to fill the entire main area for focused agent interaction.
Action-to-Terminal Bridge — Sidebar buttons paste pre-formulated prompts into the terminal (e.g., "Claim Task" pastes bd update <id> --claim). The user always presses Enter.
Timeline & Stats — Track Everything
Timeline — Chronological event feed of all task activity (created, claimed, closed) with inline close reasons. Click any event to jump to that task in the DAG.
Stats — Aggregate project metrics at a glance: completion rate, average lead time, throughput, per-epic breakdowns with progress bars.
Close Reasons — Every bd close --reason "..." appears as a lightweight changelog entry in the task detail panel and the timeline feed.
Completed Epics — Sidebar section groups closed epics with task counts. Expand to browse children and navigate the DAG.
See the Project History Guide for details.
Live Reactivity
A filesystem watcher (watchfiles + SSE) detects changes to .beads/issues.jsonl and openspec/changes/**. When an agent closes a task, the DAG updates automatically. No polling, no manual refresh.
Agent closes task in terminal
-> .beads/issues.jsonl changes on disk
-> watchfiles detects change
-> SSE event sent to browser
-> DAG re-renders, timeline updates, stats recalculate
The Full Loop
1. PLAN -> Spec Wizard generates proposal, specs, design, tasks
2. IMPORT -> Tasks auto-imported to Beads with dependency inference
3. EXECUTE -> Pick from ready queue, run agent in the embedded terminal
4. OBSERVE -> DAG updates live as the agent closes tasks
5. REVIEW -> Review diffs, approve or iterate
6. CLOSE -> Close task with reason, move to next unblocked work
7. REPEAT -> Until all tasks are done
Install
Prerequisites
| Requirement | Version | Notes |
|---|---|---|
| Python | 3.12+ | Runtime |
| Beads | latest | Installed automatically by the agent skill on first use |
| OpenSpec | latest | Installed automatically by the agent skill on first use |
You typically don't need to install Beads or OpenSpec yourself — the bundled agent skills guide Claude Code through installing and configuring them when you start your first workflow.
Quick Start
# Install from PyPI
pip install hangar-ide
# Or with uv
uv tool install hangar-ide
# Or with pipx
pipx install hangar-ide
Then navigate to your project and run:
cd ~/projects/my-app
hangar
Hangar starts on http://localhost:8000, auto-discovers your project by finding .beads/ or openspec/ directories, and opens the browser.
Development Setup
To work on Hangar itself, clone the repo and run the backend and frontend dev servers separately:
git clone https://github.com/pyros-projects/hangar.git
cd hangar
# Backend
cd backend && uv sync && cd ..
# Frontend
cd frontend && npm install && cd ..
# Terminal 1: Backend with auto-reload
cd backend && uv run hangar --dev
# Terminal 2: Frontend dev server (hot reload)
cd frontend && npm run dev
In dev mode, open http://localhost:5173 (the Vite dev server proxies API requests to the backend).
First-Run Skill Installer
On first launch, Hangar checks whether your project has Claude Code agent skills installed. If not, an interactive wizard offers to install them:
┌─────────────────────────────────────────────────────┐
│ Agent skills not found in this project. │
│ │
│ Hangar bundles Claude Code skills for: │
│ ◆ OpenSpec — spec-driven change workflow │
│ ◆ Beads — task graph & agent memory │
│ │
│ Skills are installed as .claude/skills/ in your │
│ project directory. │
└─────────────────────────────────────────────────────┘
Project: ~/my-project
1 Install to this project
2 Choose a different directory
3 Skip for now
4 Skip and don't ask again
These skills teach Claude Code how to use the OpenSpec and Beads CLIs — creating specs, managing task dependencies, following the commit-before-close workflow, and keeping tasks.md in sync with the Beads graph.
Skills are plain Markdown files copied to .claude/skills/{openspec,beads}/SKILL.md in your project. They ship inside the Hangar package — no network required.
CLI Flags
hangar [project_path] [options]
positional:
project_path Project directory (default: auto-discover)
options:
-p, --port PORT Server port (default: 8000)
--host HOST Server host (default: 127.0.0.1)
--dev Dev mode with auto-reload
--no-open Don't open browser on startup
--install-skills [PATH] Install agent skills and exit
--no-install Skip the skill installation wizard
Common usage:
# Start normally (auto-discover project, prompt to install skills)
hangar
# Explicit project path
hangar ~/projects/my-app
# Install skills to a specific project without starting the server
hangar --install-skills ~/projects/my-app
# Headless / CI mode (no browser, no wizard)
hangar --no-open --no-install
# Backend development with auto-reload
hangar --dev
The wizard writes a marker to ~/.config/hangar/no-prompt when you choose "don't ask again". Delete that file to re-enable the prompt.
See the Getting Started Guide for detailed setup, or the Greenfield Tutorial to build a project from scratch.
Architecture
Hangar is a thin orchestration layer. It doesn't replicate the logic of bd or openspec — it shells out to the real CLIs and presents their --json output visually.
Browser <-> SvelteKit <-> FastAPI <-> bd / openspec / git CLIs
UI proxy API data sources
xterm.js <----------WebSocket----------> PTY (bash/agents)
EventSource <-----------SSE------------> watchfiles (live reactivity)
The backend auto-discovers your project root by walking up from cwd looking for .beads/ or openspec/ directories.
Tech Stack
| Layer | Technology |
|---|---|
| Frontend | SvelteKit (Svelte 5) |
| Terminal | xterm.js with fit + web-links addons |
| Backend | FastAPI (Python 3.12) |
| PTY | Python pty + asyncio for terminal sessions |
| File Watcher | watchfiles (Rust notify crate) |
| Graph Layout | ELK.js |
| Task Management | Beads (bd CLI) |
| Spec Management | OpenSpec |
| Package Manager | uv (Python), npm (Node) |
| Testing | pytest (250 tests), vitest (48 tests), svelte-check |
By the numbers: ~16,000 lines of code across 87 source files, 298 tests, 9 backend services, 12 frontend components.
Documentation
| Document | Description |
|---|---|
| Getting Started | Installation, setup, first launch |
| Spec Wizard Guide | AI-powered spec generation with review gates |
| Architecture | System design, services, API endpoints |
| Embedded Terminal | Terminal + live reactivity architecture |
| Project History | Timeline, stats, close reasons, archive browsing |
| Agent Adapters | Working with different CLI agents |
Tutorials
| Tutorial | Description |
|---|---|
| Greenfield | Build a project from scratch using the full Hangar workflow |
| Brownfield | Add Hangar to an existing codebase |
Known Limitations
- Single-user — Designed for single-developer use. No authentication or concurrent access handling.
- No rate limiting — For local development this is fine; for shared deployments, add a reverse proxy.
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hangar_ide-0.1.2.tar.gz.
File metadata
- Download URL: hangar_ide-0.1.2.tar.gz
- Upload date:
- Size: 706.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
731fba3d67b78b3e44154611005e445a01f80cbc5d1f5ad9db64eff560363e92
|
|
| MD5 |
691902d6c3d191825b9c7dcac1ee1ec2
|
|
| BLAKE2b-256 |
6d468f0fbe5eee6386dc6fc8010bcad4dcf57dec57ab1c0628d7dcd94960e9b9
|
Provenance
The following attestation bundles were made for hangar_ide-0.1.2.tar.gz:
Publisher:
publish.yml on pyros-projects/hangar
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hangar_ide-0.1.2.tar.gz -
Subject digest:
731fba3d67b78b3e44154611005e445a01f80cbc5d1f5ad9db64eff560363e92 - Sigstore transparency entry: 951406230
- Sigstore integration time:
-
Permalink:
pyros-projects/hangar@fa032e3c7247baeb036ad20caa45a876abac5e8f -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/pyros-projects
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@fa032e3c7247baeb036ad20caa45a876abac5e8f -
Trigger Event:
release
-
Statement type:
File details
Details for the file hangar_ide-0.1.2-py3-none-any.whl.
File metadata
- Download URL: hangar_ide-0.1.2-py3-none-any.whl
- Upload date:
- Size: 672.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fd821cbc9f2122ca2a07e81fd218e5abb77f9a020529f9aa4c9ab54f7aca536d
|
|
| MD5 |
92c9eefbb84e9593fe3a6ee161d8c93e
|
|
| BLAKE2b-256 |
4f467d8a47b542488bfe0730175170f3b6bcc6be37f0dc6b25a0ab68d5079ece
|
Provenance
The following attestation bundles were made for hangar_ide-0.1.2-py3-none-any.whl:
Publisher:
publish.yml on pyros-projects/hangar
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hangar_ide-0.1.2-py3-none-any.whl -
Subject digest:
fd821cbc9f2122ca2a07e81fd218e5abb77f9a020529f9aa4c9ab54f7aca536d - Sigstore transparency entry: 951406277
- Sigstore integration time:
-
Permalink:
pyros-projects/hangar@fa032e3c7247baeb036ad20caa45a876abac5e8f -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/pyros-projects
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@fa032e3c7247baeb036ad20caa45a876abac5e8f -
Trigger Event:
release
-
Statement type: