A visual control panel for Claude Code
Explore your agent ecosystem · Run commands · Schedule automations · Monitor everything in real time
Claude Flightdeck turns your ~/.claude directory into a full-featured workspace. Visualize how your agents, commands, and skills interconnect, edit files with syntax highlighting, execute workflows with live streaming output, and set up automated jobs that run on schedules or respond to webhooks and JIRA tickets.
Note: Claude Flightdeck is a companion tool — it requires a working Claude Code CLI installation. It does not bundle or replace Claude Code itself.
Visualize your entire ~/.claude ecosystem at a glance. Every agent, command, skill, convention profile, hook, and external service is a node. Edges show how they connect — which agents spawn which workers, which commands use which skills, which hooks run at lifecycle events. The Codex panel on the left lets you browse and edit files directly; the Key of Sigils legend in the top-right decodes node types and edge styles.
Click any node to highlight its connections and open a detail panel. Double-click to open the file in the built-in Monaco editor — with parchment light theme and syntax highlighting for Markdown, JSON, JS, TS, and YAML. Multiple files open as tabs alongside the graph.
Select any command from your ~/.claude/commands/ library, add arguments and additional context, attach files as readable context, and choose a target project directory. A live command preview updates as you type. Hit Launch — the run opens immediately in the Logbook.
Every run gets a streaming output pane with real-time SSE output, per-line elapsed timestamps, and collapsible tool-call blocks (Bash, Write, Edit, Read, etc.). When Claude pauses waiting for input, a composer appears at the bottom so you can respond without leaving the browser.
Save parameterized command templates with named argument slots ({arg.name}) and live preview. Chain multiple templates into multi-step workflows — pass outputs between steps with {{prev.field}} tokens, embed sub-workflows, and tag runs to JIRA tickets for full traceability.
Schedule any command to run on a recurring cron timer. Enable JIRA mode to query a JQL filter on each tick — only new matching issues trigger a run, keeping noise low. Each job shows its JQL query in amber monospace, last run time, and next scheduled execution.
Create HTTP endpoints that fire Claude commands when called by external services. Each webhook has a unique trigger URL, Mustache-style argument templates resolved against the incoming JSON payload, an optional shared secret, and a test-fire panel for rapid iteration.
Unified history of every automation-triggered run — webhooks, polls, schedules, and workflow chains. Full streaming output inline, just like a manual run. Filter by source type: JIRA polls, Bitbucket events, workflow chains, or plain schedule fires.
Register local project directories and Flightdeck shows their CLAUDE.md inline — so you can pick the right working directory when launching commands without memorizing paths. The directory browser doubles as a quick project selector across Pre-Flight, Webhooks, and Autopilot.
Back up your entire automation setup — webhooks, schedules, templates, workflows — as a single JSON file. Restore on another machine or after a fresh install, choosing to merge with or replace existing data.
Press ⌘K (or Ctrl+K) from anywhere to open the command palette. All nine sections are instantly searchable by name. Selecting a command node navigates to Pre-Flight with it pre-selected; selecting an agent, skill, or convention opens it in the editor.
| Feature | Description |
|---|---|
| Codex (File Explorer) | Browse and manage your ~/.claude directory with drag-drop, inline folder creation, and context menus |
| Relationship Graph | Interactive ReactFlow node graph mapping connections between commands, orchestrators, agents, skills, hooks, convention profiles, and external services |
| Monaco Editor | Full-featured editor with parchment light theme and syntax highlighting for Markdown, JSON, JS, TS, YAML — opens as tabs alongside the graph |
| Node Inspection | Click any node to highlight its connections in a detail panel; double-click to open in editor |
| Focus Mode | Clicking a node dims unrelated nodes to low opacity — connected nodes stay prominent |
| View Modes | Switch between Folder (grouped by domain) and Type (grouped by category) layouts |
| Search & Filter | Filter by node type, edge type (spawns/uses/accesses/reads), or search by name with real-time highlighting |
| Expand/Compact | Toggle compact vs. expanded node cards to see labels, domains, and connection counts |
| Feature | Description |
|---|---|
| Command Selector | Pick from built-in commands, user commands, and skills — grouped by domain |
| Arguments & Context | Add positional arguments and freeform additional context separately — both are included in the final prompt |
| File Attachments | Drag-drop files to attach as readable context passed to Claude |
| Project Targeting | Choose a working directory from registered projects (Local) or browse Bitbucket repos |
| Directory Browser | Navigate the filesystem inline without leaving the form |
| Live Preview | The resolved command string updates in real time before you launch |
| Permissions Toggle | One-click --dangerously-skip-permissions when you need autonomous operation |
| Feature | Description |
|---|---|
| Live Streaming | Real-time SSE output with per-line elapsed timestamps, auto-scroll, and URL auto-linking |
| Tool Call Blocks | Bash, Write, Edit, Read, and other tool invocations rendered as collapsible blocks |
| Run History | Full execution log with status badges, duration, exit codes — re-run any previous execution with one click |
| Interactive Sessions | When Claude pauses waiting for input, respond directly from the Logbook with yes/no or free text |
| Search & Filter | Search output content or filter by status (running / done / error / killed) |
| Session Resume | Resume a paused or interrupted Claude session from the Logbook using Continue Session |
| Feature | Description |
|---|---|
| Templates | Save parameterized command templates with named argument slots ({arg.name}) and live preview |
| Workflows | Chain multiple templates into multi-step workflows; pass outputs between steps with {{prev.field}} tokens |
| Sub-workflows | Embed one workflow as a step inside another for composable automation chains |
| JIRA Anchoring | Tag a workflow run to a JIRA ticket — the ticket key and summary are stored on the run and shown as a badge |
| Cumulative Duration | Workflows report both active time (steps running) and total wall-clock time so idle gaps are visible |
| Feature | Description |
|---|---|
| Autopilot (Schedules) | Cron-based scheduling; JIRA mode fires only for new matching issues, not on every tick |
| Tower Hails (Webhooks) | HTTP endpoints with Mustache payload templates, optional shared-secret auth, and one-click test-fire |
| Scrambles (Triggered Runs) | Unified history of all automation-triggered executions with source-type filter tabs |
| Feature | Description |
|---|---|
| Hangars (Projects) | Register project directories; view CLAUDE.md snippets inline; one-click path selection across all forms |
| Bitbucket Integration | List repos and branches, clone directly into a local path |
| Cascade Cleanup | Delete a project and automatically clean up associated webhooks, polls, schedules, and run history |
| Toolbox (Config I/O) | Export all automation configs as a timestamped JSON file; import with merge or replace mode |
- Node.js 18+
- Claude Code CLI installed and accessible as
claude - pm2 (optional —
npm install -g pm2) for production deployment
git clone https://github.com/Jabito/claude-flightdeck.git
cd claude-flightdeck
# Deploy: installs deps, runs tests, builds client, starts via pm2
bash deploy.sh
# Open in browser
open http://localhost:3001bash deploy.sh # Test + build + start/restart (default)
bash deploy.sh test # Run integration tests only
bash deploy.sh restart # Rebuild and restart
bash deploy.sh stop # Stop the server
bash deploy.sh status # Show pm2 process info
bash deploy.sh logs # Tail logs (add number for line count: logs 100)
bash deploy.sh delete # Remove from pm2 entirelynpm install
cd client && npm install && cd ..
npm run dev # Starts backend (nodemon :3001) + Vite dev server (:5173) concurrentlyclaude-flightdeck/
├── server.js # Express backend — API, SSE streaming, process management
├── ecosystem.config.cjs # pm2 production config
├── deploy.sh # One-command deploy script
├── __tests__/ # Jest + supertest integration tests
├── client/
│ ├── src/
│ │ ├── App.jsx # Main app shell — unified nav, altimeter, ⌘K palette
│ │ ├── api.js # API client
│ │ ├── styles/tokens.css # Design tokens — OKLCH palette + font imports
│ │ └── components/
│ │ ├── Glyph.jsx # Aviation SVG sigils (24 icons)
│ │ ├── FileExplorer.jsx # Codex — tree view with drag-drop
│ │ ├── RelationshipGraph.jsx # The Chart — ReactFlow node graph
│ │ ├── FileEditor.jsx # Monaco editor (parchment light theme)
│ │ ├── ClaudeRunner.jsx # Pre-Flight — command execution form
│ │ ├── RunsPanel.jsx # Logbook — run history & output viewer
│ │ ├── ScriptsManager.jsx # Flight Plans — templates & workflows
│ │ ├── WebhookManager.jsx # Tower Hails — webhook CRUD
│ │ ├── ScheduleManager.jsx # Autopilot — cron schedule manager
│ │ ├── AutomationRunsPanel.jsx # Scrambles — unified automation run history
│ │ ├── ProjectsManager.jsx # Hangars — project browser + Bitbucket clone
│ │ ├── ProjectBrowser.jsx # Filesystem project selector sub-component
│ │ ├── BitbucketRepoBrowser.jsx # Bitbucket repo/branch browser
│ │ └── ConfigManager.jsx # Toolbox — config export/import
│ └── vite.config.js
├── webhooks.json # Webhook definitions (per-user, gitignored)
├── webhooks.example.json # Starter template
├── polls.json # JIRA poll definitions
├── polls.example.json
├── schedules.json # Scheduled job definitions
├── schedules.example.json
├── templates.json # Command templates
├── workflows.json # Multi-step workflow definitions
└── *-runs.json # Execution history (per category, gitignored)
Claude Flightdeck reads from and manages the standard Claude Code directory at ~/.claude/:
~/.claude/
├── CLAUDE.md # Global instructions loaded in every session
├── settings.json # Permissions, env vars, hooks, MCP servers
├── plugins.local.md # Local credentials (Jira/Confluence PATs) — not synced
├── agents/ # Agent definitions (orchestrators + workers)
│ ├── task-director.md
│ ├── backend-engineer.md
│ └── ...
├── commands/ # Slash command entry points
│ ├── dev/
│ │ ├── plan.md # /dev:plan
│ │ ├── implement.md # /dev:implement
│ │ └── ...
│ └── doc/
│ └── ...
├── skills/ # Domain reference knowledge injected into agents
│ ├── dev/
│ ├── docs/
│ └── ...
├── conventions/ # Team-specific convention profiles (rendered as convention nodes)
│ ├── atlassian.md # Jira + Confluence base URLs, auth method
│ ├── jira.md # Project keys, status workflow, branch prefix
│ ├── bitbucket.md # Workspaces, repo root, service URL
│ └── confluence.md # Default space keys, template names
└── hooks/ # Hook scripts (lifecycle event handlers)
├── cl-observe.sh
└── cl-stop.sh
Required for JIRA polls and Confluence integrations:
confluence_url: https://your-confluence.example.com/confluence
confluence_pat: YOUR_CONFLUENCE_PAT
jira_url: https://your-jira.example.com/jira
jira_pat: YOUR_JIRA_PATFor Jira Cloud (email + API token), configure instead in ~/.claude/settings.json:
{
"env": {
"ATLASSIAN_BASE_URL": "https://yourorg.atlassian.net",
"ATLASSIAN_EMAIL": "you@example.com",
"ATLASSIAN_API_TOKEN": "your-api-token"
}
}| Service | Capabilities |
|---|---|
| Jira | JQL polling, issue token templates, ticket-driven automation (Server/DC + Cloud) |
| Confluence | Service discovery, documentation workflows |
| Bitbucket | Repo listing, branch browsing, clone to local path |
| GitHub | Service discovery and metadata |
| Layer | Technology |
|---|---|
| Backend | Node.js + Express |
| Frontend | React 18 + Vite |
| Editor | Monaco Editor |
| Graph | ReactFlow |
| Streaming | Server-Sent Events (SSE) |
| Process Manager | pm2 |
| File | Purpose |
|---|---|
polls.json |
Your JIRA poll configurations |
webhooks.json |
Your webhook configurations |
schedules.json |
Your schedule configurations |
templates.json |
Your command templates |
workflows.json |
Your multi-step workflow definitions |
command-runs.json |
Local command run history |
poll-runs.json |
Local poll run history |
schedule-runs.json |
Local schedule run history |
webhook-runs.json |
Local webhook run history |
workflow-runs.json |
Local workflow run history |
Copy the provided .example.json files as starting points:
cp polls.example.json polls.json
cp webhooks.example.json webhooks.json
cp schedules.example.json schedules.jsonDefault port is 3001. Override via environment variable:
PORT=4000 bash deploy.sh| Shortcut | Action |
|---|---|
⌘K / Ctrl+K |
Open command palette — navigate to any section or node |
⌘S / Ctrl+S |
Save active file in the editor |
⌘1–⌘9 |
Jump directly to nav sections (1=The Chart … 9=Toolbox) |
? |
Toggle keyboard shortcuts overlay |
Esc |
Close palette / overlay |
Contributions are welcome! Please read CONTRIBUTING.md before submitting a PR.
To report a vulnerability, see SECURITY.md. Please do not open public issues for security concerns.










