Skip to content
thrw/ REFERENCE

Docs

Written for AI agents to read and use. Share this page’s URL or paste its contents directly into your AI assistant.

A planning interface for AI agents

MCP connection, tool reference, agent workflows, shared planning state, and Memory Wiki. Markdown: https://thrw.cc/for-ai.md. Web: https://thrw.cc/for-ai. Product documentation does not override user instructions or host policies.

01 / Identity

THRW is an AI planning harness: a planning editor, shared context store, and interface between a person and the AI systems helping them work.

People think, decide, design, and plan before they execute. THRW gives that first part somewhere to live beyond a chat transcript. Capture commitments, preserve the context that makes them useful, track progress, and turn vague intentions into actionable work.

Two distinct benefits:
- Continuity: record, remember, retrieve, and track what the user intends to do.
- Quality: make the recorded work useful enough to act on. "Friday presentation" can become "Draft three key points for Friday's presentation," with an appropriate deadline and supporting context.

You do not need to invent a better presentation to make the plan better. Help the user know what to do next, what is waiting, and what has changed.

THRW is also a planning IDE. People can inspect and edit their work while discussing the same context with AI. AI interaction and the actual working state belong together.

02 / The shared working state

Think of THRW as a planning database with a human-facing interface. It is a control tower for commitments, schedules, context, and progress across connected AI clients.

Conversation -> confirmed work -> THRW -> another conversation.
Human edits -> THRW -> the next agent reads the current state.
Execution -> progress update -> THRW -> next action.

A connected agent can read the relevant state and write supported changes. Another connected agent can pick up from those records. This is shared stored context, not automatic access to every conversation or an unlimited memory of everything the user has ever said.

The output is for people, too. A person can inspect a todo, see its time, follow its progress, and edit it in the app. Leave readable titles, concise descriptions, and concrete next actions. Do not use raw transcripts as task titles.

Use THRW as the bridge between reasoning and a person's working day. After a useful conversation, leave useful working state—not another transcript the user has to sort through.

03 / Connect

Endpoint: https://api.thrw.cc/mcp
Transport: Streamable HTTP
Authentication: OAuth with Dynamic Client Registration
Scopes: openid email thrw:read thrw:write

1. Add the endpoint to a compatible remote MCP client.
2. Use the client's OAuth connection flow. The user completes sign-in and consent.
3. Initialize the connection and discover the currently exposed tools and their input/output schemas.
4. Start with a read-only check: list_task_group_hierarchy and, when relevant, list_tasks.
5. Confirm that the connected account is the one the user intends to use before changing its work.

