Oneesama is a Slack-controlled meeting bot. It can join Google Meet, talk in the meeting, keep track of speakers, delegate harder work to a local agent, share visual context, and send meeting artifacts back to Slack.
It is not an agent brain by itself. It is the Slack + Meet + realtime runtime shell around the agent/model you choose to run.
- Join meetings from Slack: ask the bot to join a Google Meet URL from a Slack thread, then control the meeting session from the same thread.
- Realtime meeting copilot: enable voice participation so the bot can answer in the meeting, read links, remember the recent speaker, and call tools.
- Delegate real work: route coding, research, debugging, or summarization to Codex, Claude Code, Ollama, an HTTP runner, a command runner, or another local backend.
- Share context into Meet: start a synthetic screen share, video stage, or app-share request. Native app/window sharing may still require Chrome/Meet picker confirmation.
- Produce artifacts: save transcript, chat, audio, summary, manifest, and publish a Slack-thread or Canvas-compatible report after the meeting.
- Build and start the two services.
- Configure Slack if you want live Slack control.
- Optionally configure OpenAI Realtime if you want the bot to speak in Meet.
- Mention the bot in Slack with a Meet URL.
- Use the Slack thread and the meeting conversation to control what it does.
Typical Slack messages:
@Onee-sama join https://meet.google.com/abc-defg-hij
@Onee-sama summarize this thread and join the meeting
@Onee-sama monitor this service log and discuss problems here
Typical meeting requests:
"What did we decide so far?"
"Who was speaking just now?"
"Look up this link and tell us the important part."
"Share Keynote."
Requirements:
- Node.js
>=22 - Go
1.25 - Playwright Chromium
- Slack credentials for live Slack usage
- Optional OpenAI Realtime key for realtime voice
Install and build:
npm ci
npm run setup:browsers
make buildStart services:
./oneesama meeting-agent
./oneesama slack-agentLive restarts should use the checked wrapper so env files are sourced with exports preserved and provider tokens are preflighted before the child process starts:
scripts/oneesama-live.sh slack-agent
scripts/oneesama-live.sh --preflight-only slack-agent
scripts/oneesama-live.sh --check-pid "$PID" slack-agentBy default the wrapper looks for live env files under the persistent repo-external
directory ${XDG_CONFIG_HOME:-$HOME/.config}/oneesama/live-env/, not /tmp.
Use ONEESAMA_LIVE_DEFAULT_ENV_DIR or repeated --env <path> only for an
explicit override.
Minimal live Slack env:
SLACK_BOT_TOKEN=xoxb-...
SLACK_APP_TOKEN=xapp-...
SLACK_SIGNING_SECRET=...
MAB_SLACK_SOCKET_MODE=1Optional realtime voice env:
MAB_OPENAI_API_KEY=...
MAB_OPENAI_REALTIME_MODEL=gpt-realtime-2
MAB_OPENAI_REALTIME_VOICE=marinOptional worker backend:
MAB_AGENT_RUNNER=codex
MAB_CODEX_BIN=codex
MAB_CODEX_MODEL=gpt-5.5Slack command shape:
join <meet-url>
status [session-id]
stop [session-id]
help
Useful local endpoints:
curl http://127.0.0.1:8780/healthz
curl http://127.0.0.1:8781/healthz
curl http://127.0.0.1:8781/realtime/config
curl http://127.0.0.1:8781/realtime/context-health
curl -X POST http://127.0.0.1:8781/screen-share/appsThese checks do not need Slack or OpenAI credentials:
npm run ci
go test ./...
go test -tags cueboardparity ./...
npm run smoke:meet-contract
npm run smoke:screen-share
npm run smoke:local-agent-dialog
npm run smoke:realtime-agents-sdk- Google Meet is the first meeting provider.
- Slack is the first workspace control plane.
- OpenAI Realtime is optional; local dialog and worker-provider paths still run without it.
- Live2D/avatar rendering is optional. The default product value is meeting participation, context, delegation, sharing, and artifacts.
- Private credentials, prompts, workspace memory, recordings, and generated meeting data should not be committed.