Skip to content

portagenty

Agentic coding tools in the terminal, anywhere you go. Spin up Claude Code, opencode, and dev servers in one persistent workspace — SSH in from any device, from your laptop to your phone on Termux, and pick up exactly where you left off.
Filesystem: one parent per project
~/code/
portagenty
cyberbase
crosswalker
~/work/
client-app
api-server
~/learn/
rust-book
ml-sandbox

Every project stuck in one parent directory. No cross-cutting views.
Want “all my agentic projects”? You cd between three different folders.

portagenty adds a layer on top

Workspaces: many views, nothing moves
agentic.portagenty.toml
~/code/portagenty
~/work/api-server
~/learn/ml-sandbox
Projects from 3 different parent dirs
client-work.portagenty.toml
~/work/client-app
~/work/api-server
~/code/crosswalker
Same api-server, different context

Projects stay where they are. Workspaces are views — recency, tags, curated groups.
The same project can appear in many workspaces.

Agentic coding — Claude Code, opencode, Aider, and the dev servers and test runners they drive — lives in the terminal. But the terminal is stuck where you started it: one laptop, one window size, one SSH hop. Walk away, switch devices, or lose the connection and you’re rebuilding context from scratch.

portagenty treats your agent sessions as a portable workspace. Define them once in a committable TOML file, launch them on any device over tmux or zellij, and hop between laptop, desktop, and phone-over-SSH (Termux) with a single pa claim. The sessions keep running; only the terminal attached to them changes.

One-command install

cargo install --git https://github.com/cybersader/portagenty. No clone, no cd, no hand compile. Single static Rust binary at ~/.cargo/bin/pa.

Cross-device takeover

SSH in from your phone, run pa claim, and the session reshapes to the new device. On tmux that’s real takeover (other clients get kicked); on zellij, add --fresh for the kill-and-recreate path since zellij doesn’t expose per-client disconnection.

Untracked session adoption

Tmux / zellij sessions you started manually show up in the TUI alongside workspace-defined ones. Attach with Enter — nothing new to set up.

Multiplexer-aware

tmux + zellij first-class. Sessions with cwd, command, and env work consistently across both. WezTerm explicitly skipped — see the roadmap.

First-run wizard

Run pa on a new machine with no config and it walks you through a 30-second setup. No TOML editing required to start.

No-editor session management

pa init / pa add / pa rm / pa edit handle the whole workspace-file lifecycle from the command line. Phone-keyboard friendly, comment-preserving.

Find folder + scaffold

Press n in the workspace picker to fuzzy-search your filesystem for project folders. Tiered backends (recency, zoxide, plocate, fd, stdlib walker) ranked by nucleo. Pick a folder and pa scaffolds a workspace TOML on the spot.

In-TUI session editing

Press e on any session row to edit name, cwd, command, kind, or env vars without leaving the TUI. CWD editing opens the same find/tree browser. All changes are comment-preserving writes to your TOML file.

Committable layouts

pa export renders your workspace as a tmux starter script or zellij KDL layout. Commit it; teammates launch without needing pa installed.

Bundled bash ergonomics

pa snippets install pa-aliases drops curated, idempotent shell snippets into your rc file. Short aliases, Termux-friendly tweaks, all opt-in.

Tree browser

Press Ctrl+T inside the find overlay to switch to a filesystem tree view. Expand/collapse directories, navigate with arrow keys or vim bindings, select a folder with Shift+Enter.

Portaconv integration

Sister tool portaconv extracts Claude Code conversation history, rewrites OS paths baked into content, and exposes it over MCP. pa convos list / pa convos dump <id> scope it to this workspace automatically (including previous_paths from folder moves). pa init --with-agent-hooks drops .mcp.json + .claude/skills/ so agents self-discover it. See Portaconv integration.

📱
Phone
Termux + SSH
SSH
🖥️
Server
tmux / zellij
SSH
💻
Laptop
direct or SSH
Sessions persist on the server
claudepa claim
devpa launch dev
testsnot started
Terminal window
# SSH into your desktop from your phone (Termux)
ssh desktop
cd {`~/code/`}new-project
# Scaffold a workspace — no editor required
pa init
pa add claude -c "claude --resume" --kind claude-code
pa add dev -c "bun run dev" --kind dev-server
# Launch the TUI, pick a session, Enter
pa
Workspace Picker — home screen, Esc always returns here
my-project2h ago
 side-hustleyesterday
 live sessions on this machine

n: find   d: unregister   ?: help   q: quit

Enter

Session List [zellij]

claudeClive · 1 client
shellidle
devDidle
?mysteryuntracked

e: edit   d: delete   x: kill   Esc: back

Enter
pa → zellij session “claude”
detach: Ctrl+O then d
re-attach: pa claim claude
highest
Workspace
*.portagenty.toml — sessions, projects, mpx choice. Committable.
merges with
medium
Per-project
portagenty.toml at project root — repo-defined sessions. Committable.
merges with
lowest
Global
$XDG_CONFIG_HOME/portagenty/ — default mpx, workspace registry. Machine-local.

The workspace file is designed to commit — no absolute paths, no machine-specific state, no secrets. Volatile state (recency, last- attached timestamps) lives separately in $XDG_STATE_HOME.

v1 is feature-complete and usable daily. Core flows work end-to-end: walk up to find a workspace, render the session list, pick one, attach — in tmux or zellij.

Most v1.x items have shipped: zellij adapter, untracked adoption, pa claim cross-device takeover, kind: hints, per-session env vars, declarative export, first-run wizard, bundled snippets, full no-editor session management, workspace picker home screen, in-TUI find-folder + scaffold with nucleo fuzzy ranking, tree browser, workspace-scoped session names, in-TUI session editing, CWD browse via find overlay, responsive 2-line footer, arrow keys

  • Alt+J/K navigation, help overlay, and auto-re-register on walk-up. Tags + custom-groups views and pa up eager-launch are still on the roadmap.

WezTerm is intentionally not supported — its mux is built around the GUI emulator’s window model, not the headless detach/reattach pattern portagenty’s cross-device work depends on. See the roadmap for the rationale.

The design doc is the source of truth for terminology and architecture.