The social scheduler even your AI can run. An AI agent for managing social media posts across multiple platforms with scheduling, drafting, and image generation capabilities.
Postbase Agent has well-structured tool definitions with clear naming (verb_noun pattern), comprehensive descriptions (avg 180 chars), and complete JSON schemas with type constraints. All 5 tools are explicitly registered in AGENT_TOOLS with input_schema. Descriptions explain WHAT, WHEN, and prerequisites. However, several parameters lack descriptions (e.g., 'body' in propose_post has no description), and output schemas are not documented, LLMs cannot predict response structure. Error handling is minimal; no recovery guidance or categorization. Security is reasonable (no secrets in params), but no permission gates or audit trail patterns visible.
Cancel a scheduled post (reverts it to a draft) by its id.
Generate an image from a text description to attach to a post. Returns a URL. Only use when the user wants visual content. Takes a few seconds.
List the user's connected social accounts (channels). Returns each channel's id, platform, and handle. Call this before proposing a post so you use real channel ids.
List the user's posts, optionally filtered by status (e.g. 'scheduled' or 'draft'). Use to answer questions about what's queued or to find a post to cancel.
Propose a post or thread for the user to review and schedule. This does NOT publish or schedule — it shows the user an editable preview card with a Schedule button. Always use real channel_ids from list_channels. Provide `body` for a single post, or `thread` (array) for a multi-part X thread. Omit `scheduled_at` to propose a draft.
Output schemas not documented. LLMs cannot predict response structure for list_channels, list_scheduled, generate_image, or propose_post. Responses are returned as JSON strings (forModel) or side-effect payloads (proposal, list, image), but the shape of these objects is not declared in tool definitions.
propose_post parameter 'body' lacks description. Schema shows it is a string, but LLMs cannot infer whether it is required, max length, or formatting constraints. Similarly, 'thread', 'channel_ids', 'image_urls', and 'variants' have descriptions, but 'body' does not.
No error handling or recovery guidance. If list_channels fails, generate_image times out, or cancel_post targets a non-existent post, the tool returns no actionable error message. LLMs cannot determine whether to retry, ask the user, or abandon the task.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
No confirmation or dry-run pattern for destructive operations. cancel_post immediately reverts a scheduled post to draft with no confirmation step. Agents can make mistakes, a confirm_before_execute pattern would prevent accidental cancellations.
propose_post description does not clarify mutual exclusivity of 'body' vs 'thread'. LLMs may pass both, causing ambiguous behavior. Schema shows both are optional, but the tool logic likely expects exactly one.