{"id":51559287,"url":"https://github.com/vndee/flightdeck","last_synced_at":"2026-07-10T09:01:16.933Z","repository":{"id":365970147,"uuid":"1274435723","full_name":"vndee/flightdeck","owner":"vndee","description":"✈️ Agentic cockpit in the terminal — an IDE-free macOS dev environment where AI agents are first-class. Ghostty · fish · tmux · Neovim (LazyVim) · Claude Code · Catppuccin Mocha · GNU Stow","archived":false,"fork":false,"pushed_at":"2026-06-19T17:48:19.000Z","size":4741,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-19T18:19:04.633Z","etag":null,"topics":["ai-agents","catppuccin","claude-code","developer-environment","dotfiles","fish-shell","ghostty","gnu-stow","lazygit","lazyvim","macos","neovim","starship","terminal","tmux","yazi"],"latest_commit_sha":null,"homepage":"https://vndee.github.io/flightdeck/","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vndee.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-19T14:06:11.000Z","updated_at":"2026-06-19T17:48:23.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/vndee/flightdeck","commit_stats":null,"previous_names":["vndee/flightdeck"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/vndee/flightdeck","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vndee%2Fflightdeck","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vndee%2Fflightdeck/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vndee%2Fflightdeck/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vndee%2Fflightdeck/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vndee","download_url":"https://codeload.github.com/vndee/flightdeck/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vndee%2Fflightdeck/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35326963,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-10T02:00:06.465Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-agents","catppuccin","claude-code","developer-environment","dotfiles","fish-shell","ghostty","gnu-stow","lazygit","lazyvim","macos","neovim","starship","terminal","tmux","yazi"],"created_at":"2026-07-10T09:01:15.542Z","updated_at":"2026-07-10T09:01:16.915Z","avatar_url":"https://github.com/vndee.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# flightdeck ✈️\n\n\u003e Your **agentic cockpit** in the terminal — an IDE-free macOS dev environment\n\u003e where AI agents are first-class. Ghostty · fish · tmux · Neovim (LazyVim) ·\n\u003e Claude Code, themed Catppuccin Mocha and managed with GNU Stow.\n\nBuilt for a workflow where AI agents are first-class: run several Claude Code\nagents in parallel on isolated git worktrees, or drive one from inside Neovim.\n\n|  |  |\n|:---:|:---:|\n| [![Neovim with Claude Code in a split](assets/cockpit.png)](assets/cockpit.png) | [![lazygit with delta diffs](assets/lazygit.png)](assets/lazygit.png) |\n| **Neovim + Claude Code** — the agentic cockpit | **lazygit** — git TUI (`prefix g`) |\n| [![yazi file manager with bat previews](assets/yazi.png)](assets/yazi.png) | [![btop system monitor](assets/btop.png)](assets/btop.png) |\n| **yazi** — file manager (`y`) | **btop** — system monitor (`top`) |\n\n## Stack\n\n| Layer | Tool |\n|---|---|\n| Terminal | [Ghostty](https://ghostty.org) — GPU, native macOS |\n| Shell | [fish](https://fishshell.com) + [Starship](https://starship.rs) prompt |\n| Multiplexer | [tmux](https://github.com/tmux/tmux) + [sesh](https://github.com/joshmedeski/sesh) + tpm plugins |\n| Editor | [Neovim](https://neovim.io) + [LazyVim](https://lazyvim.org) |\n| Agent | [Claude Code](https://claude.com/claude-code) + `wt` worktrees + [claudecode.nvim](https://github.com/coder/claudecode.nvim) |\n| CLI core | fzf · fd · ripgrep · bat · eza · zoxide · git-delta · lazygit · yazi · atuin · btop · glow · gh |\n| Theme | Catppuccin Mocha (everywhere) |\n\n## Install\n\n```bash\ngit clone https://github.com/vndee/flightdeck ~/flightdeck\ncd ~/flightdeck\n./install.sh          # installs Homebrew packages, stows configs, sets up plugins\nchsh -s \"$(command -v fish)\"   # make fish your login shell\n```\n\n`install.sh` is idempotent and backs up any conflicting files to\n`~/.dotfiles-backup-\u003ctimestamp\u003e/` before symlinking.\n\n## Run several projects at once\n\nThe move I reach for most when juggling repos: **two independent tab layers**, one\nnested in the other — so a dozen projects and their agents all stay live.\n\n- **Outer — Ghostty tabs = projects.** `⌘T` new tab · `⌘1`…`⌘8` jump · `⌘9` last ·\n  `⌘⇧[` / `⌘⇧]` cycle. One macOS-native tab per repo/client.\n- **Inner — tmux = that project's cockpit.** Each tab holds a tmux session of\n  windows (editor, Claude agents) and panes. `Ctrl-a 1/2` jump windows,\n  `Ctrl-a T` fuzzy-switch sessions (sesh), `wt \u003cbranch\u003e` spins an isolated agent.\n\n```text\n ⌘1 api          ⌘2 web          ⌘3 infra        ← Ghostty tabs = projects\n ┌─────────────┐ ┌─────────────┐ ┌─────────────┐\n │ tmux · C-a  │ │ tmux · C-a  │ │ tmux · C-a  │  ← a cockpit inside each tab\n │  1 editor   │ │  1 editor   │ │  1 editor   │\n │  2 claude   │ │  2 claude   │ │  2 server   │  ← windows · agents · C-a 1/2\n └─────────────┘ └─────────────┘ └─────────────┘\n        ⌘ + number → projects   ·   Ctrl-a + number → tasks\n```\n\n`⌘1` (api: editor + agent) and `⌘2` (web) keep running side by side — `⌘`+number\nflips projects, `Ctrl-a`+number flips tasks within one.\n\n## The agentic workflow\n\n**Parallel agents — `wt`** (the core idea):\n\n```bash\nwt my-feature     # git worktree + dedicated tmux session (nvim + claude windows)\nwt another-fix    # a second isolated agent, zero collisions\nwt ls             # list worktrees and sessions\nwt rm my-feature  # tear it down\n```\n\nEach task gets its own checkout and tmux session, so 2–4 Claude Code agents run\nconcurrently on separate branches. Jump between them with `prefix + T` (sesh).\n\n**In-editor agent — `claudecode.nvim`:** press `\u003cleader\u003eac` in Neovim to toggle\nClaude Code bound to the editor; send a visual selection with `\u003cleader\u003eas`;\naccept/deny proposed diffs with `\u003cleader\u003eaa` / `\u003cleader\u003ead`.\n\n## Layout (Stow packages)\n\n```\n.\n├── Brewfile          # all packages\n├── install.sh        # one-command bootstrap\n├── ghostty/          # terminal\n├── fish/             # shell + abbreviations\n├── starship/         # prompt\n├── tmux/             # multiplexer cockpit\n├── nvim/             # LazyVim\n├── git/ bat/ lazygit/ atuin/ yazi/   # tool configs\n├── bin/              # ~/.local/bin/wt orchestrator\n└── docs/plans/       # design + implementation plan\n```\n\nManage individual packages with `stow -t ~ \u003cpackage\u003e` / `stow -D -t ~ \u003cpackage\u003e`.\n\n## Key bindings (cheatsheet)\n\n| Where | Key | Action |\n|---|---|---|\n| ghostty | `⌘T` · `⌘1`–`⌘8` | new tab / jump to a tab (one per project) |\n| ghostty | `⌘⇧[` / `⌘⇧]` | previous / next tab |\n| tmux | `Ctrl-a` | prefix |\n| tmux | `prefix \\|` / `prefix -` | split right / down |\n| tmux | `prefix T` | session switcher (sesh + fzf) |\n| tmux | `prefix a` | spawn a Claude Code pane |\n| tmux | `prefix g` | lazygit popup |\n| tmux | `prefix c` | new window (opens at the worktree root in `wt` sessions) |\n| nvim + tmux | `Ctrl-h/j/k/l` | move across Neovim splits **and** tmux panes (seamless, no prefix) |\n| nvim | `\u003cspace\u003e` | leader (LazyVim) |\n| nvim | `\u003cleader\u003ee` | toggle Neo-tree file explorer (`H` shows dotfiles) |\n| nvim | `\u003cleader\u003e\u003cleader\u003e` | fuzzy find files (fzf-lua) |\n| nvim | `\u003cleader\u003eac` | toggle Claude Code |\n| nvim | `\u003cleader\u003eas` | send selection to Claude (visual) |\n| fish | `Ctrl-r` | atuin history search |\n| fish | `Ctrl-t` / `Alt-c` | fzf file / directory |\n\n## Quick tips\n\nNew here? These cover most day-to-day moves.\n\n**Move around** — one set of keys for the whole grid:\n- **Projects = Ghostty tabs:** `⌘T` new, `⌘1`/`⌘2`… jump. One tab per project; tmux is the cockpit inside each.\n- `Ctrl-h/j/k/l` flows seamlessly between Neovim splits and tmux panes — no prefix.\n- tmux windows: `prefix 1`/`2`… jump by number, `prefix n`/`p` next/prev, `prefix l` last.\n- Neovim buffers (the tabs up top): `Shift-h` / `Shift-l` to cycle, `\u003cleader\u003e,` to fuzzy-pick.\n\n**Jump to directories \u0026 history:**\n- `z \u003cpartial\u003e` — [zoxide](https://github.com/ajeetdsouza/zoxide) jumps to a frecent dir (e.g. `z flight`); `zi` to pick interactively.\n- `Ctrl-r` — [atuin](https://atuin.sh) fuzzy history search (↑ still scrolls plain fish history).\n- `Ctrl-t` insert a file path · `Alt-c` cd into a directory — both [fzf](https://github.com/junegunn/fzf), sourced from [fd](https://github.com/sharkdp/fd).\n- `prefix T` (capital **T**) — [sesh](https://github.com/joshmedeski/sesh) switcher: a fuzzy popup over your tmux sessions **and** zoxide dirs; `Enter` to jump to one or spin a new one up.\n\n**Files:**\n- `\u003cleader\u003ee` toggles the Neo-tree sidebar; press `?` inside it for every key.\n- In Neo-tree, `H` reveals hidden/dotfiles like `.env` (it's only hidden, not missing).\n- `\u003cleader\u003e\u003cleader\u003e` fuzzy-finds files; `\u003cleader\u003e/` greps file *contents*.\n- `y` opens **yazi** — but only at the **shell** prompt (in Neovim, `y` means yank). `q` drops your shell wherever you land.\n- Raw search: `fd \u003cname\u003e` to find files, `rg \u003ctext\u003e` ([ripgrep](https://github.com/BurntSushi/ripgrep)) to grep contents.\n\n**Better defaults** — modern tools, mostly drop-in:\n- `cat \u003cfile\u003e` → [**bat**](https://github.com/sharkdp/bat) (syntax highlight + git gutter) · `top` → [**btop**](https://github.com/aristocratos/btop) (animated system monitor).\n- `ls` (icons) · `ll` (long+git) · `la` (+hidden) · `lr` (recent, newest last) · `lt` (tree) → [**eza**](https://github.com/eza-community/eza).\n- `git diff` / `gd` → [**delta**](https://github.com/dandavison/delta) side-by-side, syntax-highlighted diffs (also inside lazygit).\n- **Markdown:** `glow file.md` renders it in the terminal (`glow -p` to page). In Neovim, `.md` renders **inline as you read** ([render-markdown.nvim](https://github.com/MeanderingProgrammer/render-markdown.nvim) — `:RenderMarkdown toggle` for raw) and `\u003cleader\u003ecp` opens a live **browser preview**.\n\n**Git \u0026 agents:**\n- `lg` or `prefix g` → [**lazygit**](https://github.com/jesseduffield/lazygit) TUI · `gh …` → GitHub (PRs, issues) from the terminal.\n- `\u003cleader\u003eac` opens Claude Code inside Neovim; leave its pane with `Ctrl-\\ Ctrl-n` then `Ctrl-h`.\n- `prefix a` spawns a Claude pane; `wt \u003cbranch\u003e` spins up a full parallel agent on its own worktree.\n\n**Discover anything:** press `\u003cleader\u003e` (Space) and pause — which-key pops up with every shortcut.\n\n## Secrets\n\nMachine-local secrets live in `~/.config/fish/conf.d/secret.fish` and git\nidentity in `~/.gitconfig` — both are gitignored / outside the repo. Copy the\nprovided `*.example` files on a fresh machine.\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvndee%2Fflightdeck","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvndee%2Fflightdeck","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvndee%2Fflightdeck/lists"}