diff --git a/README.md b/README.md index 45be275..5f9d9d0 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,10 @@ # NOC — Not OpenClaw -Telegram bot that bridges messages to `claude` sessions. +Telegram bot that bridges messages to local `claude` CLI sessions — chat with Claude directly from Telegram. + +``` +User → Telegram → noc bot → claude --resume → stream back → Telegram +``` ~600 lines of Rust. One binary. One config file. Does the thing. @@ -23,31 +27,64 @@ NOC is for those people. 5. Files uploaded to the bot are forwarded to Claude; files Claude writes to the output dir are sent back 6. Sessions are scoped per chat and refresh daily at a configurable hour (default: 5am) +Session IDs are deterministic — generated with UUIDv5 from `(chat_id, date)`, format: `noc-{chat_id}-{YYYYMMDD}`. + ## Setup ```bash cp config.example.yaml config.yaml -# edit config.yaml with your values +# fill in your values ``` -## Config +### Config | Key | Description | |-----|-------------| | `tg.key` | Telegram bot token | | `auth.passphrase` | Passphrase required to authenticate each session | -| `session.refresh_hour` | Hour (local time, 24h) when sessions reset | +| `session.refresh_hour` | Hour (local time, 24h) when sessions reset (default: `5`) | ## Deploy +### Local + ```bash make deploy ``` -Builds the release binary and installs a `systemd --user` service. Remote deployment via `make deploy-hera`. +Builds the release binary and installs a `systemd --user` service. + +### Remote (hera) + +```bash +make deploy-hera +``` + +Builds locally, copies the binary and config to `heradev`, then starts the service there. ## Logs ```bash journalctl --user -u noc -f ``` + +## Tech stack + +| Layer | Technology | +|-------|-----------| +| Language | Rust (2021 edition) | +| Telegram | teloxide 0.12 | +| Async runtime | tokio (full) | +| Config | YAML + serde | +| Deployment | systemd user service + Makefile | + +## Roadmap + +- [ ] Streaming responses — edit message as output arrives +- [ ] Markdown formatting — MarkdownV2 rendering +- [ ] Timeout handling — kill claude if it hangs +- [ ] Graceful shutdown on SIGTERM +- [ ] `/reset` command — force new session without waiting for daily refresh +- [ ] Rate limiting per chat +- [ ] Voice message support — STT (whisper.cpp) → text → claude +- [ ] Video/audio transcription