Releases: NikolayS/samograph
Release list
v0.7.1
What's changed since v0.7.0
- fix: surface transcription-provider failures instead of sitting silently deaf (#33, #34) — the bot now reports provider/connection failures rather than appearing to listen while deaf.
- feat: selectable library of ~10 chat-chime sounds (#31).
- docs: publish samograph.dev product spec to
blueprints/(#32).
Full changelog: v0.7.0...v0.7.1
v0.7.0
What's new since v0.6.2
Features
- Self-introduction in meeting chat — new
samograph introcommand andjoin --intro; the bot can greet the call when it joins (#27). - Audible chat chime —
samograph chatnow plays a soft chime into the call audio via Recall'soutput_audio(not just the camera page, which is silent in the headless renderer), and the camera cue now animates on every presence background including the static robot (#26). - Soft chime on the bot camera when the bot posts in chat (#25).
- Presence camera lanes show newest at the bottom (#24).
Fixes
- Tunnel health-check no longer hangs — added a 5s
AbortSignal.timeouttoprobeTunnelHealth(#29).
Docs
- Codified the samorev review gate for merges in CLAUDE.md (#30).
samograph v0.6.1
Published to npm: npm i -g samograph. Higher-quality static robot avatar (768px) and chrome-free presence in robot mode (no header/lanes/FPS). Defaults: robot look, web_4_core, --dict postgresfm.
samograph v0.6.0
Renamed from samocall to samograph. New defaults: presence look = full-frame static samoagent robot avatar, Recall bot variant web_4_core, and --dict postgresfm. State dir is now ~/.samograph; env vars are SAMOGRAPH_*.
v0.5.0 — samocall: dynamic bot presence
Highlights
Project renamed: samoagent → samocall. Binary, npm package, SAMOCALL_* env vars, X-Samocall-* HTTP headers, and the ~/.samocall home dir all follow. GitHub redirects from the old repo name; the samoagent.dev domain is retained during the transition.
Dynamic bot presence. The static camera avatar is replaced by a live, token-gated presence page served by the local callback server and rendered as the bot's camera in the call:
samocall presence <listening|thinking|speaking|acting|idle> [message]— update the in-call state; bare toggles update quietly, explicit messages also appear in the Comments lane- Live "heard" lane mirrors recent transcript lines without overriding the agent-set state
join --presence-bg <sphere|field|static|cycle>— background mode;join --no-presence— opt out entirelyjoin --variant <web|web_4_core|web_gpu>— larger Recall instances for smoother rendering- Graceful degradation: if the tunnel serves a browser interstitial (free ngrok, localtunnel), the bot joins without the camera and warns, instead of failing
Security hardening. Read/write presence token split (the URL given to Recall is read-only); header-only /presence.json; constant-time token comparison; tokens passed to the helper server via environment, not argv; loopback bind; 1 MB request body cap.
Quality
v0.4.1
Patch release after the public npm launch.
Changes:
- Add command-specific help for join/frame/doctor.
- Add samoagent doctor for local prerequisite checks.
- Include docs/release-checklist.md in the repo and package.
- Keep CI/publish workflows ready for GitHub Actions Node 24.
Validation:
- bun test
- bun run build
- npm pack --dry-run
- GitHub CI green
v0.4.0
What's new in v0.4.0
Features
- WebSocket frame capture on by default —
samoagent joinnow enables in-memory frame capture automatically. No RTMP, no ngrok TCP, no card verification needed. Use--no-ws-videoto opt out. --version/-v/-Vflags —samoagent --versionprints the installed version.- Improved
--helpoutput — documents theRECALL_API_KEYrequirement and available flags upfront. samoagent frame --archivenow also updateslatest.png(previously wrote only the timestamped copy).
Bug fixes
server.tsbody-size check now uses byte length (not UTF-16 string length).- Port validation:
--port 0,--port 99999,--port abcall fail with a clear error. samoagent watchprintsNo active session. Run 'samoagent join' first.to stderr instead of silently exiting when no session is active.
Test coverage
- 200 tests (was 187): added
cmdTranscript,cmdStatus,cmdJoinedge cases (ngrok null path,--rtmpfailure branches,--rtmp-url localhost).
Packaging
CLAUDE.mdremoved from npm tarball (was internal agent instructions, not for consumers)..npmignoreadded.Apache-2.0license.
Housekeeping
- Python legacy test suite deleted (1,367 lines testing code that no longer exists).
- README accuracy audit: all commands, flags, defaults, and failure modes verified against the running code.
samoagent.devlive on HTTPS.
Install
npm install -g samoagent
Requires: RECALL_API_KEY env var and ngrok installed and authenticated.
v0.3 - TypeScript CLI + no-TCP frame capture
Highlights
- Rewrote the CLI path in TypeScript/Bun while keeping the legacy Python test suite green.
- Added no-TCP live frame capture with
samoagent join --ws-video. - Added on-demand frame export with safe defaults: incoming frames stay in memory until
samoagent frameis called. - Hardened public tunnel surfaces with per-run tokens and safer runtime file permissions.
Agent workflow
samoagent join "<meeting-url>" --ws-video --name Leo --dict postgresfm
samoagent watch
samoagent frame
samoagent chat "..."
samoagent leaveFrame capture
- Uses Recall
video_separate_png.dataover WSS through the normal ngrok HTTP tunnel. - Avoids ngrok TCP, RTMP, and card verification for the preferred frame path.
samoagent framewrites~/.samoagent/frames/latest.pngandlatest.jsononly on demand.samoagent frame --archivecreates timestamped PNG/JSON artifacts with bot, source, and participant metadata.samoagent join --frame-dir DIRmakes the frame output location configurable.
Safety
/webhookis token-protected and size-limited./video-ws,/frame, and/frame.jsonare token-protected.- Tokenized WSS URLs are not printed or stored in state.
- Default runtime state is owner-only:
0700directory,0600file. - Explicit user-selected directories such as
/tmpare not chmodded.
Validation
bun run buildbun test- 167 pass, 0 fail- Legacy Python pytest - 99 passed
- Manual WebSocket/frame smoke passed
- Independent test agent found no blockers
- Independent REV-style review found no findings
v0.1 — Initial release
samoagent v0.1
CLI AI meeting agent. Joins Zoom/Google Meet calls via recall.ai, transcribes live using Deepgram Nova-3 (Russian + English mixed), and provides real-time context to an AI agent session.
Features
- Join Zoom/Google Meet calls via recall.ai as a named bot (
--name TARS) - Live transcription (Russian + English) via Deepgram Nova-3 with custom keyterm dictionaries for domain-specific vocabulary (e.g.
postgresfmfor PostgreSQL terminology) - Real-time transcript streaming via
samoagent watch— designed for AI agent monitoring with the Monitor tool (persistent=true) - Meeting chat messages via
samoagent chat— send messages into the call when needed - Live frame capture via RTMP pipeline: recall.ai streams mixed call video to a cloud VM running mediamtx, then
samoagent framegrabs a live frame via ffmpeg - Auto-download of mediamtx binary on first use — no manual setup required
- Bot avatar served via GitHub Pages (nikolays.github.io/samoagent) — animated robot with pulsing red recording indicator
- State management in
~/.samoagent/— bot_id, PIDs, webhook URL, and transcript path persisted across commands - CLAUDE.md agent workflow documentation — step-by-step instructions baked into the repo for AI agents joining calls
Commands
| Command | Description |
|---|---|
samoagent join <url> |
Join a call and start the webhook server + ngrok tunnel |
samoagent watch |
Stream live transcript to stdout |
samoagent chat <message> |
Send a message into the meeting chat |
samoagent frame |
Capture a live video frame (requires --rtmp-url) |
samoagent screenshot |
Capture the local Mac screen |
samoagent status |
Check bot status |
samoagent transcript |
Read full post-call transcript from recall.ai |
samoagent leave |
Remove bot, kill ngrok/server, clean up state |
samoagent dicts |
List available keyword dictionaries |
Setup
pip install -r requirements.txt
export RECALL_API_KEY=your_key
python3 samoagent join "https://zoom.us/j/123456" --name TARS --dict postgresfmRequires: Python 3.9+, ngrok installed and authenticated, RECALL_API_KEY.