aev-web
aev-web is the Aev web terminal plugin crate from Trevor Knott / Knott Dynamics. It provides a local, token-protected HTTP server for controlling PTY-backed terminal sessions from a browser or another local tool.
It also exports the future Aev plugin entrypoint aev_plugin_init and advertises the aev.plugin.v1 manifest contract.
Package
- Crate:
aev-web - Binary:
aev-web - Plugin ID:
aev-web - Plugin entrypoint:
aev_plugin_init - Protocol:
aev.plugin.v1 - Author: Trevor Knott
- Organization: Knott Dynamics
- Repository:
https://github.com/Tknott95/AevWeb
What It Does
- Starts a local HTTP server, default
127.0.0.1:8765. - Generates a bearer token unless
AEV_WEB_TOKENis provided. - Serves a small browser UI at
/. - Creates PTY-backed shell sessions with UUIDv7 IDs.
- Lets clients write terminal input and poll terminal output.
- Keeps output in a bounded in-memory ring buffer.
- Exposes an Aev plugin manifest at
/api/manifest.
Install
From crates.io:
From source:
Quick Start
Run with a generated token:
Run with a stable token:
AEV_WEB_TOKEN=replace-with-a-secret
The server prints a local URL like:
open http://127.0.0.1:8765/?token=<token>
Open that URL in a browser on the same machine.
Configuration
| Setting | CLI | Environment | Default |
|---|---|---|---|
| Bind address | --bind |
AEV_WEB_BIND |
127.0.0.1:8765 |
| API token | --token |
AEV_WEB_TOKEN |
generated UUIDv7 token |
Keep the default loopback bind unless you intentionally expose terminal access through a separate bridge such as aev-bridge.
HTTP API
Public health endpoint:
Authenticated requests use Authorization: Bearer <token>.
Create a session:
Create a custom command session:
Write terminal input:
Read terminal output:
Terminate a session:
API Routes
GET /healthreturns public server health.GET /api/manifestreturns theaev-webplugin manifest.POST /api/sessionscreates a PTY-backed terminal session.GET /api/sessionslists active sessions.GET /api/sessions/{id}returns one session summary.GET /api/sessions/{id}/output?since={cursor}reads terminal output.POST /api/sessions/{id}/inputwrites terminal input.DELETE /api/sessions/{id}terminates a session.
Aev Registration
The current Aev plugin board validates descriptors and contracts. It does not load plugin code yet. Register the descriptor with:
/plugins add aev-web git https://github.com/Tknott95/AevWeb.git aev_plugin_init tool,terminal,web,local-http,bearer-auth
/plugins validate all
See examples/plugins.json for an equivalent .aev/plugins.json entry.
Use With aev-bridge
Use aev-web as the local terminal owner and aev-bridge as the phone/LAN bridge:
AEV_WEB_TOKEN=replace-with-a-secret
Then start aev-bridge with the same upstream token:
AEV_WEB_TOKEN=replace-with-a-secret AEV_BRIDGE_TOKEN=phone-secret
Security
- Treat
AEV_WEB_TOKENas terminal access. - Keep
aev-webbound to loopback unless you know exactly why it must be reachable elsewhere. - Prefer
aev-bridgefor phone access instead of exposingaev-webdirectly. - The browser UI stores the token in local storage for convenience.
- Do not put real tokens in committed
.envfiles.
Development
Release Notes
See CHANGELOG.md.