{"_id":"agent-manager","_rev":"9-62e17968155ea53650dc9390a679c06b","name":"agent-manager","dist-tags":{"beta":"0.2.0-beta.1","latest":"0.3.1"},"versions":{"0.1.0":{"name":"agent-manager","version":"0.1.0","keywords":["cli","ai","agents","claude","gemini","terminal","tui","ink","node-pty"],"author":{"name":"George Livas"},"license":"MIT","_id":"agent-manager@0.1.0","maintainers":[{"name":"glivas","email":"georgelivas9@gmail.com"}],"homepage":"https://github.com/georgelivas/agent-manager","bugs":{"url":"https://github.com/georgelivas/agent-manager/issues"},"bin":{"agent-manager":"dist/cli.js"},"dist":{"shasum":"b53e8920a6ef4ec7d2fb04f14c45398cbc621bca","tarball":"https://registry.npmjs.org/agent-manager/-/agent-manager-0.1.0.tgz","fileCount":211,"integrity":"sha512-LESCF8W1PnZAQogTzyJZE4ubJBO/n5lrste6JOadOILHzPfmdhKlJp64MHYfOxyWKcA5IDvM9+kyGLxpINjDDA==","signatures":[{"sig":"MEQCIBXR5ZrYzWxYJSbOXI3u6WokOH/G5fWUrRs0tGk9b5l6AiBUa862SY5ST0KotZ7r2XfjiwuBje3wvPIRIkcoVEbuiw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":470687},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"4f1cfcc841a47dc97f275c67b3e6d2ae89731175","scripts":{"dev":"tsx src/cli.tsx","test":"vitest","build":"tsc","start":"node dist/cli.js","install-hooks":"tsx src/hooks/install.ts install","prepublishOnly":"npm run build","uninstall-hooks":"tsx src/hooks/install.ts uninstall"},"_npmUser":{"name":"glivas","email":"georgelivas9@gmail.com"},"deprecated":"This package has been renamed to flaio-cli. Install with: npm install -g flaio-cli","repository":{"url":"git+https://github.com/georgelivas/agent-manager.git","type":"git"},"_npmVersion":"11.6.2","description":"Terminal UI for managing multiple AI CLI agents with tabbed sessions","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ink":"^5.2.1","zod":"^3.24.0","react":"^18.3.1","zustand":"^5.0.5","node-pty":"^1.2.0-beta.11","@inkjs/ui":"^2.0.0","commander":"^13.1.0","@slack/web-api":"^7.14.1","@xterm/headless":"^5.5.0","@slack/socket-mode":"^2.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.1.0","typescript":"^5.7.3","@types/node":"^25.2.3","@types/react":"^18.3.18"},"_npmOperationalInternal":{"tmp":"tmp/agent-manager_0.1.0_1771495992726_0.6361842393968191","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"agent-manager","version":"0.1.1","keywords":["cli","ai","agents","claude","gemini","terminal","tui","ink","node-pty"],"author":{"name":"George Livas"},"license":"MIT","_id":"agent-manager@0.1.1","maintainers":[{"name":"glivas","email":"georgelivas9@gmail.com"}],"homepage":"https://github.com/georgelivas/agent-manager","bugs":{"url":"https://github.com/georgelivas/agent-manager/issues"},"bin":{"agent-manager":"dist/cli.js"},"dist":{"shasum":"7b9d9dcbf51663f437336532b73499ddbe69e477","tarball":"https://registry.npmjs.org/agent-manager/-/agent-manager-0.1.1.tgz","fileCount":211,"integrity":"sha512-ccv/BNsTj5OSmUe5WNzglYrfLL3iAe8pDMGJnbKYx6SZf0iS+iWMtLmLUWzJoHEyfbihKCS5bUJnByMuHF7vdw==","signatures":[{"sig":"MEQCIE+LyWhnrGwcQR4gxvzbEb/Nnno2Gp1A5Li5OfVlOEvfAiAlGNT1EUTqCajKz2Aws5fS0rP+GKJ3DyZUKPpm8F8LVA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":474403},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"e6d36d219b55a054ef8b81fe3fd0377334bc5d04","scripts":{"dev":"tsx src/cli.tsx","test":"vitest --passWithNoTests","build":"tsc","start":"node dist/cli.js","changeset":"changeset","install-hooks":"tsx src/hooks/install.ts install","prepublishOnly":"npm run build","uninstall-hooks":"tsx src/hooks/install.ts uninstall"},"_npmUser":{"name":"glivas","email":"georgelivas9@gmail.com"},"deprecated":"This package has been renamed to flaio-cli. Install with: npm install -g flaio-cli","repository":{"url":"git+https://github.com/georgelivas/agent-manager.git","type":"git"},"_npmVersion":"10.8.2","description":"Terminal UI for managing multiple AI CLI agents with tabbed sessions","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ink":"^5.2.1","zod":"^3.24.0","react":"^18.3.1","zustand":"^5.0.5","node-pty":"^1.2.0-beta.11","@inkjs/ui":"^2.0.0","commander":"^13.1.0","@slack/web-api":"^7.14.1","@xterm/headless":"^5.5.0","@slack/socket-mode":"^2.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.1.0","typescript":"^5.7.3","@types/node":"^25.2.3","@types/react":"^18.3.18","@changesets/cli":"^2.29.4"},"_npmOperationalInternal":{"tmp":"tmp/agent-manager_0.1.1_1771512450993_0.21327613201904638","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"agent-manager","version":"0.1.2","keywords":["cli","ai","agents","claude","gemini","terminal","tui","ink","node-pty"],"author":{"name":"George Livas"},"license":"MIT","_id":"agent-manager@0.1.2","maintainers":[{"name":"glivas","email":"georgelivas9@gmail.com"}],"homepage":"https://github.com/georgelivas/agent-manager","bugs":{"url":"https://github.com/georgelivas/agent-manager/issues"},"bin":{"agent-manager":"dist/cli.js"},"dist":{"shasum":"bba591db3ea3365e127c3c452edcf4c8bed5170d","tarball":"https://registry.npmjs.org/agent-manager/-/agent-manager-0.1.2.tgz","fileCount":215,"integrity":"sha512-m7Od82eQ4uImZI350NtX4PBAMtsOYmaSD3mX01VS1D7vdmK2VoPXK5f+HWJJ0WbLiApvN7HGqhwF+GeMeIpWDg==","signatures":[{"sig":"MEUCIA5nuF8Bhq/jn7dMX0KcXw4gxkxlp0q5/kOxlyi7aO9GAiEAgzEh2vqHGEX6RctQLpMPJTSeiHfBwAjl8xJ8q3jL9s0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":480819},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"161df05e232a8c6711411fb3fbed1bbe39f17ecf","scripts":{"dev":"tsx src/cli.tsx","test":"vitest --passWithNoTests","build":"tsc","start":"node dist/cli.js","changeset":"changeset","install-hooks":"tsx src/hooks/install.ts install","prepublishOnly":"npm run build","uninstall-hooks":"tsx src/hooks/install.ts uninstall"},"_npmUser":{"name":"glivas","email":"georgelivas9@gmail.com"},"deprecated":"This package has been renamed to flaio-cli. Install with: npm install -g flaio-cli","repository":{"url":"git+https://github.com/georgelivas/agent-manager.git","type":"git"},"_npmVersion":"10.8.2","description":"Terminal UI for managing multiple AI CLI agents with tabbed sessions","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ink":"^5.2.1","zod":"^3.24.0","react":"^18.3.1","zustand":"^5.0.5","node-pty":"^1.2.0-beta.11","@inkjs/ui":"^2.0.0","commander":"^13.1.0","@slack/web-api":"^7.14.1","@xterm/headless":"^5.5.0","@slack/socket-mode":"^2.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.1.0","typescript":"^5.7.3","@types/node":"^25.2.3","@types/react":"^18.3.18","@changesets/cli":"^2.29.4"},"_npmOperationalInternal":{"tmp":"tmp/agent-manager_0.1.2_1771515457744_0.8516795427420665","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.0":{"name":"agent-manager","version":"0.2.0-beta.0","keywords":["cli","ai","agents","claude","gemini","terminal","tui","ink","node-pty"],"author":{"name":"George Livas"},"license":"MIT","_id":"agent-manager@0.2.0-beta.0","maintainers":[{"name":"glivas","email":"georgelivas9@gmail.com"}],"homepage":"https://github.com/georgelivas/agent-manager","bugs":{"url":"https://github.com/georgelivas/agent-manager/issues"},"bin":{"agent-manager":"dist/cli.js"},"dist":{"shasum":"b4e9ff8aab3ff662645f2677fbc77722492206d9","tarball":"https://registry.npmjs.org/agent-manager/-/agent-manager-0.2.0-beta.0.tgz","fileCount":239,"integrity":"sha512-Znz2SZrtODToajpE1CiouY5ScDBgb1OUo1APkTtRK3IJNEk0HJY5mu9XGcl+oTr2zzG6oRVbzhy6toEYswAhPA==","signatures":[{"sig":"MEUCIG8F/56yJB74EtfETKnjsDIJ1pZDmzPdHztfLC98MPTRAiEA9+x1kq0a0+LrSiMCa9FXXKp7zJ1BcgO+XuCFcFZbeTg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":605998},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"79c89ecb786df05d2c833f8f21b38cf047f56fad","scripts":{"dev":"tsx src/cli.tsx","test":"vitest --passWithNoTests","build":"tsc","start":"node dist/cli.js","changeset":"changeset","install-hooks":"tsx src/hooks/install.ts install","prepublishOnly":"npm run build","uninstall-hooks":"tsx src/hooks/install.ts uninstall"},"_npmUser":{"name":"glivas","email":"georgelivas9@gmail.com"},"deprecated":"This package has been renamed to flaio-cli. Install with: npm install -g flaio-cli","repository":{"url":"git+https://github.com/georgelivas/agent-manager.git","type":"git"},"_npmVersion":"10.8.2","description":"Terminal UI for managing multiple AI CLI agents with tabbed sessions","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ink":"^6.8.0","zod":"^3.24.0","react":"^19.2.4","zustand":"^5.0.5","node-pty":"^1.2.0-beta.11","@inkjs/ui":"^2.0.0","commander":"^13.1.0","@slack/web-api":"^7.14.1","@xterm/headless":"^5.5.0","@slack/socket-mode":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.19.0","vitest":"^3.1.0","typescript":"^5.7.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@changesets/cli":"^2.29.4"},"_npmOperationalInternal":{"tmp":"tmp/agent-manager_0.2.0-beta.0_1772191698631_0.9827487091701552","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-beta.1":{"name":"agent-manager","version":"0.2.0-beta.1","keywords":["cli","ai","agents","claude","gemini","terminal","tui","ink","node-pty"],"author":{"name":"George Livas"},"license":"MIT","_id":"agent-manager@0.2.0-beta.1","maintainers":[{"name":"glivas","email":"georgelivas9@gmail.com"}],"homepage":"https://github.com/georgelivas/agent-manager","bugs":{"url":"https://github.com/georgelivas/agent-manager/issues"},"bin":{"agent-manager":"dist/cli.js"},"dist":{"shasum":"b8ee03a4b9ee7134da321e38813138710383570c","tarball":"https://registry.npmjs.org/agent-manager/-/agent-manager-0.2.0-beta.1.tgz","fileCount":239,"integrity":"sha512-WOqGzKb4gJ5ZP6ZLmEIft3owY0J4KPHY7jRtTbbyglFhLnEOpPkYCkDr2PabAuhno2IGBwigRUIT8/GQYOtK7A==","signatures":[{"sig":"MEQCICeXclgmXSZZxpEbRdrcSr/72ArZrp+1GMA8MxJnPvCfAiBitXw+ahJG2MhN2UjbBHiNU+pECFgE6B5Ylq9f2h873A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":605990},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"99b93fec75fdf3246cab67f0690df2bfe9fe96af","scripts":{"dev":"tsx src/cli.tsx","test":"vitest --passWithNoTests","build":"tsc","start":"node dist/cli.js","changeset":"changeset","install-hooks":"tsx src/hooks/install.ts install","prepublishOnly":"npm run build","uninstall-hooks":"tsx src/hooks/install.ts uninstall"},"_npmUser":{"name":"glivas","email":"georgelivas9@gmail.com"},"deprecated":"This package has been renamed to flaio-cli. Install with: npm install -g flaio-cli","repository":{"url":"git+https://github.com/georgelivas/agent-manager.git","type":"git"},"_npmVersion":"10.8.2","description":"Terminal UI for managing multiple AI CLI agents with tabbed sessions","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ink":"^6.8.0","zod":"^3.24.0","react":"^19.2.4","zustand":"^5.0.5","node-pty":"^1.2.0-beta.11","@inkjs/ui":"^2.0.0","commander":"^13.1.0","@slack/web-api":"^7.14.1","@xterm/headless":"^5.5.0","@slack/socket-mode":"^2.0.5"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.19.0","vitest":"^3.1.0","typescript":"^5.7.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@changesets/cli":"^2.29.4"},"_npmOperationalInternal":{"tmp":"tmp/agent-manager_0.2.0-beta.1_1772200959707_0.15153986950933684","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"agent-manager","version":"0.3.0","keywords":["cli","ai","agents","claude","gemini","terminal","tui","ink","node-pty"],"author":{"name":"George Livas"},"license":"MIT","_id":"agent-manager@0.3.0","maintainers":[{"name":"glivas","email":"georgelivas9@gmail.com"}],"homepage":"https://github.com/georgelivas/agent-manager","bugs":{"url":"https://github.com/georgelivas/agent-manager/issues"},"bin":{"agent-manager":"dist/cli.js"},"dist":{"shasum":"1d5b0a2893fe9af22c44b1762a1929ee7a823f59","tarball":"https://registry.npmjs.org/agent-manager/-/agent-manager-0.3.0.tgz","fileCount":251,"integrity":"sha512-gAx845WqYdCqapb+KIWFMeDzyts0uyerWH9OEVNtc4mpu2kwOFgX8hOGm9uOkEV9So4McS+hncGHwMtEWYyhCQ==","signatures":[{"sig":"MEUCIQCxOemhTL+bAiMhWkThr723jpeMc2eonyceBc6kGRCQlQIgdoAtw0OZvJ3SYpCgS81pnVpeCadQHOw2eJxd00Y3m/8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":673751},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"957f2c14c24ec59a9917a9a92c664439cc852b59","scripts":{"dev":"tsx src/cli.tsx","test":"vitest --passWithNoTests","build":"tsc","start":"node dist/cli.js","changeset":"changeset","dev:local":"RELAY_URL=ws://localhost:8080 AUTH_URL=http://localhost:5173/auth/cli tsx src/cli.tsx","install-hooks":"tsx src/hooks/install.ts install","prepublishOnly":"npm run build","uninstall-hooks":"tsx src/hooks/install.ts uninstall"},"_npmUser":{"name":"glivas","email":"georgelivas9@gmail.com"},"deprecated":"This package has been renamed to flaio-cli. Install with: npm install -g flaio-cli","repository":{"url":"git+https://github.com/georgelivas/agent-manager.git","type":"git"},"_npmVersion":"10.8.2","description":"Terminal UI for managing multiple AI CLI agents with tabbed sessions","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ink":"^6.8.0","zod":"^3.24.0","react":"^19.2.4","zustand":"^5.0.5","node-pty":"^1.2.0-beta.11","@inkjs/ui":"^2.0.0","commander":"^13.1.0","@slack/web-api":"^7.14.1","@xterm/headless":"^5.5.0","@slack/socket-mode":"^2.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.1.0","typescript":"^5.7.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@changesets/cli":"^2.29.4"},"_npmOperationalInternal":{"tmp":"tmp/agent-manager_0.3.0_1772466281572_0.7335230857398609","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"agent-manager","version":"0.3.1","keywords":["cli","ai","agents","claude","gemini","terminal","tui","ink","node-pty"],"author":{"name":"George Livas"},"license":"MIT","_id":"agent-manager@0.3.1","maintainers":[{"name":"glivas","email":"georgelivas9@gmail.com"}],"homepage":"https://github.com/georgelivas/agent-manager","bugs":{"url":"https://github.com/georgelivas/agent-manager/issues"},"bin":{"agent-manager":"dist/cli.js"},"dist":{"shasum":"b8a8e8037253a134ecc7939f3a23a7ec9a6360cd","tarball":"https://registry.npmjs.org/agent-manager/-/agent-manager-0.3.1.tgz","fileCount":267,"integrity":"sha512-uD587ApxVrSL1iJAN6R6CtdUc5Z8wbyJ49pgvfBPGHnlcqO5GKavzwVECgzMeb2HtAe1eksHso7UXKjTaAPXmw==","signatures":[{"sig":"MEYCIQClbbr22DLr0sFCXbjrkQ//3g3Yf9X4uQxRAZzLEvt6nAIhAMc4Wl5u6f40rIuxNZplTDP1VQbkp5wdAHOrOMxvlS8c","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":774872},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"9489ad261fae5343e7845c393144a266a3c932ac","scripts":{"dev":"tsx src/cli.tsx","test":"vitest --passWithNoTests","build":"tsc","start":"node dist/cli.js","changeset":"changeset","dev:local":"RELAY_URL=ws://localhost:8080 AUTH_URL=http://localhost:5173/auth/cli tsx src/cli.tsx","install-hooks":"tsx src/hooks/install.ts install","prepublishOnly":"npm run build","uninstall-hooks":"tsx src/hooks/install.ts uninstall"},"_npmUser":{"name":"glivas","email":"georgelivas9@gmail.com"},"deprecated":"This package has been renamed to flaio-cli. Install with: npm install -g flaio-cli","repository":{"url":"git+https://github.com/georgelivas/agent-manager.git","type":"git"},"_npmVersion":"10.8.2","description":"Terminal UI for managing multiple AI CLI agents with tabbed sessions","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ink":"^6.8.0","zod":"^3.24.0","react":"^19.2.4","zustand":"^5.0.5","node-pty":"^1.2.0-beta.11","@inkjs/ui":"^2.0.0","commander":"^13.1.0","@slack/web-api":"^7.14.1","@xterm/headless":"^5.5.0","@slack/socket-mode":"^2.0.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.1.0","typescript":"^5.7.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@changesets/cli":"^2.29.4"},"_npmOperationalInternal":{"tmp":"tmp/agent-manager_0.3.1_1772529635552_0.2659381092238784","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-02-19T10:13:12.725Z","modified":"2026-03-03T10:32:37.146Z","0.1.0":"2026-02-19T10:13:12.967Z","0.1.1":"2026-02-19T14:47:31.147Z","0.1.2":"2026-02-19T15:37:37.914Z","0.2.0-beta.0":"2026-02-27T11:28:18.825Z","0.2.0-beta.1":"2026-02-27T14:02:39.905Z","0.3.0":"2026-03-02T15:44:41.787Z","0.3.1":"2026-03-03T09:20:35.802Z"},"bugs":{"url":"https://github.com/georgelivas/agent-manager/issues"},"author":{"name":"George Livas"},"license":"MIT","homepage":"https://github.com/georgelivas/agent-manager","keywords":["cli","ai","agents","claude","gemini","terminal","tui","ink","node-pty"],"repository":{"url":"git+https://github.com/georgelivas/agent-manager.git","type":"git"},"description":"Terminal UI for managing multiple AI CLI agents with tabbed sessions","maintainers":[{"name":"glivas","email":"georgelivas9@gmail.com"}],"readme":"# Agent Manager\n\nA terminal UI application for managing multiple AI CLI agents in tabbed sessions. Run Claude Code and Gemini CLI side by side, get permission requests forwarded to Slack, Discord, or Telegram, and adopt standalone agents already running on your system — all from a single interface.\n\nBuilt with [Ink](https://github.com/vadimdemedes/ink) (React for CLIs), [node-pty](https://github.com/microsoft/node-pty), and [xterm-headless](https://github.com/xtermjs/xterm.js).\n\n![Version](https://img.shields.io/badge/version-0.1.0-blue)\n![License](https://img.shields.io/badge/license-MIT-green)\n![Node](https://img.shields.io/badge/node-%3E%3D18-brightgreen)\n\n## Features\n\n### Multi-Agent Sessions\n- **Tabbed interface** — Run multiple AI agents simultaneously, each in its own tab with a full PTY-backed terminal\n- **Supported agents** — Claude Code and Gemini CLI out of the box, with a driver abstraction for adding more\n- **Session lifecycle** — Create new sessions, resume previous ones, or continue where you left off\n- **Intelligent status detection** — Automatically detects when an agent is idle, running, or waiting for input\n\n### Standalone Agent Adoption\n- **Auto-detection** — Continuously scans for Claude Code and Gemini CLI processes running outside the manager\n- **One-key adoption** — Press `Alt+A` to bring a standalone agent into a managed tab, seamlessly continuing its session\n\n### Messaging Connectors\nForward permission requests, tool results, and session notifications to your preferred messaging platform:\n\n| Platform | Permission Requests | Tool Results | Notifications | Threading |\n|----------|-------------------|--------------|---------------|-----------|\n| **Slack** | Text replies (allow/deny) | Per-session threads | Session start/stop | Per-session threads |\n| **Discord** | Thread replies | Formatted output | Status messages | Auto-created threads |\n| **Telegram** | Inline keyboard buttons | Formatted output | Status messages | — |\n\nAll connector dependencies are optional — only install what you need.\n\n### Portal — Remote Session Access\nConnect to running sessions from another terminal window without disrupting the main UI:\n\n- **Interactive picker** — Run `agent-manager portal` to browse and select sessions\n- **Create sessions remotely** — Start new agent sessions directly from the portal\n- **Full terminal mirroring** — See the exact same output as the main app in real-time\n- **Input forwarding** — Type commands and interact with the agent as if you were in the main app\n- **Scroll support** — Mouse wheel, `Ctrl+U`/`Ctrl+D`, and `PageUp`/`PageDown` all work\n- **Connection indicator** — The main app shows a `⇄` icon in the header when a portal client is connected\n\n### Hooks System\nAn IPC-based hooks system bridges Claude Code's lifecycle events to the manager:\n\n- **PermissionRequest** — Tool execution approval routed through connectors\n- **PostToolUse** — Tool results forwarded to messaging platforms\n- **Notification** — Agent responses and status changes relayed to connectors\n\nHooks communicate via Unix socket IPC (`/tmp/agent-manager/hooks.sock`) with newline-delimited JSON.\n\n### Terminal Emulation\n- Full ANSI color support (16, 256, and truecolor RGB)\n- Text attributes: bold, italic, underline, dim, inverse, strikethrough\n- Mouse wheel scrolling and keyboard scroll (`Ctrl+U`/`Ctrl+D`)\n- 1000-line scrollback buffer\n- FPS-limited screen rendering (default 30 FPS)\n\n### Responsive Layout\n- **Wide terminals (100+ cols):** Sidebar with session list on the left, terminal on the right\n- **Narrow terminals (< 100 cols):** Compact tab bar at the top, full-width terminal below\n\n## Installation\n\n### Prerequisites\n- Node.js >= 18\n- At least one supported AI CLI agent installed:\n  - [Claude Code](https://docs.anthropic.com/en/docs/claude-code) — `npm install -g @anthropic-ai/claude-code`\n  - [Gemini CLI](https://github.com/google-gemini/gemini-cli) — `npm install -g @google/gemini-cli`\n\n### Install from npm\n\n```bash\nnpm install -g agent-manager\n```\n\nThen run it:\n\n```bash\nagent-manager\n```\n\n### Install from Source\n\n```bash\ngit clone https://github.com/georgelivas/agent-manager.git\ncd agent-manager\nnpm install\nnpm run build\nnpm start\n```\n\n### Development\n\n```bash\n# Run with live reload\nnpm run dev\n```\n\n### Hook Installation\n\nTo enable messaging connector integration with Claude Code, install the hooks:\n\n```bash\nnpm run install-hooks\n```\n\nThis registers three hooks in `~/.claude/settings.json` that route Claude Code events through the manager's IPC server. To remove them:\n\n```bash\nnpm run uninstall-hooks\n```\n\n## Usage\n\n### Starting the Manager\n\n```bash\n# Development\nnpm run dev\n\n# Production\nnpm start\n```\n\n### Creating a Session\n\n1. Press `Ctrl+T` to open the new session dialog\n2. Select an agent (Claude Code or Gemini CLI)\n3. Enter the working directory (supports tab completion)\n4. The agent spawns in a new tab with a full terminal\n\n### Adopting a Standalone Agent\n\nIf you have a Claude Code or Gemini CLI process running in another terminal:\n\n1. Press `Alt+A` to open the adopt dialog\n2. Select the detected agent from the list\n3. The external process is terminated and its session continues in a new managed tab\n\n### Using Portals\n\nPortals let you access running sessions from a separate terminal — useful for monitoring agents on a remote machine, pairing, or just keeping the main UI on one screen while interacting from another.\n\n```bash\n# Interactive picker — browse sessions, create new ones\nagent-manager portal\n\n# Connect directly to a known session\nagent-manager portal <session-id>\n\n# Static table of running sessions\nagent-manager portal --list\n```\n\nIn the interactive picker:\n- Use **arrow keys** to navigate, **Enter** to select\n- Choose **\"+ New Session\"** to start a fresh agent from the portal\n- Press **Esc** to exit\n\nOnce connected, the portal mirrors the session in real-time. Press **Ctrl+C** to disconnect and return to your shell.\n\n### Configuring Connectors\n\nPress `Ctrl+S` to open the settings panel, then configure your preferred messaging connectors.\n\n#### Slack\n\nSlack integration gives you per-session threads, permission approval via text replies, and agent response forwarding — so you can monitor and interact with agents from your phone or desktop.\n\n**1. Create a Slack App**\n\nGo to [api.slack.com/apps](https://api.slack.com/apps) and create a new app \"From scratch.\"\n\n**2. Configure Bot Scopes**\n\nUnder **OAuth & Permissions**, add these Bot Token Scopes:\n\n| Scope | Purpose |\n|-------|---------|\n| `chat:write` | Post messages and thread replies |\n| `channels:history` | Read replies in public channels (for permission responses and prompts) |\n| `channels:read` | Resolve channel info |\n\nIf you're using a **private channel**, also add `groups:history` and `groups:read`.\n\n**3. Install to Workspace**\n\nClick **Install to Workspace** and authorize. Copy the **Bot User OAuth Token** (`xoxb-...`).\n\n**4. Invite the Bot to a Channel**\n\nIn Slack, go to your channel and type `/invite @YourBotName`.\n\n**5. Get the Channel ID**\n\nRight-click the channel name > **View channel details** > copy the **Channel ID** at the bottom.\n\n**6. (Optional) Enable Socket Mode for Real-Time Events**\n\nBy default, the manager polls Slack threads every 3 seconds. For faster message delivery:\n\n1. Go to **Socket Mode** in your app settings and enable it\n2. Generate an **App-Level Token** with `connections:write` scope\n3. Copy the token (`xapp-...`)\n\n**7. Configure in Agent Manager**\n\nPress `Ctrl+S` in the manager, enable Slack, and enter:\n\n| Field | Value |\n|-------|-------|\n| **Bot Token** | `xoxb-...` from step 3 |\n| **Channel ID** | From step 5 |\n| **App Token** (optional) | `xapp-...` from step 6 |\n\nOr edit `~/.config/agent-manager/settings.json` directly:\n\n```json\n{\n  \"connectors\": {\n    \"slack\": {\n      \"enabled\": true,\n      \"botToken\": \"xoxb-your-token\",\n      \"appToken\": \"xapp-your-token\",\n      \"channelId\": \"C0123456789\",\n      \"pollInterval\": 3000,\n      \"timeout\": 300000\n    }\n  }\n}\n```\n\n**8. Install Hooks**\n\n```bash\nnpm run install-hooks\n```\n\nThis registers lifecycle hooks in `~/.claude/settings.json` so Claude Code events (permission requests, agent responses, notifications) are forwarded to Slack.\n\n**How It Works**\n\nWhen a session starts, the bot creates a thread in your Slack channel:\n\n```\nSession started\nProject: my-project\nCWD: ~/projects/my-project\nSession: abc123\n```\n\nAll agent interactions happen in that thread:\n- **Agent responses** are posted automatically\n- **Permission requests** appear with the tool name and input — reply `allow` or `deny`\n- **You can send prompts** by replying in the thread — they're forwarded directly to the agent's input\n\nMessages from Slack are delivered via Socket Mode (instant) or thread polling (every 3s), with built-in deduplication to prevent double delivery.\n\n#### Discord\n\n1. Create a Discord bot at the [Developer Portal](https://discord.com/developers/applications)\n2. Enable the bot and grant `Send Messages` + `Read Message History` permissions\n3. In settings, enable Discord and enter:\n   - **Bot Token**\n   - **Channel ID**\n\n#### Telegram\n\n1. Create a bot via [@BotFather](https://t.me/botfather)\n2. In settings, enable Telegram and enter:\n   - **Bot Token** (from BotFather)\n   - **Chat ID** (your personal or group chat ID)\n\n### Managing Agents\n\nPress `Ctrl+S` and navigate to the **Agents** tab to:\n- Check installed agent versions\n- Switch install method (npm or Homebrew)\n- Install or update agents directly from the UI\n\n## Keyboard Shortcuts\n\n### Navigation\n\n| Key | Action |\n|-----|--------|\n| `Ctrl+T` | New session |\n| `Ctrl+W` | Close active session |\n| `Ctrl+N` / `Ctrl+Down` | Next session |\n| `Ctrl+P` / `Ctrl+Up` | Previous session |\n| `Alt+1` — `Alt+9` | Jump to session by number |\n\n### Scrolling\n\n| Key | Action |\n|-----|--------|\n| `Ctrl+U` | Scroll up |\n| `Ctrl+D` | Scroll down |\n| `Mouse Wheel` | Scroll up/down |\n\n### Panels & Modals\n\n| Key | Action |\n|-----|--------|\n| `Ctrl+S` | Toggle settings panel |\n| `Ctrl+B` | Toggle sidebar |\n| `Ctrl+G` | Toggle help modal |\n| `Alt+A` | Adopt standalone agent |\n| `Esc` | Close modal / cancel dialog |\n\n### Application\n\n| Key | Action |\n|-----|--------|\n| `Ctrl+Q` | Quit |\n\n> **Note:** On macOS, `Alt` shortcuts use the `Option` key or the `Esc` prefix (press `Esc` then the key).\n\n## Architecture\n\n```\nsrc/\n├── cli.tsx                         # Entry point (Commander + Ink)\n├── app.tsx                         # Root component\n├── agents/\n│   ├── agent-session.ts            # Session lifecycle & events\n│   ├── agent-registry.ts           # Driver registry\n│   ├── agent-detector.ts           # Standalone process scanner\n│   └── drivers/\n│       ├── base-driver.ts          # Abstract driver interface\n│       ├── claude-driver.ts        # Claude Code driver\n│       └── gemini-driver.ts        # Gemini CLI driver\n├── connectors/\n│   ├── connector-interface.ts      # Connector contract\n│   ├── connector-manager.ts        # Routes events to connectors\n│   └── adapters/\n│       ├── slack-adapter.ts        # Slack (Web API + Socket Mode)\n│       ├── discord-adapter.ts      # Discord (discord.js)\n│       └── telegram-adapter.ts     # Telegram (Telegraf)\n├── terminal/\n│   ├── pty-manager.ts              # node-pty wrapper\n│   ├── xterm-bridge.ts             # xterm-headless rendering\n│   └── screen-buffer.ts            # FPS-limited display buffer\n├── hooks/\n│   ├── hook-server.ts              # Unix socket IPC server\n│   ├── hook.ts                     # PermissionRequest handler\n│   ├── post-tool-hook.ts           # PostToolUse handler\n│   ├── notification-hook.ts        # Notification handler\n│   ├── stop-hook.ts                # Stop event handler\n│   └── install.ts                  # Hook installer/uninstaller\n├── portal/\n│   ├── shared.ts                  # Protocol types (client ↔ server)\n│   ├── portal-server.ts           # Unix socket server (main app)\n│   ├── portal-client.ts           # IPC client functions\n│   ├── portal-picker.tsx           # Interactive session picker\n│   └── ansi-renderer.ts           # ScreenContent → ANSI converter\n├── store/\n│   ├── app-store.ts                # Session state (Zustand)\n│   ├── settings-store.ts           # Persisted config (Zustand)\n│   ├── connector-store.ts          # Connector lifecycle & bridges\n│   └── portal-store.ts            # Portal connection tracking\n├── config/\n│   ├── config.ts                   # Zod schema & load/save\n│   └── defaults.ts                 # Default configuration\n└── ui/\n    ├── layout/\n    │   ├── shell.tsx               # Main layout container\n    │   ├── sidebar.tsx             # Session list panel\n    │   ├── main-pane.tsx           # Terminal + header\n    │   └── status-bar.tsx          # Bottom status indicators\n    ├── components/\n    │   ├── terminal-view.tsx       # xterm grid renderer\n    │   ├── agent-tab.tsx           # Session tab\n    │   ├── new-session-dialog.tsx  # Create session dialog\n    │   ├── adopt-agent-dialog.tsx  # Adopt agent dialog\n    │   ├── standalone-agents.tsx   # Detected agents list\n    │   ├── settings-panel.tsx      # Settings UI\n    │   ├── agents-settings-content.tsx  # Agent install/update UI\n    │   ├── help-modal.tsx          # Keybindings reference\n    │   └── path-input.tsx          # Directory autocomplete\n    └── hooks/\n        ├── use-keybindings.ts      # Keyboard shortcut handler\n        ├── use-raw-input.ts        # Raw stdin forwarding\n        ├── use-terminal-size.ts    # Terminal dimensions\n        ├── use-spinner.ts          # Cycling animation hook\n        ├── use-git-info.ts         # Git branch/status polling\n        └── use-portal-connected.ts # Portal connection state\n```\n\n### How It Works\n\n1. **CLI entry** (`cli.tsx`) sets up the alternate screen buffer, mouse tracking, and renders the Ink app. The `portal` subcommand launches the interactive picker or connects to a session directly.\n2. **App** (`app.tsx`) initializes stores, starts connectors and the portal server, and renders the shell layout\n3. **Sessions** are managed by `AppStore` — each session owns a `PtyManager` (node-pty), `XtermBridge` (headless terminal emulation), and `ScreenBuffer` (FPS-limited rendering)\n4. **Keyboard input** is captured by `useRawInput` and forwarded to the active session's PTY, except when intercepted by `useKeybindings` for shortcuts\n5. **Portal server** (`portal-server.ts`) listens on a Unix socket (`/tmp/agent-manager/portal.sock`). Portal clients subscribe to sessions, receive throttled screen frames, and forward keystrokes — providing full remote access without disrupting the main UI\n6. **Hooks** are installed as Claude Code lifecycle hooks that send events to the manager's IPC server, which routes them through `ConnectorManager` to the configured messaging adapters\n7. **State** flows through Zustand stores with selector-based subscriptions for efficient re-renders\n\n## Configuration\n\nSettings are persisted to `~/.config/agent-manager/settings.json` and validated with Zod on load.\n\n```jsonc\n{\n  \"ui\": {\n    \"sidebarWidth\": 24,         // Sidebar character width\n    \"narrowBreakpoint\": 100,    // Column threshold for responsive layout\n    \"targetFps\": 30             // Screen buffer refresh rate\n  },\n  \"connectors\": {\n    \"slack\": {\n      \"enabled\": false,\n      \"botToken\": \"\",           // xoxb-... token\n      \"appToken\": \"\",           // xapp-... token (optional, for Socket Mode)\n      \"channelId\": \"\",\n      \"pollInterval\": 2000,     // Thread polling interval (ms)\n      \"timeout\": 300000         // Permission request timeout (ms)\n    },\n    \"discord\": {\n      \"enabled\": false,\n      \"botToken\": \"\",\n      \"channelId\": \"\",\n      \"timeout\": 300000\n    },\n    \"telegram\": {\n      \"enabled\": false,\n      \"botToken\": \"\",\n      \"chatId\": \"\",\n      \"timeout\": 300000\n    }\n  },\n  \"agents\": {\n    \"statusCheckInterval\": 1000,  // Agent status polling (ms)\n    \"detectorInterval\": 5000      // Standalone agent scan interval (ms)\n  }\n}\n```\n\n## Contributing\n\nContributions are welcome! Please feel free to submit issues and pull requests.\n\n### Adding a New Agent Driver\n\n1. Create a new driver in `src/agents/drivers/` extending `BaseDriver`\n2. Implement the required methods: `spawn()`, `resume()`, `continue()`, `detectStatus()`\n3. Register it in `src/agents/agent-registry.ts`\n\n### Adding a New Connector\n\n1. Create a new adapter in `src/connectors/adapters/` implementing `ConnectorInterface`\n2. Implement: `connect()`, `disconnect()`, `requestPermission()`, `postToolResult()`, `postNotification()`\n3. Add config schema in `src/config/config.ts`\n4. Wire it up in `src/connectors/connector-manager.ts`\n\n## License\n\nThis project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.\n","readmeFilename":"README.md"}