andibase

Day Planner Agent

Agent-ready recipe for creating a daily planning workflow in andibase

Open Markdown

This recipe tells an agent exactly how to build a daily planning workflow in andibase.

Goal

Create three things in one workspace:

  1. A day-plan data definition.
  2. A day-plan-item data definition.
  3. One agent that builds, updates, and tracks daily plans.

Expected outcome

After following this recipe, the workspace should have:

  • a day-plan definition for one daily plan
  • a day-plan-item definition for tasks, blocks, and priorities inside the plan
  • a day-planner-agent agent

Use the API documented in:

Agent instructions

When an agent executes this recipe, it should follow these rules:

  1. Create the day-plan definition first.
  2. Create the day-plan-item definition second.
  3. In the current API, data definition handles are generated from name. Use name: "Day Plan" and name: "Day Plan Item" so the created handles normalize to day-plan and day-plan-item.
  4. If your execution environment can resolve the created day-plan definition id, wire the item-to-plan link as a relationship field. If it cannot, use a text foreign key such as planRecordId instead, because the public HTTP API still expects dataDefinitionId for relationship fields.
  5. Create the day-planner agent with instructions focused on turning goals, meetings, and constraints into an actionable day plan.
  6. Use sensible defaults and ask the user only when a missing choice materially changes the schedule, such as the plan date, time window, or non-movable commitments.
  7. Do not pretend that calendar integrations or external scheduling tools exist unless the execution environment actually has them. Use the current workspace data tools as the source of truth.

Step 1: Create the data model

Create two data definitions: day-plan and day-plan-item.

1. Day Plan definition

Use name: "Day Plan". The current API derives the handle from the name, so this will create the day-plan handle.

Recommended fields:

{
  "name": "Day Plan",
  "description": "Tracks one planned day, its priorities, and overall status.",
  "fields": {
    "title": {
      "name": "Title",
      "type": "text"
    },
    "planDate": {
      "name": "Plan date",
      "type": "date"
    },
    "ownerName": {
      "name": "Owner name",
      "type": "text"
    },
    "focusTheme": {
      "name": "Focus theme",
      "type": "text"
    },
    "status": {
      "name": "Status",
      "type": "select",
      "options": [
        { "value": "draft", "label": "Draft", "color": "zinc" },
        { "value": "ready", "label": "Ready", "color": "blue" },
        { "value": "in-progress", "label": "In progress", "color": "green" },
        { "value": "completed", "label": "Completed", "color": "emerald" },
        { "value": "abandoned", "label": "Abandoned", "color": "stone" }
      ]
    },
    "dayStart": {
      "name": "Day start",
      "type": "text"
    },
    "dayEnd": {
      "name": "Day end",
      "type": "text"
    },
    "topPriorities": {
      "name": "Top priorities",
      "type": "json"
    },
    "constraints": {
      "name": "Constraints",
      "type": "json"
    },
    "summary": {
      "name": "Summary",
      "type": "text",
      "variant": "long-text"
    },
    "pendingItems": {
      "name": "Pending items",
      "type": "json"
    },
    "itemsCount": {
      "name": "Items count",
      "type": "number"
    },
    "completedItemsCount": {
      "name": "Completed items count",
      "type": "number"
    }
  }
}

Recommended defaults for agent-created plan rows:

  • status: ready
  • topPriorities: []
  • constraints: []
  • pendingItems: []
  • itemsCount: 0
  • completedItemsCount: 0

2. Day Plan Item definition

Use name: "Day Plan Item". The current API derives the handle from the name, so this will create the day-plan-item handle.

Recommended fields:

{
  "name": "Day Plan Item",
  "description": "Tracks one task, block, or commitment inside a daily plan.",
  "fields": {
    "planRecordId": {
      "name": "Plan record id",
      "description": "Store the linked day-plan row id when the client only has public HTTP API access.",
      "type": "text"
    },
    "title": {
      "name": "Title",
      "type": "text"
    },
    "itemType": {
      "name": "Item type",
      "type": "select",
      "options": [
        { "value": "task", "label": "Task", "color": "blue" },
        { "value": "focus-block", "label": "Focus block", "color": "violet" },
        { "value": "meeting", "label": "Meeting", "color": "amber" },
        { "value": "admin", "label": "Admin", "color": "zinc" },
        { "value": "break", "label": "Break", "color": "green" }
      ]
    },
    "priority": {
      "name": "Priority",
      "type": "select",
      "options": [
        { "value": "low", "label": "Low", "color": "zinc" },
        { "value": "medium", "label": "Medium", "color": "blue" },
        { "value": "high", "label": "High", "color": "amber" },
        { "value": "critical", "label": "Critical", "color": "red" }
      ]
    },
    "status": {
      "name": "Status",
      "type": "select",
      "options": [
        { "value": "planned", "label": "Planned", "color": "blue" },
        { "value": "in-progress", "label": "In progress", "color": "amber" },
        { "value": "done", "label": "Done", "color": "green" },
        { "value": "skipped", "label": "Skipped", "color": "stone" }
      ]
    },
    "startTime": {
      "name": "Start time",
      "type": "text"
    },
    "endTime": {
      "name": "End time",
      "type": "text"
    },
    "durationMinutes": {
      "name": "Duration minutes",
      "type": "number"
    },
    "notes": {
      "name": "Notes",
      "type": "text",
      "variant": "long-text"
    }
  }
}

