A personal AI assistant powered by existing Claude Code and ChatGPT subscriptions. Provides tool management, skill orchestration, computer control, and organizational task delegation through MCP servers.
Rookery Agent provides 24 tools with complete input schemas and descriptions. Naming follows verb_noun convention (screenshot, click, drag, scroll, type_text, press_keys, list_windows, focus_window, open, clipboard, wait, read_profile, search_profile, org_overview, assign, assignment_status, cancel_assignment, list_assignments, send_mail, read_mail, read_mail_thread, notify). Descriptions are present and contextual (avg ~100-150 chars), explaining WHAT and WHEN. However, parameter descriptions are sparse or missing for many tools. For example, 'click' has x/y described but 'button' and 'count' lack detail on valid values (left|right|middle, 1|2). 'scroll' direction param has no enum constraint in schema. 'assign' has rich descriptions but 'wait' boolean lacks guidance on implications. Output schemas are not documented, agents cannot predict response structure. Error handling is minimal; no recovery guidance or categorization. Security: clipboard 'action' param is free-form string (should be enum: get|set). No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (WRITE, READ_ONLY, REVERSIBLE marked in metadata but not in schema). Composition is strong, tools chain well (screenshot → click → screenshot). Idempotency is unclear for stateful tools like assign.
Hand a task to one agent and wait for the finished result. It goes on the board as a task of its own, so the work is visible while it runs and afterwards; handed on from inside a task, it becomes a subtask of that one. The agent works in a separate process with no access to this conversation, so the instruction must be self-contained: restate every fact, file and constraint it needs. Call assign several times in one message to run agents in parallel. Returns the agent's complete report. With wait=false it returns at once and the agent keeps working in the background; check on it with assignment_status. In a chat, name yourself as the agent with wait=false to spin off real work in the background while the conversation keeps going - your report posts back into the same chat once it finishes. Handing work to yourself must use wait=false.
Status, duration and result of one run by id.
Stop a pending or running task. The agent process is killed and the run ends as cancelled; whatever it had written so far is lost. Use it for a stuck or runaway agent, or when the user changes their mind.
Click at a point. Double-click with count 2; right-click with button "right".
Read the clipboard, or put text on it (then press_keys ctrl+v to paste).
Parameter descriptions incomplete or missing. 'click' button/count, 'scroll' direction/amount, 'clipboard' action, 'assign' wait parameter lack detail on valid values, constraints, or implications. LLMs cannot infer enum values from names alone.
No output schemas documented. Agents cannot predict response structure (e.g., what fields does assign() return? Is it a string ID, an object with status/duration, or a full report?). This forces agents to guess and wastes tokens on exploration.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) in schemas despite clear risk levels marked in metadata (READ_ONLY, WRITE, REVERSIBLE). Agents cannot determine which tools are safe to retry or have side effects.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
Press the left button at one point, move to another, release.
Bring a window to the front by a part of its title or its program name.
The history of what ran: for whom, how it ended, how long it took. Newest first. Filter by agent, status or project when the question is about one of them.
Open windows with title, program and position, the active one first.
Move the pointer without clicking, for hover menus and tooltips.
Send the user a message over whatever notification channel is open right now, even when no conversation is running - a phone push, say. For something worth the user's attention that the assistant thinks they should know.
Start a program, open a file or a URL, the way the Start menu or a double-click would: "notepad", "https://example.com", "C:/Users/me/report.docx", "ms-settings:".
The company you run: teams, agents (with slug, title and manager), projects, and the work currently running. Call this before delegating when you are unsure who does what.
Press a shortcut or a sequence of them: "ctrl+l", "alt+tab", "win+r", "enter", or several separated by spaces, "ctrl+a backspace". Names: ctrl, alt, shift, win, enter, tab, esc, backspace, delete, space, arrows, home, end, pageup, pagedown, f1 to f12, letters, digits.
Unread mail addressed to you, by To or Cc. Reading marks it as read.
The full text of one mail conversation, oldest first - only the mails you sent or were To or Cc on. A mail that opens a task names its thread; call this when the answer depends on what was already said, and skip it when the mail stands on its own.
Read saved identity or memory notes. Names: IDENTITY.md, SOUL.md, USER.md, AGENTS.md, TOOLS.md, MEMORY.md or memory/*.md. Use offsets to read beyond context excerpts.
Screen size in screenshot pixels, the scale to real pixels, and the monitors.
A picture of the whole screen as it is right now. Coordinates you pass to the other tools are pixels in this image. Take one before acting and another after, to see what happened.
Scroll the wheel over a point.
Search portable Markdown profile and memory notes imported from Hermes or OpenClaw. Returns file names and excerpt offsets for read_profile. Native learned memories use search_memory.
Send company mail: a subject, a body, To and optionally Cc. Addressing an agent's To starts a real run of that agent with the mail as its task, and its finished result comes back to you automatically as a reply. Cc only delivers to the mailbox - it never starts anything, so loop someone in on Cc when they should just know. Address "user" to write to the user directly, or "assistant" for the assistant. Not for handing out work you need to wait on - use assign for that.
Type text into whatever has focus, as keystrokes, umlauts and all. For more than a few lines use clipboard set and press_keys ctrl+v.
Pause, for a program or page that is still loading.
'clipboard' action parameter is free-form string; should be enum [get, set]. 'scroll' direction is free-form; should be enum [up, down, left, right]. Free-form enums invite hallucinated values and require LLM to parse descriptions for valid options.
Error handling absent. No recovery guidance, categorization (retryable vs fatal), or actionable error messages. If 'assign' fails, agents have no guidance on whether to retry, ask user, or abort.