## Review: `protostatis/openrouter-agent-cli`
**What it is:** A standalone terminal agent (CLI) for [OpenRouter](https://openrouter.ai) models that gives an LLM tool actions (shell, file ops, web discovery) with interactive permission gating, session persistence, and context management. It's a Python package installable from PyPI (`pip install openrouter-agent-cli`), currently at version **0.1.6** ([pyproject.toml](https://github.com/protostatis/openrouter-agent-cli/blob/main/pyproject.toml)).
### Strengths
- **Security-conscious design** — This is the standout feature. The project takes untrusted model output seriously:
- `run_bash` runs in a separate process group, bounds output, kills descendants on timeout, and scrubs OpenRouter/Brave API keys from the child environment ([SECURITY.md](https://github.com/protostatis/openrouter-agent-cli/blob/main/SECURITY.md)).
- File tools (`list_dir`/`read_file`/`write_file`/`edit_file`) enforce a workdir jail via `relative_to(workdir)`, with 2 MiB caps, atomic writes, optional SHA-256 preconditions, and one-shot `/undo`.
- `discover` (web) is HTTPS-only, blocks private/loopback/link-local/metadata hosts after DNS resolution, and explicitly warns that web content is untrusted and may prompt-inject the model.
- Terminal rendering strips ANSI/control characters to prevent escape-sequence injection ([cli.py](https://github.com/protostatis/openrouter-agent-cli/blob/main/openrouter_agent_cli/cli.py)).
- **Granular permission model** — allow/deny/ask with once/batch/turn/session/persistent scopes, plus persistent `/allow`/`/deny` rules cached in `~/.openrouter-agent-cli/policy.json`. Tools are risk-rated (LOW→CRITICAL).
- **Good feature set** — session persistence, automatic context compaction (~12k tokens), `/undo`, `/inspect`, concurrent web-discovery batching (`max_concurrency`), non-interactive `--prompt` mode for scripting, and a free-tier default model so first runs don't cost money.
- **Documentation quality** — README, SECURITY.md, and a thoughtful [BASH_TOOL_COMPARISON.md](https://github.com/protostatis/openrouter-agent-cli/blob/main/BASH_TOOL_COMPARISON.md) comparing its shell design against Claude Code and GitHub Copilot CLI.
- **Tests present** — `tests/` includes `test_cli.py`, `test_discovery.py`, `test_output.py`, and `test_tool_safety.py` (pytest-asyncio, strict mode).
- **MIT licensed** ([LICENSE](https://github.com/protostatis/openrouter-agent-cli/blob/main/LICENSE)).
### Weaknesses / concerns
- **Early-stage, single-maintainer project** — 0 stars, 0 forks, 0 issues, 0 PRs. The [commit history](https://github.com/protostatis/openrouter-agent-cli/commits/main/) shows active development (35 commits, heavy activity Aug 22–30, 2026) but it's essentially one person's project with no community validation yet. The SECURITY.md itself states "This project is early-stage."
- **No CI test workflow** — the only GitHub Action is `release.yml` (PyPI publishing); there's no automated test/CI pipeline running the test suite on push.
- **`run_bash` is not jailed** — the README and SECURITY.md are honest that shell execution is cwd-only, *not* sandboxed, unlike the file tools. Combined with the default `ask` policy, this is safe-by-default, but it's the highest-risk surface.
- **Platform limitation** — real web discovery depends on `pyunbrowser`, which only ships Linux/macOS wheels; on Windows the CLI works but `discover` is unavailable.
- **Dependency footprint** — pulls in `pyunbrowser` (a browser automation library) as a default dependency even for users who only want the shell/file tools.
### Bottom line
A well-engineered, security-minded terminal agent for OpenRouter with a thoughtful permission-gating and sandboxing story — arguably more careful about untrusted model output than many comparable tools. It's genuinely early-stage (no community traction, no CI test gate), so treat it as a promising personal project rather than battle-tested software. The honest security documentation and risk-rated tool design are its biggest assets.
**Sources:** [README](https://github.com/protostatis/openrouter-agent-cli), [SECURITY.md](https://github.com/protostatis/openrouter-agent-cli/blob/main/SECURITY.md), [pyproject.toml](https://github.com/protostatis/openrouter-agent-cli/blob/main/pyproject.toml), [cli.py](https://github.com/protostatis/openrouter-agent-cli/blob/main/openrouter_agent_cli/cli.py), [BASH_TOOL_COMPARISON.md](https://github.com/protostatis/openrouter-agent-cli/blob/main/BASH_TOOL_COMPARISON.md), [commit history](https://github.com/protostatis/openrouter-agent-cli/commits/main/)
1navigatehttps://github.com/protostatis/openrouter-agent-cli
2get_text
3navigatehttps://github.com/protostatis/openrouter-agent-cli/blob/main/SECURITY.md
4navigatehttps://github.com/protostatis/openrouter-agent-cli/blob/main/pyproject.toml
5navigatehttps://github.com/protostatis/openrouter-agent-cli/tree/main/openrouter_agent_cli
6navigatehttps://github.com/protostatis/openrouter-agent-cli/tree/main/docs
7navigatehttps://raw.githubusercontent.com/protostatis/openrouter-agent-cli/main/openrouter_agent_cli/cli.py
8navigatehttps://raw.githubusercontent.com/protostatis/openrouter-agent-cli/main/LICENSE
9navigatehttps://github.com/protostatis/openrouter-agent-cli/tree/main/tests
10navigatehttps://raw.githubusercontent.com/protostatis/openrouter-agent-cli/main/BASH_TOOL_COMPARISON.md
11navigatehttps://github.com/protostatis/openrouter-agent-cli/commits/main/
12navigatehttps://github.com/protostatis/openrouter-agent-cli/tree/main/.github/workflows