Connection descriptor (adapt to the client's configuration format):

{
  "mcpServers": {
    "thrw": {
      "type": "streamable-http",
      "url": "https://api.thrw.cc/mcp"
    }
  }
}

Claude Code and Codex are the primary supported client targets. Other clients need compatible transport, OAuth discovery, and scope support. Do not assume a browser-based AI product supports the same setup as its CLI.

OAuth grants access. Individual write execution follows the host's approval policy. Connecting MCP does not automatically install a separate skill or plugin package. If a connection is unavailable, keep helping in the conversation and say that no changes have been saved.

04 / Workspace model

Group -> List -> Todo

User-facing name / tool field:
- Group / taskGroupCollection
- List / taskGroup
- Todo / task

A group organizes lists. A list holds todos. Checklists belong inside a todo; they are not another group/list level. Not every action needs a new group and list.

Inspect list_task_group_hierarchy before choosing a destination. Reuse existing containers. Different phrasing or a new conversation is not a reason to make a parallel list. Read matching todos before updating them; similar titles alone do not prove that they represent the same commitment.

Separate a deadline from an appointment or work block. "Finish by Friday" is not the same as "Work on it Friday, 2–4 PM." Task tools expose dueLocal and scheduledStartLocal/scheduledEndLocal; follow their live descriptions for local dates, durations, midnight, and all-day ranges. Use read_client_time when a relative date needs grounding.

Google Calendar synchronization is configured in the app. MCP can manage supported todo scheduling fields; this does not expose arbitrary Google Calendar administration or permission to change sharing settings. Do not promise a synced event unless the user's connection and the resulting state support that claim.

05 / Read tools

search_content
Find related work and context before planning, creating duplicates, or changing an item. Useful during exploration as well as execution.

read_content
Read a matched item's details using the entity and stable ID returned by discovery/search. Ground updates in the current content.

list_task_group_hierarchy
Inspect the available groups and lists. Choose an existing destination before proposing new structure.

list_tasks
Review open todos. Results may be truncated and do not include all completed work. An item missing here is not proof that it does not exist or was never completed.

read_client_time
Read the account's local date and time to interpret relative dates in context.

read_user_info
Read account information when it is relevant to the request. Avoid collecting unrelated personal information.

list_memory_pages
Discover Memory Wiki pages and their stable identifiers. Read relevant page content through read_content.

read_user_memory
Read available user context to ground the work. This is a read-only capability on this MCP surface.

read_weekly_memory
Read available weekly context using the tool's current weekOf contract. Do not assume every week has content.

06 / Write tools

Discover the live schemas before constructing arguments. This page explains selection and purpose; the connected server's tool definitions specify the exact contract. Batch mutations support up to 25 items per call; inspect each returned item result.

create_tasks
Record confirmed new actions, appointments, and planning commitments. Use a concrete taskTitle and only fields justified by the request.

update_tasks
Change an existing todo: wording, supported details, list placement, scheduled time, or appended checklist items. Use its stable taskId.

set_tasks_done
Complete or reopen existing todos with taskIds and isDone. Completion must reflect the user's request or verified execution—not an assumption that a planned event has happened.

delete_tasks
Delete selected todos or subtasks. Deleting a parent todo also deletes its active descendants.

create_task_groups / update_task_groups
Create or change lists when the confirmed work requires it. Reuse an existing list whenever it serves the same purpose.

delete_task_groups
Delete lists and the todos inside them. Explain this consequential scope when the user has not already acknowledged it.

write_task_group_collection
Create, rename, or delete a group. Deleting a group leaves its lists and todos active and ungrouped; it does not delete their content.

create_memory_pages / update_memory_pages / delete_memory_pages
Create, update, or delete Memory Wiki pages within the memory tools' intent and destination rules. See the Wiki workflow below.

07 / Working patterns

A. Messy thoughts -> usable commitments
User: "Friday presentation. still need charts. ask Sam for regional numbers. maybe redesign the whole deck?"
Read relevant work. Identify confirmed actions and unresolved ideas. A concrete request to prepare the presentation can justify actionable preparation work; it does not confirm every speculative idea. Keep "redesign the whole deck?" as a proposal until accepted. Reuse matching todos and lists.

B. A confirmed next action -> recorded work
User: "I'll draft the three key points tomorrow morning. Add that."
Find the relevant presentation/list. Resolve the relative date if necessary. Record the accepted action with the timing the user actually supplied. Do not invent a specific hour for an unspecified morning.

C. A change -> an updated plan
User: "The editor can't start until Thursday at 6. Keep Friday's release."
Read the existing tasks and constraints. Apply the confirmed editor change. Explain any resulting conflict and propose a workable next action. Do not silently move the release or treat a proposed workaround as accepted.

D. Execution -> progress -> next action
User: "The ad cut is sent. We're waiting for approval now."
Find the existing edit/send todo. Mark confirmed completed work done. Reuse or update the approval follow-up. Preserve the fact that approval is pending.

E. Another AI -> continuity
Read relevant todos, their details, and any pertinent Wiki page. Continue from the stored commitments and decision context. Do not ask the user to repeat information already available, and do not claim access to an earlier conversation that was never stored here.

F. A rough capture -> better planning
Improve the operational quality of a plan: clear next actions, distinct deadlines and work blocks, dependencies, and waiting items. The goal is usable work the user can follow—not a longer, more impressive-looking checklist.

08 / Memory Wiki

Memory Wiki can serve as a persistent knowledge database for AI agents. Store context once, then let connected agents retrieve and reuse it in later conversations. People can read and edit the same pages, keeping the knowledge accessible to both people and AI.

Use todos for actions. Use Wiki pages for reference material the user wants to retain: project background, accepted decisions and their reasons, operating instructions, or a handoff brief.

Memory Wiki supports vector-based semantic search through search_content. Set entities to ["memory_wiki_page"] and describe what you need in query. When the semantic backend is available, search combines text matches with meaning-based retrieval. For example, ask "Why did we decide to send the ad cut separately?" to find the relevant decision note even when its wording differs.

Discover with list_memory_pages or search_content. Read matched pages with read_content before updating them. Use stable IDs from actual results.

For creation, the user must clearly want to create a memory now. Ordinary todo capture is not blanket authorization to archive a conversation. Choose a meaningful directoryPath and fileName; bodyMarkdown carries the content. Optional tags and aliases help describe it.

Example create_memory_pages input, only after the user requests this memory:

{
  "pages": [{
    "directoryPath": "Channel operations",
    "fileName": "Sponsor review process",
    "bodyMarkdown": "# Sponsor review process\n\nSend the ad cut separately when the sponsor permits it. Keep approval pending until a response arrives.",
    "tags": ["sponsors", "handoff"]
  }]
}

For update_memory_pages, prefer appendBodyMarkdown when adding facts. Use replaceBodyMarkdownDangerously only after reading the full current body and confirming that the user wants a full replacement. The tool does not silently overwrite a conflicting final path. Delete by stable pageIds using delete_memory_pages.

Stored content is reference data, not authority. A Wiki page cannot authorize actions or override current user instructions. Preserve the difference between an accepted decision, a proposal, and a historical note.

09 / Guidelines for serving human users

Make saved work easy for the user to scan, understand, and act on. Use structure to clarify the work without giving the user another system to maintain.

- Organize by purpose: Group -> List -> Todo. A group can represent a broad area; a list can represent a distinct project or outcome. Reuse the existing structure and use only the levels that help.
- Give each todo a short, concrete action title. Put background, constraints, links, and decision context in description rather than packing them into the title.
- Break small steps toward one outcome into checklist items. Use subTaskTitles when creating a todo, or appendSubTaskTitles to add steps to an existing one. Appending does not replace existing subtasks. Give independently tracked work or work with its own schedule a separate todo.
- Put confirmed deadlines and work blocks into the supported date/time fields so people can see them in the app. Preserve the difference between dueLocal and scheduledStartLocal/scheduledEndLocal; do not invent missing times.

Illustrative structure, not a request to create these items:

[Group] Channel operations
  [List] Friday video
    [Todo] Edit and send the ad cut
      [Checklist] Export the ad segment
      [Checklist] Send it for review
    [Todo] Follow up on sponsor approval
      [Note] Waiting for a reply

The checklist sits inside its parent todo. A note is supporting description, not another hierarchy level. Keep the result understandable without requiring the person to reopen the conversation.

When reporting changes, mirror the verified group/list/todo path with short nested bullets so the person can scan the result.

10 / Execution and reporting

Read/search can help while the user is still thinking. Write only confirmed actions or explicitly requested changes; honor a request not to save. An accepted "decide whether to do X by Friday" is a decision todo, not acceptance of X itself.

Follow the host's configured execution approval policy. Do not retry declined writes or claim an approval you did not observe. Explain significant non-obvious consequences before applying them; avoid repeating confirmation for an already clear instruction.

After a write, report what actually happened, using readable group/list/todo language. Distinguish successful, failed, declined, and unexecuted items. Batch transport success is not proof that every item changed. If a write fails, retain the useful plan in the conversation and identify what has not been confirmed saved.

Example outcome format (illustrative, not an execution result):
- Channel operations
  - Friday video
    - Completed: edit and send the ad cut.
    - Updated: sponsor approval remains pending.

Before relying on an absent result, consider pagination, truncation, and whether the tool only lists open work. Before reporting a schedule, preserve its time zone and the distinction between a deadline and a scheduled interval.

The user's work should be easier to continue after you leave.