A Discord server run as a programmable lab. Claude holds the controls; the bot executes; behaviour lives in the Registry.
Cognition has well-structured tool definitions with clear naming (verb_noun pattern), comprehensive parameter schemas with types and descriptions, and explicit risk annotations. However, descriptions are inconsistent in depth, some tools (e.g., server_bootstrap, panel_publish) have rich context; others (e.g., settings_get, drift_check) are terse. Output schemas are not documented, and error handling guidance is absent. Tool composition is sound (each tool has one responsibility), but the server lacks pagination support for list operations and does not document return structures for LLM planning.
Compares what the Registry believes exists against what is actually on the server. Anyone with Manage Channels can rename or delete things by hand, and nothing stops them — this is how that shows up rather than surfacing later as a button that fails.
Attach a file from the project to a Discord message. Restricted to files inside the Cognition directory, never dotfiles, never anything containing the token, and capped at 10 MB. Discord shows text and image attachments inline; everything else appears as a download.
Every invite to this guild with who made it, how often it has been used and when it expires. The membership of a server is only as bounded as its invites, and nothing else here reports them.
Rewrite a message Cognition posted. Only messages authored by the bot can be edited.
Post plain text and/or one embed to a channel. For a message with buttons, use panel_publish.
List component rows and the actions they resolve to, so you can see what a published panel will actually do.
Output schemas not documented. Tools like registry_export, panel_components, and invites_list return complex objects, but LLMs cannot plan downstream calls without knowing the response structure (fields, types, nesting).
Terse descriptions on read-only tools. settings_get (40 chars), drift_check (50 chars), and invites_list (60 chars) lack context for when to call them. Descriptions should explain what data they reveal and when the LLM should invoke them.
No error handling guidance. Tools lack recovery hints. E.g., if message_send fails due to invalid channel_id, the LLM should know to call drift_check or invites_list to discover valid IDs. Error responses must guide the agent's next step.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Post a message whose buttons are bound to Registry actions. Each button becomes a component row, and its custom_id carries only that row's key — so what the button does is editable afterwards with registry_put, with no restart and no repost. Up to 5 buttons per row, 5 rows.
Every action, component, trigger and schedule in one document. This is the backup for behaviour: the database file holds it, but nothing else does, and a Registry lost is every system in the server lost. Also the way to move a system to another guild.
Write actions, triggers and schedules back from a registry_export document. Existing keys are overwritten. Component keys are preserved when present, because a live button in a posted panel refers to its key and would otherwise be orphaned.
Create the Command category (#command-log, #active-sessions), the Sandbox category, and the Operator role — whichever of them do not already exist — and wire the Registry settings that point at them. Safe to run repeatedly; the second run reports no changes.
The ids Cognition has been told to use for the log channel, the sessions channel, the sandbox category and the Operator role.
Override one of the wiring ids by hand — useful if a channel was recreated and the stored id is stale.
No pagination support. invites_list and registry_export may return large result sets with no limit, offset, or cursor parameters. Large responses blow context windows and degrade LLM reasoning.
Confirmation pattern missing for destructive operations. registry_import and settings_set modify state irreversibly. A dry_run flag exists on registry_import but not settings_set. Agents should confirm before overwriting critical configuration.