| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
A Hermes Agent plugin that drives interactive CLI/TUI tools — primarily Claude Code interactive mode, with adapters for Codex and OpenCode — using Hermes' existing terminal and process primitives.
The plugin gives Hermes one tool (interactive_cli) and one slash command (/icli) for starting, watching, and steering interactive sessions from chat. Unlike claude -p, the session stays open so the agent can have a back-and-forth conversation with the inner CLI.
hermes plugins install pingchesu/hermes-interactive-cli-plugin --enableManual install is also supported:
git clone https://github.com/pingchesu/hermes-interactive-cli-plugin.git \
~/.hermes/plugins/interactive-cli
hermes plugins enable interactive-cliThe plugin only depends on the Hermes plugin context API (register_tool, register_command, dispatch_tool) — no Hermes internals are imported.
Subsequent actions only need session_key (or session_id):
{"name": "interactive_cli", "arguments": {"action": "send", "session_key": "slack:C123:T456", "prompt": "Show me the diff"}}
{"name": "interactive_cli", "arguments": {"action": "poll", "session_key": "slack:C123:T456", "lines": 50}}
{"name": "interactive_cli", "arguments": {"action": "stop", "session_key": "slack:C123:T456"}}In Slack / Hermes chat:
/icli start claude /home/me/projects/foo /icli send Help me refactor api/users.py /icli poll /icli log 200 /icli status /icli stop /icli list
The session key is derived from the chat context, so you don't need to pass it manually inside one chat thread.
| CLI | Command | Exit | Notes |
|---|---|---|---|
| claude | HOME=... PATH=~/.local/bin:... claude if present, else claude | /exit + kill | Recognises ❯, trust this folder, Do you trust, permission |
| codex | codex | Ctrl-C + kill | Soft-warns if workdir isn't inside a git repo |
| opencode | opencode | Ctrl-C + kill | Warns that /exit is not valid in opencode |
| custom | user-supplied via command | close + kill | Use for any other PTY-friendly tool |
python -m pytest -q # unit tests, no real CLIs invoked
python scripts/smoke_plugin.pyBoth run fully offline against a fake dispatch_tool.
hermes-interactive-cli-plugin/ ├── plugin.yaml ├── __init__.py # directory-plugin shim ├── hermes_interactive_cli/ │ ├── __init__.py # register(ctx) │ ├── schemas.py # interactive_cli tool schema │ ├── adapters.py # claude / codex / opencode / custom │ ├── session_manager.py # SessionManager + handler glue │ ├── slash.py # /icli parser │ ├── sanitize.py # ANSI strip + tail helpers │ └── paths.py # HERMES_HOME resolution, atomic writes ├── scripts/ │ └── smoke_plugin.py ├── tests/ │ ├── test_adapters.py │ ├── test_schemas.py │ ├── test_session_manager.py │ ├── test_slash.py │ └── test_register.py ├── pyproject.toml ├── LICENSE └── README.md
MIT — see LICENSE.
| Back | FazBrowse Home | New Git URL |
{ "name": "interactive_cli", "arguments": { "action": "start", "cli": "claude", "workdir": "/home/me/projects/foo", "session_key": "slack:C123:T456", "auto_trust": false, "prompt": "Hi Claude, let's pair on the auth module." } }