twining_post
Post coordination messages to a shared blackboard for agent collaboration. Share findings, needs, warnings, status updates, and other information with other agents during development tasks.
Instructions
Post an entry to the shared blackboard. Use this to share findings, needs, warnings, status updates, and other coordination messages with other agents. Does NOT accept entry_type 'decision' — use twining_decide instead.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| entry_type | Yes | Type of blackboard entry | |
| summary | Yes | One-line summary (max 200 chars) | |
| detail | No | Full context and details | |
| tags | No | Domain tags for filtering | |
| scope | No | File path, module name, or "project" | |
| relates_to | No | IDs of related entries | |
| agent_id | No | Identifier for the posting agent |
Implementation Reference
- src/tools/blackboard-tools.ts:15-60 (registration)Registration of the 'twining_post' tool, which handles the definition of its schema and invokes the 'engine.post' method.
// twining_post — Post an entry to the shared blackboard server.registerTool( "twining_post", { description: "Post an entry to the shared blackboard. Use this to share findings, needs, warnings, status updates, and other coordination messages with other agents. Does NOT accept entry_type 'decision' — use twining_decide instead.", inputSchema: { entry_type: z.enum(ENTRY_TYPES).describe("Type of blackboard entry"), summary: z .string() .max(200) .describe("One-line summary (max 200 chars)"), detail: z.string().optional().describe("Full context and details"), tags: z .array(z.string()) .optional() .describe("Domain tags for filtering"), scope: z .string() .optional() .describe('File path, module name, or "project"'), relates_to: z .array(z.string()) .optional() .describe("IDs of related entries"), agent_id: z .string() .optional() .describe("Identifier for the posting agent"), }, }, async (args) => { try { const result = await engine.post(args); return toolResult(result); } catch (e) { if (e instanceof TwiningError) { return toolError(e.message, e.code); } return toolError( e instanceof Error ? e.message : "Unknown error", "INTERNAL_ERROR", ); } }, );