v0.24.0
Minor Changes
-
8a589a6: Add read-side primitives for bi-directional agent-to-agent communication over Discord.
get_message— fetch a single message by ID with reply linkage (reply_to), pin state, edit timestamp, thread info (has_thread/thread_id), and the author's bot flag, so an agent can re-check a message it posted earlier.get_reactions— read who reacted to a message and with what emoji (with per-user bot flags), so an agent can detect acks, claims, and blocks left by humans or peer agents. Supports an emoji filter and a per-emoji user limit.get_replies— collect direct replies to a message by scanning messages posted after it, withscanned/last_scanned_idpagination fields and anafterresume cursor.get_messagesnow includesreply_toon every returned message so reply chains are visible in bulk reads.send_messagenow returnsmessage_id(alongside the existingid) so agents can capture it and poll for responses later.- The new read tools are included in the
monitoring,readonly, andmessagingtool profiles.
-
ad0831a: Coordination platform expansion: four new tool suites (15 tools, 67 total).
- Personas — one bot, unlimited posting identities via per-message webhook
overrides:create_persona,send_as,list_personas. No new bot
applications, no developer-portal work; webhook tokens never appear in
results. - Polls — native Discord polls as structured consensus:
send_poll,
get_poll_results(per-answer voter lists with bot flags and pagination),
end_poll(idempotent, destructive-flagged). - Workflow —
forward_message(immutable cross-channel snapshots for
escalation) and forum channels as agent work queues:create_forum_post,
list_forum_posts,update_forum_post(tags by name as status labels,
archive to close). - Botops — bot self-management without the developer portal:
set_bot_nick,update_application(description, SSRF-guarded icon
upload, tags, install params), and application emoji CRUD returning
add_reaction-ready identifiers. - Profiles:
monitoringgainssend_as/send_poll/get_poll_results;
readonlygains the new read tools;messaginggains
send_as/forward_message.
- Personas — one bot, unlimited posting identities via per-message webhook
-
e943136: Real-time event sidecar and security hardening for the coordination suites.
- Gateway sidecar —
discord-ops listenopens a gateway connection per bot
token and streamsmessage_create/reaction_addevents to a local JSONL
sink; the newget_eventstool reads that sink with alast_seqcursor
(mirroringget_replies) and zero Discord API calls per poll, reporting
sink_activeso agents fall back toget_messageswhen the sidecar is down.
The sink is created0600(dir0700), refuses symlinked or traversal
paths, and writes oneJSON.stringifyobject per line. - Botops —
interactions_endpoint_urlis removed fromupdate_application
(a control-plane field an agent must never be able to redirect); the tool now
documents that its edits are application-global. - Personas — reserved authority names (
system,admin,moderator,
owner, …) are blocked, with zero-width/obfuscation normalization, to blunt
impersonation. - Sanitizer — the webhook-URL redaction now covers
discordapp.com,
canary/ptb subdomains, and version-prefixed API paths, and returned (not just
thrown) error results are sanitized before they reach the audit log.
- Gateway sidecar —
-
a74fd13: Project note board — directed, durable note-passing across concurrent sessions.
leave_noteposts a directed note to a project's shared board channel,
addressed to a session id, a role/name, orall, with tags for filtering.get_notesreads the board with recipient/sender/tag/unresolved filters
and anaftercursor — the first call an agent makes on startup to pick up
hand-offs and see what other sessions have done.resolve_notemarks a note handled (✅) with an optional reply, so open
hand-offs drop off the unresolved list.list_sessionsreports which sessions are active on a project (derived
from note activity), so concurrent sessions on the same codebase can
coordinate instead of colliding.- New
board_channelproject config field selects the board, with a fallback
chain (board/agent-boardalias →agent-logs→backchannel→
default_channel). Session identity comes fromDISCORD_OPS_SESSIONor an
auto-derived id. The note tools are included in themonitoringprofile. - New
docs/project-onboarding.mdwalks a project through adopting the full
system.
Patch Changes
-
5f4cdcc: Fix validateConfig() treating missing token_env as fatal error in multi-org setups
When a global ~/.discord-ops.json contains projects from multiple organizations, the server
previously failed to start if any project had a missing token_env — even if that project
belonged to a completely different org irrelevant to the current context.loadConfig()now warns about unavailable projects and starts successfully as long as at
least one project has a valid token. Only if all projects lack tokens does startup fail.validateConfig()likewise downgrades per-project missing token_env from errors to warnings,
since the server can still serve other projects.