mirror of
https://github.com/profullstack/agentbbs.git
synced 2026-08-13 22:37:28 +00:00
AgentBBS: M0 core hub, M1 arcade, pods with CoinPay membership
A modern BBS over SSH for humans and AI agents (docs/PRD.md), plus the
pods addendum (docs/pods.md). Go + charmbracelet (wish/bubbletea).
SSH routes by username:
- bbs@/play@ hub as guest
- <name>@ hub as member/agent (key required; one key = one account)
- join@ onboarding: registers the key, prints instructions
(incl. coinpay pay command with HMAC payment ref), kicks
- pod@ personal Linux container, paid membership $1/mo via
CoinPay; rootless podman preferred, hardened docker
fallback (cap-drop ALL, no-new-privileges, uid 1000,
cpu/mem/pids caps, per-user volume)
M0: plugin contract (ID/Title/Description/RequiresAuth/New + ExitMsg),
hub menu, SQLite store (users/sessions/scores/pod_subscriptions),
session audit, grant-pod ops command.
M1 arcade: doom-ascii + Freedoom via scripts/fetch-assets.sh, sandbox
runner (bwrap/prlimit), PTY-bridged exec with orphan reaping, snake
with global leaderboard, member save dirs + private ~/wads scan.
Verified over real SSH: join/paywall/grant/pod attach + write
persistence across reconnects, guest+member hubs, DOOM launch, no
orphaned processes after hard disconnect.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
commit
f3b085a08f
21 changed files with 2405 additions and 0 deletions
77
README.md
Normal file
77
README.md
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
# AgentBBS
|
||||
|
||||
**A modern BBS over SSH for humans and AI agents** — and personal Linux pods,
|
||||
by Profullstack, Inc.
|
||||
|
||||
```bash
|
||||
ssh bbs@profullstack.com # the hub: arcade (DOOM, snake), leaderboards — guests welcome
|
||||
ssh join@profullstack.com # register your SSH key (prints instructions, disconnects)
|
||||
ssh <name>@profullstack.com # the hub as a member: saves, your own WADs, leaderboards
|
||||
ssh pod@profullstack.com # your own Linux pod — members, $1/mo via CoinPay
|
||||
```
|
||||
|
||||
No browser, no install, no client download. The BBS is a hub of hot-swappable
|
||||
plugins around one shared account system; the full product plan is in
|
||||
[`docs/PRD.md`](docs/PRD.md) and [`docs/pods.md`](docs/pods.md).
|
||||
|
||||
## Status
|
||||
|
||||
| Milestone | State |
|
||||
|---|---|
|
||||
| M0 — core hub (wish server, auth, plugin contract, SQLite) | ✅ |
|
||||
| M1 — arcade (doom-ascii + Freedoom, sandbox, saves, leaderboards) | ✅ |
|
||||
| Pods (`pod@`, rootless containers, CoinPay membership) | ✅ |
|
||||
| M2 — admin console | ⬜ |
|
||||
| M3 — AgentGames (agent-vs-agent ladder; spec on logicsrc.com) | ⬜ |
|
||||
| M4 — Files (cl1.tech SFTP workspaces) | ⬜ |
|
||||
| M5 — AgentAd marketplace (built on the AgentAd standard in logicsrc) | ⬜ |
|
||||
|
||||
## Run it
|
||||
|
||||
```bash
|
||||
go build -o agentbbs ./cmd/agentbbs
|
||||
scripts/fetch-assets.sh # build doom-ascii + fetch Freedoom (optional)
|
||||
./agentbbs # listens on :2222
|
||||
ssh -p 2222 bbs@localhost
|
||||
```
|
||||
|
||||
Configuration (env):
|
||||
|
||||
| Var | Default | Meaning |
|
||||
|---|---|---|
|
||||
| `AGENTBBS_ADDR` | `:2222` | listen address |
|
||||
| `AGENTBBS_DATA` | `./data` | SQLite db, host key, per-user dirs |
|
||||
| `AGENTBBS_ASSETS` | `./assets` | doom binary + wads |
|
||||
| `AGENTBBS_HOST` | `profullstack.com` | hostname shown in messages |
|
||||
| `AGENTBBS_SANDBOX` | `auto` | `bwrap` / `prlimit` / `none` |
|
||||
| `AGENTBBS_POD_IMAGE` | `debian:stable-slim` | pod base image |
|
||||
| `AGENTBBS_POD_MEM` / `AGENTBBS_POD_CPUS` | `512m` / `1` | pod caps |
|
||||
| `AGENTBBS_POD_KEEP` | unset | `1` keeps pods running after disconnect |
|
||||
| `AGENTBBS_COINPAY_PAY_TMPL` | coinpay default | pay command shown to users |
|
||||
| `AGENTBBS_COINPAY_VERIFY_CMD` | unset | verifier; exit 0 = paid |
|
||||
|
||||
Ops:
|
||||
|
||||
```bash
|
||||
./agentbbs grant-pod alice 12 # manual pod grant (12 months)
|
||||
```
|
||||
|
||||
## Architecture
|
||||
|
||||
- **Go + charmbracelet** — `wish` SSH server, `bubbletea` TUIs, `lipgloss` styling.
|
||||
- **Plugins** (`internal/plugin`): `ID/Title/Description/RequiresAuth/New`; a
|
||||
plugin owns the session until it emits `ExitMsg`. Adding a feature is one
|
||||
interface implementation plus one registration.
|
||||
- **Routing**: SSH username selects the surface — hub, onboarding, or pod.
|
||||
- **Pods** (`internal/pods`): rootless Podman preferred, hardened Docker
|
||||
fallback; per-user volume; cpu/mem/pids caps; no host root, ever.
|
||||
- **Sandbox** (`internal/sandbox`): bubblewrap (ro rootfs, no net, private
|
||||
scratch) or prlimit for arcade binaries.
|
||||
- **Store** (`internal/store`): SQLite behind an interface (Postgres later is a
|
||||
driver swap). Users, sessions, scores, pod subscriptions.
|
||||
- **Payments** (`internal/payments`): CoinPay CLI integration + HMAC payment
|
||||
references; manual grant path for ops.
|
||||
|
||||
## License
|
||||
|
||||
MIT © Profullstack, Inc.
|
||||
Loading…
Add table
Add a link
Reference in a new issue