dashboard
ChatGPTReturns today's full planner snapshot: stats summary, events, overdue items, high-priority items, items due today, and feature overview. Use this when the user asks: - "What's on today?" / "Show my dashboard" / "What should I focus on?" - "Do I have anything overdue?" / "What's urgent?" - "What can I do here?" / "Show me an overview" - At the start of a planning session For filtered queries (specific items, events, people by criteria) use query_graph instead. After calling this tool: 1. Show the summary stats (total items, groups, people, today's events, today's tasks). 2. Display dashboard sections — skip any section with no items. 3. Show the "What you can do" section. 4. Show nextActions under "## What would you like to do next?". Actions with a prompt: numbered list, tell user to reply with the number. Actions with a url: render as a markdown link [label](url) after the numbered list, not as a numbered item.
dashboard
ChatGPTReturns today's full planner snapshot: stats summary, events, overdue items, high-priority items, items due today, and feature overview. Use this when the user asks: - "What's on today?" / "Show my dashboard" / "What should I focus on?" - "Do I have anything overdue?" / "What's urgent?" - "What can I do here?" / "Show me an overview" - At the start of a planning session For filtered queries (specific items, events, people by criteria) use query_graph instead. After calling this tool: 1. Show the summary stats (total items, groups, people, today's events, today's tasks). 2. Display dashboard sections — skip any section with no items. 3. Show the "What you can do" section. 4. Show nextActions under "## What would you like to do next?". Actions with a prompt: numbered list, tell user to reply with the number. Actions with a url: render as a markdown link [label](url) after the numbered list, not as a numbered item.
dashboard
ChatGPTReturns today's full planner snapshot: stats summary, events, overdue items, high-priority items, items due today, and feature overview. Use this when the user asks: - "What's on today?" / "Show my dashboard" / "What should I focus on?" - "Do I have anything overdue?" / "What's urgent?" - "What can I do here?" / "Show me an overview" - At the start of a planning session For filtered queries (specific items, events, people by criteria) use query_graph instead. After calling this tool: 1. Show the summary stats (total items, groups, people, today's events, today's tasks). 2. Display dashboard sections — skip any section with no items. 3. Show the "What you can do" section. 4. Show nextActions under "## What would you like to do next?". Actions with a prompt: numbered list, tell user to reply with the number. Actions with a url: render as a markdown link [label](url) after the numbered list, not as a numbered item.
get_started
ChatGPTCall this at the start of every conversation to greet the user with a personalised snapshot: their name, today's events, pending list items, and adaptive starter prompts. Also call this when the user asks what Shchebitka AI Planner can do. Always call this first before doing anything else. After calling this tool, the assistant MUST: 1. Display the greeting. 2. Show nextActions as a numbered list under "## What would you like to do next?" 3. Tell the user they can reply with the number, for example 1.
get_started
ChatGPTCall this at the start of every conversation to greet the user with a personalised snapshot: their name, today's events, pending list items, and adaptive starter prompts. Also call this when the user asks what Shchebitka AI Planner can do. Always call this first before doing anything else. After calling this tool, the assistant MUST: 1. Display the greeting. 2. Show nextActions as a numbered list under "## What would you like to do next?" 3. Tell the user they can reply with the number, for example 1.
get_started
ChatGPTCall this at the start of every conversation to greet the user with a personalised snapshot: their name, today's events, pending list items, and adaptive starter prompts. Also call this when the user asks what Shchebitka AI Planner can do. Always call this first before doing anything else. After calling this tool, the assistant MUST: 1. Display the greeting. 2. Show nextActions as a numbered list under "## What would you like to do next?" 3. Tell the user they can reply with the number, for example 1.
mutate
ChatGPTCreate, update, or delete nodes in the planner graph. Each entity has an operation field: create (default) | update | delete. For update and delete: nodeId is required — get it from query_graph or search. All property fields are set directly on the entity object (no nested "properties" wrapper). LABELS and their fields ( = required for create): Group → name, baseKind (project|area|section|list|folder|goal|sprint|custom), description, status (pending|in_progress|completed), priority (low|medium|high), startAt (ISO datetime), dueAt (ISO datetime), reviewAt (ISO datetime), color, icon, pinned (bool), defaultFilter Item → title, baseKind (task|note|checklist_item|link|custom), body, status (pending|in_progress|completed), priority (low|medium|high), startAt (ISO datetime), dueAt (ISO datetime), pinned (bool) Event → title, startAt (ISO datetime), endAt (ISO datetime), allDay (bool), notes, recurrenceRule (RFC5545) Person → name, birthday (ISO date, e.g. "1990-03-15"), notes, showInCalendar (bool), dates (JSON string: "[{"label":"Anniversary","date":"2020-06-01"}]") Location → name, latitude (number), longitude (number) RULES: - Resolve all dates to ISO datetime — never pass "Friday" literally - Group and Person/Location are MERGE'd (deduplicated by name) on create - Item and Event are always CREATE'd as new nodes - Do not include a User or Workspace entity — they are injected automatically - Default group is Inbox: if the user says "add task X" with no group specified, create the Item with no relationship — it lands in Inbox automatically - Auto-create missing groups*: if the user says "add task X to project Y" and project Y does not exist, create both in the same call using a HAS_ITEM relationship ALLOWED RELATIONSHIPS: HAS_GROUP Group → Group (sub-group — section inside a project, etc.) HAS_ITEM Group → Item (Item created directly inside that Group) AT_LOCATION Group|Item|Event → Location ATTENDS Person → Event ASSIGNED_TO Item|Group → Person (single responsible owner) INVOLVES Item|Group → Person (participant / stakeholder, can be multiple) DEPENDS_ON Item → Item (blocking dependency) EXAMPLES: "Create project 'Q3 Planning' with tasks 'Define OKRs' and 'Set milestones'" entities: [ { id: "g1", label: "Group", name: "Q3 Planning", baseKind: "project" }, { id: "i1", label: "Item", title: "Define OKRs", baseKind: "task" }, { id: "i2", label: "Item", title: "Set milestones", baseKind: "task" } ] relationships: [ { sourceId: "g1", targetId: "i1", type: "HAS_ITEM" }, { sourceId: "g1", targetId: "i2", type: "HAS_ITEM" } ] "Add task 'Buy milk'" (no group specified — goes to Inbox automatically) entities: [{ id: "i1", label: "Item", title: "Buy milk", baseKind: "task" }] relationships: [] "Add task 'Define OKRs' to my Q3 Planning project" (group may not exist — create it in the same call) entities: [ { id: "g1", label: "Group", name: "Q3 Planning", baseKind: "project" }, { id: "i1", label: "Item", title: "Define OKRs", baseKind: "task" } ] relationships: [{ sourceId: "g1", targetId: "i1", type: "HAS_ITEM" }] "Mark 'Define OKRs' as done" (requires nodeId from prior search) entities: [{ id: "i1", nodeId: "<id>", label: "Item", operation: "update", status: "completed" }] After calling this tool: 1. Confirm in one sentence what changed (list items by name). 2. Show nextActions under "## What would you like to do next?". Actions with a prompt: numbered list, tell user to reply with the number. Actions with a url: render as a markdown link [label](url) after the numbered list, not as a numbered item.
mutate
ChatGPTCreate, update, or delete nodes in the planner graph. Each entity has an operation field: create (default) | update | delete. For update and delete: nodeId is required — get it from query_graph or search. All property fields are set directly on the entity object (no nested "properties" wrapper). LABELS and their fields ( = required for create): Group → name, baseKind (project|area|section|list|folder|goal|sprint|custom), description, status (pending|in_progress|completed), priority (low|medium|high), startAt (ISO datetime), dueAt (ISO datetime), reviewAt (ISO datetime), color, icon, pinned (bool), defaultFilter Item → title, baseKind (task|note|checklist_item|link|custom), body, status (pending|in_progress|completed), priority (low|medium|high), startAt (ISO datetime), dueAt (ISO datetime), pinned (bool) Event → title, startAt (ISO datetime), endAt (ISO datetime), allDay (bool), notes, recurrenceRule (RFC5545) Person → name, birthday (ISO date, e.g. "1990-03-15"), notes, showInCalendar (bool), dates (JSON string: "[{"label":"Anniversary","date":"2020-06-01"}]") Location → name, latitude (number), longitude (number) RULES: - Resolve all dates to ISO datetime — never pass "Friday" literally - Group and Person/Location are MERGE'd (deduplicated by name) on create - Item and Event are always CREATE'd as new nodes - Do not include a User or Workspace entity — they are injected automatically - Default group is Inbox: if the user says "add task X" with no group specified, create the Item with no relationship — it lands in Inbox automatically - Auto-create missing groups*: if the user says "add task X to project Y" and project Y does not exist, create both in the same call using a HAS_ITEM relationship ALLOWED RELATIONSHIPS: HAS_GROUP Group → Group (sub-group — section inside a project, etc.) HAS_ITEM Group → Item (Item created directly inside that Group) AT_LOCATION Group|Item|Event → Location ATTENDS Person → Event ASSIGNED_TO Item|Group → Person (single responsible owner) INVOLVES Item|Group → Person (participant / stakeholder, can be multiple) DEPENDS_ON Item → Item (blocking dependency) EXAMPLES: "Create project 'Q3 Planning' with tasks 'Define OKRs' and 'Set milestones'" entities: [ { id: "g1", label: "Group", name: "Q3 Planning", baseKind: "project" }, { id: "i1", label: "Item", title: "Define OKRs", baseKind: "task" }, { id: "i2", label: "Item", title: "Set milestones", baseKind: "task" } ] relationships: [ { sourceId: "g1", targetId: "i1", type: "HAS_ITEM" }, { sourceId: "g1", targetId: "i2", type: "HAS_ITEM" } ] "Add task 'Buy milk'" (no group specified — goes to Inbox automatically) entities: [{ id: "i1", label: "Item", title: "Buy milk", baseKind: "task" }] relationships: [] "Add task 'Define OKRs' to my Q3 Planning project" (group may not exist — create it in the same call) entities: [ { id: "g1", label: "Group", name: "Q3 Planning", baseKind: "project" }, { id: "i1", label: "Item", title: "Define OKRs", baseKind: "task" } ] relationships: [{ sourceId: "g1", targetId: "i1", type: "HAS_ITEM" }] "Mark 'Define OKRs' as done" (requires nodeId from prior search) entities: [{ id: "i1", nodeId: "<id>", label: "Item", operation: "update", status: "completed" }] After calling this tool: 1. Confirm in one sentence what changed (list items by name). 2. Show nextActions under "## What would you like to do next?". Actions with a prompt: numbered list, tell user to reply with the number. Actions with a url: render as a markdown link [label](url) after the numbered list, not as a numbered item.
mutate
ChatGPTCreate, update, or delete nodes in the planner graph. Each entity has an operation field: create (default) | update | delete. For update and delete: nodeId is required — get it from query_graph or search. All property fields are set directly on the entity object (no nested "properties" wrapper). LABELS and their fields ( = required for create): Group → name, baseKind (project|area|section|list|folder|goal|sprint|custom), description, status (pending|in_progress|completed), priority (low|medium|high), startAt (ISO datetime), dueAt (ISO datetime), reviewAt (ISO datetime), color, icon, pinned (bool), defaultFilter Item → title, baseKind (task|note|checklist_item|link|custom), body, status (pending|in_progress|completed), priority (low|medium|high), startAt (ISO datetime), dueAt (ISO datetime), pinned (bool) Event → title, startAt (ISO datetime), endAt (ISO datetime), allDay (bool), notes, recurrenceRule (RFC5545) Person → name, birthday (ISO date, e.g. "1990-03-15"), notes, showInCalendar (bool), dates (JSON string: "[{"label":"Anniversary","date":"2020-06-01"}]") Location → name, latitude (number), longitude (number) RULES: - Resolve all dates to ISO datetime — never pass "Friday" literally - Group and Person/Location are MERGE'd (deduplicated by name) on create - Item and Event are always CREATE'd as new nodes - Do not include a User or Workspace entity — they are injected automatically - Default group is Inbox: if the user says "add task X" with no group specified, create the Item with no relationship — it lands in Inbox automatically - Auto-create missing groups*: if the user says "add task X to project Y" and project Y does not exist, create both in the same call using a HAS_ITEM relationship ALLOWED RELATIONSHIPS: HAS_GROUP Group → Group (sub-group — section inside a project, etc.) HAS_ITEM Group → Item (Item created directly inside that Group) AT_LOCATION Group|Item|Event → Location ATTENDS Person → Event ASSIGNED_TO Item|Group → Person (single responsible owner) INVOLVES Item|Group → Person (participant / stakeholder, can be multiple) DEPENDS_ON Item → Item (blocking dependency) EXAMPLES: "Create project 'Q3 Planning' with tasks 'Define OKRs' and 'Set milestones'" entities: [ { id: "g1", label: "Group", name: "Q3 Planning", baseKind: "project" }, { id: "i1", label: "Item", title: "Define OKRs", baseKind: "task" }, { id: "i2", label: "Item", title: "Set milestones", baseKind: "task" } ] relationships: [ { sourceId: "g1", targetId: "i1", type: "HAS_ITEM" }, { sourceId: "g1", targetId: "i2", type: "HAS_ITEM" } ] "Add task 'Buy milk'" (no group specified — goes to Inbox automatically) entities: [{ id: "i1", label: "Item", title: "Buy milk", baseKind: "task" }] relationships: [] "Add task 'Define OKRs' to my Q3 Planning project" (group may not exist — create it in the same call) entities: [ { id: "g1", label: "Group", name: "Q3 Planning", baseKind: "project" }, { id: "i1", label: "Item", title: "Define OKRs", baseKind: "task" } ] relationships: [{ sourceId: "g1", targetId: "i1", type: "HAS_ITEM" }] "Mark 'Define OKRs' as done" (requires nodeId from prior search) entities: [{ id: "i1", nodeId: "<id>", label: "Item", operation: "update", status: "completed" }] After calling this tool: 1. Confirm in one sentence what changed (list items by name). 2. Show nextActions under "## What would you like to do next?". Actions with a prompt: numbered list, tell user to reply with the number. Actions with a url: render as a markdown link [label](url) after the numbered list, not as a numbered item.
query_graph
ChatGPTQuery entities from your planner graph using a structured DSL. The backend translates the DSL to Cypher — never write Cypher or free-form JSON. ENTITY TYPES: Group — containers (projects, areas, lists, folders, goals, sprints) Item — work items inside groups (tasks, notes, checklist items, links) Event — calendar events with start/end time Person — contacts with birthday and notes FILTERS (entity-specific): status → Item/Group: pending | in_progress | completed priority → Item: high | medium | low groupName → Item: filter by parent group name (partial match) groupBaseKind → Item: filter by parent group kind (inbox | project | list | area | ...) location → Item / Event: filter by location name overdue → Item: true = only items where dueAt < now and not completed TIME RANGE (applied to dueAt for Item, startAt for Event): today | yesterday | this_week | this_month | future RELATIONSHIPS (graph traversal filters): ASSIGNED_TO Item → Person (items with a specific assigned owner) INVOLVES Item → Person (items involving a specific person as participant) ATTENDS Person → Event (events a person attends) DEPENDS_ON Item → Item (items blocked by a specific item) SORT: date | priority | name LIMIT: 1–100 (default 50) EXAMPLES: My inbox items: { entity: "Item", filters: { groupBaseKind: "inbox" } } Overdue items: { entity: "Item", filters: { overdue: true } } High-priority items: { entity: "Item", filters: { priority: "high", status: "pending" } } Items in Q3 project: { entity: "Item", filters: { groupName: "Q3" } } Items due this week: { entity: "Item", timeRange: "this_week" } Items involving Maria: { entity: "Item", relationships: [{ type: "INVOLVES", targetLabel: "Person", targetName: "Maria" }] } Items assigned to Maria: { entity: "Item", relationships: [{ type: "ASSIGNED_TO", targetLabel: "Person", targetName: "Maria" }] } Next 10 events: { entity: "Event", timeRange: "future", limit: 10 } Events Sarah attends: { entity: "Event", relationships: [{ type: "ATTENDS", targetLabel: "Person", targetName: "Sarah" }] } All projects/groups: { entity: "Group" } All contacts: { entity: "Person" } After calling this tool: 1. Display results in a user-friendly format (not raw JSON). 2. Show nextActions under "## What would you like to do next?". Actions with a prompt: numbered list, tell user to reply with the number. Actions with a url: render as a markdown link [label](url) after the numbered list, not as a numbered item.
query_graph
ChatGPTQuery entities from your planner graph using a structured DSL. The backend translates the DSL to Cypher — never write Cypher or free-form JSON. ENTITY TYPES: Group — containers (projects, areas, lists, folders, goals, sprints) Item — work items inside groups (tasks, notes, checklist items, links) Event — calendar events with start/end time Person — contacts with birthday and notes FILTERS (entity-specific): status → Item/Group: pending | in_progress | completed priority → Item: high | medium | low groupName → Item: filter by parent group name (partial match) groupBaseKind → Item: filter by parent group kind (inbox | project | list | area | ...) location → Item / Event: filter by location name overdue → Item: true = only items where dueAt < now and not completed TIME RANGE (applied to dueAt for Item, startAt for Event): today | yesterday | this_week | this_month | future RELATIONSHIPS (graph traversal filters): ASSIGNED_TO Item → Person (items with a specific assigned owner) INVOLVES Item → Person (items involving a specific person as participant) ATTENDS Person → Event (events a person attends) DEPENDS_ON Item → Item (items blocked by a specific item) SORT: date | priority | name LIMIT: 1–100 (default 50) EXAMPLES: My inbox items: { entity: "Item", filters: { groupBaseKind: "inbox" } } Overdue items: { entity: "Item", filters: { overdue: true } } High-priority items: { entity: "Item", filters: { priority: "high", status: "pending" } } Items in Q3 project: { entity: "Item", filters: { groupName: "Q3" } } Items due this week: { entity: "Item", timeRange: "this_week" } Items involving Maria: { entity: "Item", relationships: [{ type: "INVOLVES", targetLabel: "Person", targetName: "Maria" }] } Items assigned to Maria: { entity: "Item", relationships: [{ type: "ASSIGNED_TO", targetLabel: "Person", targetName: "Maria" }] } Next 10 events: { entity: "Event", timeRange: "future", limit: 10 } Events Sarah attends: { entity: "Event", relationships: [{ type: "ATTENDS", targetLabel: "Person", targetName: "Sarah" }] } All projects/groups: { entity: "Group" } All contacts: { entity: "Person" } After calling this tool: 1. Display results in a user-friendly format (not raw JSON). 2. Show nextActions under "## What would you like to do next?". Actions with a prompt: numbered list, tell user to reply with the number. Actions with a url: render as a markdown link [label](url) after the numbered list, not as a numbered item.
query_graph
ChatGPTQuery entities from your planner graph using a structured DSL. The backend translates the DSL to Cypher — never write Cypher or free-form JSON. ENTITY TYPES: Group — containers (projects, areas, lists, folders, goals, sprints) Item — work items inside groups (tasks, notes, checklist items, links) Event — calendar events with start/end time Person — contacts with birthday and notes FILTERS (entity-specific): status → Item/Group: pending | in_progress | completed priority → Item: high | medium | low groupName → Item: filter by parent group name (partial match) groupBaseKind → Item: filter by parent group kind (inbox | project | list | area | ...) location → Item / Event: filter by location name overdue → Item: true = only items where dueAt < now and not completed TIME RANGE (applied to dueAt for Item, startAt for Event): today | yesterday | this_week | this_month | future RELATIONSHIPS (graph traversal filters): ASSIGNED_TO Item → Person (items with a specific assigned owner) INVOLVES Item → Person (items involving a specific person as participant) ATTENDS Person → Event (events a person attends) DEPENDS_ON Item → Item (items blocked by a specific item) SORT: date | priority | name LIMIT: 1–100 (default 50) EXAMPLES: My inbox items: { entity: "Item", filters: { groupBaseKind: "inbox" } } Overdue items: { entity: "Item", filters: { overdue: true } } High-priority items: { entity: "Item", filters: { priority: "high", status: "pending" } } Items in Q3 project: { entity: "Item", filters: { groupName: "Q3" } } Items due this week: { entity: "Item", timeRange: "this_week" } Items involving Maria: { entity: "Item", relationships: [{ type: "INVOLVES", targetLabel: "Person", targetName: "Maria" }] } Items assigned to Maria: { entity: "Item", relationships: [{ type: "ASSIGNED_TO", targetLabel: "Person", targetName: "Maria" }] } Next 10 events: { entity: "Event", timeRange: "future", limit: 10 } Events Sarah attends: { entity: "Event", relationships: [{ type: "ATTENDS", targetLabel: "Person", targetName: "Sarah" }] } All projects/groups: { entity: "Group" } All contacts: { entity: "Person" } After calling this tool: 1. Display results in a user-friendly format (not raw JSON). 2. Show nextActions under "## What would you like to do next?". Actions with a prompt: numbered list, tell user to reply with the number. Actions with a url: render as a markdown link [label](url) after the numbered list, not as a numbered item.
search
ChatGPTFull-text search across all planner content — groups, items, events, people, and custom entities. Pass plain natural language; fuzzy matching is applied automatically. Use this when the user asks to find something by keyword or partial description. After calling this tool, the assistant MUST: 1. Display the results in a readable format. 2. Show nextActions under "## What would you like to do next?". Actions with a prompt: numbered list, tell user to reply with the number. Actions with a url: render as a markdown link [label](url) after the numbered list, not as a numbered item.
search
ChatGPTFull-text search across all planner content — groups, items, events, people, and custom entities. Pass plain natural language; fuzzy matching is applied automatically. Use this when the user asks to find something by keyword or partial description. After calling this tool, the assistant MUST: 1. Display the results in a readable format. 2. Show nextActions under "## What would you like to do next?". Actions with a prompt: numbered list, tell user to reply with the number. Actions with a url: render as a markdown link [label](url) after the numbered list, not as a numbered item.
search
ChatGPTFull-text search across all planner content — groups, items, events, people, and custom entities. Pass plain natural language; fuzzy matching is applied automatically. Use this when the user asks to find something by keyword or partial description. After calling this tool, the assistant MUST: 1. Display the results in a readable format. 2. Show nextActions under "## What would you like to do next?". Actions with a prompt: numbered list, tell user to reply with the number. Actions with a url: render as a markdown link [label](url) after the numbered list, not as a numbered item.