Servers
Your agent on your servers. You decide what runs.
An SSH gateway for AI coding agents, served as MCP tools. Agents run commands, move files and start long jobs on your hosts. Routine work passes your allow rules, and the rest waits for you.
npm i -g athenodeDeploy the checkoutClaude Code14:02:17
sudo systemctl restart shop-apiReason Restart the API so that it loads the new payment settings
No allow rule on this connection matches it.
- 14:01
systemctl status shop-apiAuto-approved - 13:59
journalctl -u shop-api -n 50Auto-approved
The approval gate
What happens between a tool call and your server.
Commands, file operations, jobs and new health checks pass the same gate, and every action, approved or not, lands in History.
The agent asks
Each action names a connection and carries a required reason, whether it runs a command, a job, a file operation or a health check. You see the reason, and History keeps it.
Denylist
Global and per connection, matched against every part of a command. A match always waits for you and can never be always allowed, even in auto mode.
Default patterns
rm -*r*mkfs*dd *reboot*
Mode and allow rules
Each connection runs in confirm mode, the default, or in auto mode, and a session can override it. In confirm mode a call runs at once only when every part of the command matches an allow rule; wrappers such as bash, eval and xargs and output written to a file always ask. In auto mode everything not on the denylist runs.
You decide
The request waits in its session window: Approve, Reject, or Always allow with a pattern you can edit. Unanswered, it times out after 10 minutes by default.
Run and audit
It runs over SSH, through the connection's jump hosts. History records the decision, the matched rules, the command, the reason, the names of environment variables (never their values), the exit code and the output.
Connections
Your hosts, tagged the way you deploy.
Tag connections dev, rc and prod, reach private hosts through jump hosts, and put each connection in confirm or auto mode. Import the hosts you have in your SSH config.
Connections
- All
- dev
- rc
- prod
| Connection | Status | Uptime | Load | Disk |
|---|---|---|---|---|
prod-api-1prod | OK | 41d 6h | 0.42 0.38 0.31 | 63% |
prod-db-1prod | OK | 41d 6h | 0.18 0.22 0.20 | 71% |
rc-api-1rc | OK | 6d 2h | 0.35 0.30 0.27 | 48% |
bastion-euprod | OK | 88d 14h | 0.02 0.03 0.00 | 22% |
dev-box-1dev | Unreachable | – | – | – |
Services and health checks
Know a service is down before your users do.
Give each service a check command, an interval from 30 seconds to a day and a failure threshold. Exit code 0 means healthy.
- Every run ends healthy, unhealthy, timeout, unreachable or error.
- Down and recovered alerts as desktop notifications in your browser and as a JSON webhook, HMAC-signed when you give it a secret.
- Adding or changing a check passes the approval gate, like a command it runs.
prod-api-1Recent runs
- shop-apiHealthy
- payments-workerUnhealthy
- nginxHealthy
systemctl is-active payments-workerRuns every 60 s, down after 3 failures in a row
More than one command
Jobs, files, and a live view of what agents do.
Jobs that outlive the connection
Migrations and builds run as detached jobs. They keep going through SSH drops and gateway restarts; the agent follows their status and logs, and cancelling one passes the gate.
start_jobnpm run migratejob_statusRunning for 4 minjob_logsThe last 50 lines of its log
Files over SFTP
Read a config, write a patched one, list a folder, upload a build or download a dump, as the SSH user and through the same approvals. Transfers go between the host and the machine the gateway runs on.
- read_file
- write_file
- list_dir
- upload
- download
Live and History
Live lists the actions waiting or running in every session; open one to decide in its session window. History is the audit log of every action: the session, the reason, the command and what came back.
- prod-api-1
sudo systemctl restart shop-apiPending - rc-api-1
docker compose up -dAuto-approved
- prod-api-1
Security
Your keys stay yours, and every action is on record.
Free, on your own machine
Secrets stay secret
Keys and passwords are encrypted with AES-256-GCM and never sent to the browser or to agents.
Closed to the network
The athenode daemon listens on the loopback address only, so other machines cannot reach it.
Host keys you trust
A new host key shows its fingerprint and waits for your trust. A changed key is refused, and every jump host is checked the same way.
An audit log you keep
History keeps every action for 90 days by default, and you set how long.
Pro
For teams on a self-hosted server
- Accounts with single sign-on (OIDC) and OAuth 2.1 for agents, so every action has an account
- Project roles: viewer, editor and owner
- Only the user whose agent asked decides its approval
- Shared and personal allow rules
- Shared and personal SSH credentials
- Audit export as CSV or JSON
- SIEM forwarding over syslog or an HTTPS webhook; retention never deletes an entry before it is forwarded
- Runs on your own PostgreSQL server
For your agent
The SSH gateway module's 21 MCP tools.
The SSH gateway is one module of the athenode MCP server, so one MCP entry in your AI coding tool brings these tools with the others. Name a session with set_session_label to find it in History later.
Connect your AI coding tool21 tools
- add_service
- cancel_job
- copy_connection
- download
- exec
- exec_output
- get_connection
- job_logs
- job_status
- list_connections
- list_dir
- read_file
- remove_service
- run_service_check
- service_health
- set_connection_description
- set_session_label
- start_job
- update_service
- upload
- write_file
Add your first connection.
Start in confirm mode: the agent asks before every command until you write allow rules. Install Athenode, then run athenode init in a repository.
npm i -g athenode