GenericAgent can be deployed as a developer CLI, a globally installed local tool, or a packaged artifact with the TypeScript TUI bundle embedded.
| Mode | Use when | Command |
|---|---|---|
| Source checkout | Active development | uv run GenericAgent |
| Global local tool | Personal daily CLI | uv tool install . |
| Wheel/package artifact | Distribution or CI artifact | python -m build after bundling TUI |
| Headless command runner | CI / scripted tasks | gae chat /status, gae task <iodir> |
cd ga_engineered
uv sync --extra dev
SKIP_INSTALL=1 ./scripts/build_tui.sh
uv tool install --force .Smoke test:
GenericAgent --version
gae doctor
gae status
gae chat /statusThe wheel must include src/generic_agent_engineered/_tui_dist/bundle.js.
cd ga_engineered
uv sync --extra dev
SKIP_INSTALL=1 ./scripts/build_tui.sh
uv buildThen install from dist/:
uv tool install --force dist/generic_agent_engineered-*.whlSet a stable home directory on deployed machines:
export GENERIC_AGENT_CONFIG_DIR=/opt/generic-agent/state
mkdir -p "$GENERIC_AGENT_CONFIG_DIR"GA_CONFIG_DIR is the short alias. GENERIC_AGENT_HOME is still honored for
older service files, and CLAUDE_CONFIG_DIR is accepted as a free-code
compatibility fallback when no GenericAgent-specific variable is present.
Recommended layout:
/opt/generic-agent/
├── app/ # source checkout or installed package reference
├── state/ # GENERIC_AGENT_CONFIG_DIR
│ ├── settings.json
│ ├── config.json
│ ├── history.jsonl
│ ├── auth.json
│ ├── agents/
│ ├── cache/
│ ├── projects/
│ ├── sessions/
│ ├── skills/
│ ├── tasks/
│ ├── telemetry/
│ ├── transcripts/
│ └── state/sessions.sqlite
└── logs/ # shell/service logs if you wrap the CLI
Keep auth.json private:
chmod 700 "$GENERIC_AGENT_CONFIG_DIR"
chmod 600 "$GENERIC_AGENT_CONFIG_DIR/auth.json"For machines that need live browser tools:
uv sync --extra bridge
uv run gae bridge --port 18765Operational notes:
- WebSocket listens on the selected port, default
18765. - HTTP
/linklistens onPORT+1, default18766. - The Chrome extension must be loaded from
assets/tmwd_cdp_bridge/. - If another bridge already owns the port, the gateway will report the bridge as unavailable rather than killing the existing process.
For long-running local use, run the bridge in your terminal multiplexer or service manager and start the TUI separately.
Example CI sequence:
uv sync --extra dev
SKIP_INSTALL=1 ./scripts/build_tui.sh
python3 -m json.tool tasks.json >/dev/null
python3 -m compileall -q src tests
python3 -m unittest tests.test_commands
cd ui-tui && npm run type-check && npm test
uv run gae --version
uv run gae chat /statusUse focused Python tests if the runner cannot bind browser bridge ports or does not have every optional dependency installed.
Before publishing or pushing a deployment branch:
- Build the TUI bundle.
- Run Python compile/tests.
- Run TypeScript type-check/tests.
- Verify
tasks.jsonis valid JSON. - Verify
gae doctor,gae status, andgae chat /status. - Confirm no secrets are present in
.generic-agent/, shell history, or docs. - Update
CHANGELOG.mdandtasks/TASK_REPORT.mdfor user-visible changes.
See Release Checklist for the standing project gates.