If your client already has the created day-plan definition id, you can replace planRecordId with:

{
  "planId": {
    "name": "Plan",
    "type": "relationship",
    "dataDefinitionId": "<day-plan-definition-id>"
  }
}

3. Example create requests

Create the definitions with POST /api/v1/data-definitions.

Current API note:

  • the create payload uses name, description, and fields
  • the handle is derived from name
  • data rows are created with data, not attributes

Example for day-plan:

curl -X POST "https://andibase.com/api/v1/data-definitions" \
  -H "Authorization: Bearer $ANDI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Day Plan",
    "description": "Tracks one planned day, its priorities, and overall status.",
    "fields": {
      "title": { "name": "Title", "type": "text" },
      "planDate": { "name": "Plan date", "type": "date" },
      "focusTheme": { "name": "Focus theme", "type": "text" },
      "status": {
        "name": "Status",
        "type": "select",
        "options": [
          { "value": "ready", "label": "Ready", "color": "blue" },
          { "value": "in-progress", "label": "In progress", "color": "green" },
          { "value": "completed", "label": "Completed", "color": "emerald" }
        ]
      },
      "summary": { "name": "Summary", "type": "text", "variant": "long-text" },
      "itemsCount": { "name": "Items count", "type": "number" },
      "completedItemsCount": { "name": "Completed items count", "type": "number" }
    }
  }'

Create sample plan rows with POST /api/v1/data-definitions/day-plan/data/upsert-many.

curl -X POST "https://andibase.com/api/v1/data-definitions/day-plan/data/upsert-many" \
  -H "Authorization: Bearer $ANDI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {
        "data": {
          "title": "Friday plan",
          "planDate": "2026-03-20",
          "ownerName": "Gonzalo",
          "focusTheme": "Ship key product work before noon",
          "status": "ready",
          "dayStart": "09:00",
          "dayEnd": "18:00",
          "topPriorities": [
            "Finish docs updates",
            "Review builder workflow",
            "Clear urgent messages"
          ],
          "constraints": [
            "Team sync at 11:00",
            "Customer call at 16:00"
          ],
          "summary": "Front-load deep work, keep meetings contained, and leave the afternoon for follow-up tasks.",
          "itemsCount": 0,
          "completedItemsCount": 0
        }
      }
    ]
  }'

Step 2: Create the day planner agent

Create one workspace agent with handle day-planner-agent.

Recommended behavior:

  • turn goals, meetings, and constraints into a realistic day plan
  • create one plan row for the target day
  • create plan-item rows for tasks, meetings, focus blocks, and breaks
  • rebalance the day when the user adds, removes, or reprioritizes work
  • update completion counts on the parent plan as items are marked done
  • make tradeoffs explicit when not everything fits

Recommended agent payload:

{
  "name": "Day Planner Agent",
  "handle": "day-planner-agent",
  "description": "Builds and updates daily plans from goals, meetings, and constraints.",
  "model": "openai/gpt-5.4",
  "capabilities": {
    "webAccess": false,
    "browserAccess": false,
    "objectsAccess": true
  },
  "instructions": "You manage a workspace daily planning workflow. Use the day-plan and day-plan-item data definitions as the source of truth. Be action-oriented: make reasonable assumptions, complete the work when the intended outcome is clear, and avoid asking for confirmation on every small step. When the user asks for a plan, create one day-plan row and the related day-plan-item rows needed to make the schedule actionable. Use realistic time blocks, leave some buffer, and surface tradeoffs when the day is overbooked. When the user marks an item done, update that item and refresh the parent plan completedItemsCount. When the user changes priorities or constraints, update the current plan instead of creating duplicates unless they explicitly ask for a separate plan."
}

Create the agent with POST /api/v1/agents.

Step 3: Expected operating flow

When a user asks for a day plan, the agent should:

  1. Resolve the target day.
  2. Capture goals, constraints, and fixed commitments.
  3. Create one day-plan row.
  4. Create the needed day-plan-item rows.
  5. Keep the plan updated as the day changes.

An agent should consider the recipe complete only if all of the following are true:

  1. day-plan exists and includes the required fields.
  2. day-plan-item exists and includes either the planId relationship or the planRecordId fallback used by the current public HTTP API flow.
  3. day-planner-agent exists.
  4. At least one sample day-plan row can be created successfully.
  5. At least one sample day-plan-item row can be created successfully.
  6. The agent can update the plan status or item status without runtime auth errors.

Minimal delivery summary

When the agent finishes, it should report:

  • the created data definition handles
  • the created agent handle
  • any assumptions made for working hours, priorities, or fixed commitments

On this page