{
  "schemaVersion": "1.0",
  "item": {
    "slug": "bun-do-api",
    "name": "bun-do",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/ricardofrantz/bun-do-api",
    "canonicalUrl": "https://clawhub.ai/ricardofrantz/bun-do-api",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/bun-do-api",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=bun-do-api",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "slug": "bun-do-api",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-11T17:58:26.098Z",
      "expiresAt": "2026-05-18T17:58:26.098Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=bun-do-api",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=bun-do-api",
        "contentDisposition": "attachment; filename=\"bun-do-api-1.3.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "bun-do-api"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/bun-do-api"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/bun-do-api",
    "agentPageUrl": "https://openagent3.xyz/skills/bun-do-api/agent",
    "manifestUrl": "https://openagent3.xyz/skills/bun-do-api/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/bun-do-api/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "bun-do — your local task backend",
        "body": "\"Add P1 task: renew passport, due March 30, recurring yearly, with €85 payment\"\n\nbun-do is a local-first todo app. REST API at http://localhost:8000. All data persists to JSON on disk. Nothing leaves your machine.\n\nStart: bun-do start (install: bun install -g bun-do)\nData: ~/.bun-do/ (override: BUNDO_DATA_DIR)\nPort: 8000 (override: --port=PORT)"
      },
      {
        "title": "How users talk (map these to API calls)",
        "body": "User saysAction\"add task: buy milk\"POST /api/tasks {\"title\": \"Buy milk\"}\"remind me to call dentist tomorrow\"POST with {\"title\": \"Call dentist\", \"date\": \"TOMORROW\", \"type\": \"reminder\"}\"P0 deadline: submit proposal by Friday\"POST with {\"title\": \"Submit proposal\", \"date\": \"FRIDAY\", \"priority\": \"P0\", \"type\": \"deadline\"}\"add monthly payment: rent €1200 on the 1st\"POST with {\"title\": \"Rent\", \"type\": \"payment\", \"amount\": \"1200\", \"currency\": \"EUR\", \"recurrence\": {\"type\": \"monthly\", \"day\": 1}}\"what's overdue?\"GET /api/tasks, filter done=false where date < today\"mark passport task done\"Search by title → PUT {\"done\": true}\"what should I do today?\"GET /api/tasks, filter for today's date, sort by priority\"move it to next week\"PUT with {\"date\": \"NEXT_MONDAY\"}\"add subtask: book flight\"POST /api/tasks/{id}/subtasks {\"title\": \"Book flight\"}\"log progress on bun-do: shipped v1.3\"POST /api/projects/{id}/entries {\"summary\": \"Shipped v1.3\"}\n\nImportant: Always resolve relative dates (\"tomorrow\", \"next Friday\") to YYYY-MM-DD before sending."
      },
      {
        "title": "API reference",
        "body": "ActionMethodEndpointList tasksGET/api/tasksAdd taskPOST/api/tasksEdit taskPUT/api/tasks/{id}Delete taskDELETE/api/tasks/{id}Add subtaskPOST/api/tasks/{id}/subtasksEdit subtaskPUT/api/tasks/{id}/subtasks/{sid}Delete subtaskDELETE/api/tasks/{id}/subtasks/{sid}Reorder backlogPOST/api/tasks/reorderClear donePOST/api/tasks/clear-doneList projectsGET/api/projectsAdd projectPOST/api/projectsEdit projectPUT/api/projects/{id}Delete projectDELETE/api/projects/{id}Add log entryPOST/api/projects/{id}/entriesDelete log entryDELETE/api/projects/{id}/entries/{eid}"
      },
      {
        "title": "Task fields",
        "body": "{\n  \"title\": \"string (required)\",\n  \"date\": \"YYYY-MM-DD (default: today)\",\n  \"priority\": \"P0 | P1 | P2 | P3 (default: P2)\",\n  \"type\": \"task | deadline | reminder | payment (default: task)\",\n  \"notes\": \"string\",\n  \"done\": false,\n  \"amount\": \"string (for payments)\",\n  \"currency\": \"CHF | USD | EUR | BRL (default: CHF)\",\n  \"recurrence\": null | {\"type\": \"weekly\", \"dow\": 0-6} | {\"type\": \"monthly\", \"day\": 1-31} | {\"type\": \"yearly\", \"month\": 1-12, \"day\": 1-31}\n}\n\nPriorities: P0 = critical/drop everything, P1 = high/do today, P2 = normal, P3 = backlog (not on calendar).\nTypes: task = actionable, deadline = hard date, reminder = FYI, payment = bill/invoice tracker.\nRecurring: When a recurring task is marked done, the next occurrence is auto-created."
      },
      {
        "title": "Before any operation — check server is up",
        "body": "curl -sf http://localhost:8000/api/tasks > /dev/null && echo \"OK\" || echo \"Server not running — run: bun-do start\""
      },
      {
        "title": "Add a task",
        "body": "curl -s -X POST http://localhost:8000/api/tasks \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"title\": \"Buy milk\", \"date\": \"2026-03-01\", \"priority\": \"P2\"}'"
      },
      {
        "title": "Add a recurring payment",
        "body": "curl -s -X POST http://localhost:8000/api/tasks \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"title\": \"Server hosting\", \"date\": \"2026-03-01\", \"priority\": \"P1\", \"type\": \"payment\", \"amount\": \"29\", \"currency\": \"USD\", \"recurrence\": {\"type\": \"monthly\", \"day\": 1}}'"
      },
      {
        "title": "Find task by title → get ID",
        "body": "curl -s http://localhost:8000/api/tasks | python3 -c \"\nimport sys, json\nfor t in json.load(sys.stdin)['tasks']:\n    if 'SEARCH' in t['title'].lower(): print(t['id'], t['title'])\n\""
      },
      {
        "title": "Edit (only send fields to change)",
        "body": "curl -s -X PUT http://localhost:8000/api/tasks/TASK_ID \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"priority\": \"P0\", \"date\": \"2026-03-15\"}'"
      },
      {
        "title": "Mark done",
        "body": "curl -s -X PUT http://localhost:8000/api/tasks/TASK_ID \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"done\": true}'"
      },
      {
        "title": "Delete",
        "body": "curl -s -X DELETE http://localhost:8000/api/tasks/TASK_ID"
      },
      {
        "title": "Add subtask",
        "body": "curl -s -X POST http://localhost:8000/api/tasks/TASK_ID/subtasks \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"title\": \"Step one\"}'"
      },
      {
        "title": "Log project progress",
        "body": "curl -s -X POST http://localhost:8000/api/projects/PROJECT_ID/entries \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"summary\": \"Shipped v1.3 with MCP server and OpenClaw skill\"}'"
      },
      {
        "title": "Proactive patterns",
        "body": "Use these patterns for scheduled/autonomous behavior:\n\nMorning briefing: GET /api/tasks, filter for today + overdue, summarize by priority.\nEnd of day: Mark completed tasks done, add entries to active projects.\nWeekly review: List all tasks, highlight overdue + P0/P1 without progress.\nPayment forecast: List tasks where type=payment, group by month, sum amounts."
      },
      {
        "title": "Rules",
        "body": "Always verify the server is running before any API call.\nNever guess IDs — search by title first, then use the UUID.\nDates must be YYYY-MM-DD. Resolve \"tomorrow\", \"next Monday\", etc. before sending.\nOnly send fields you want to change on PUT requests.\nThe API returns the created/updated object on success.\nGET /api/tasks auto-carries overdue non-payment tasks to today."
      }
    ],
    "body": "bun-do — your local task backend\n\n\"Add P1 task: renew passport, due March 30, recurring yearly, with €85 payment\"\n\nbun-do is a local-first todo app. REST API at http://localhost:8000. All data persists to JSON on disk. Nothing leaves your machine.\n\nStart: bun-do start (install: bun install -g bun-do) Data: ~/.bun-do/ (override: BUNDO_DATA_DIR) Port: 8000 (override: --port=PORT)\n\nHow users talk (map these to API calls)\nUser says\tAction\n\"add task: buy milk\"\tPOST /api/tasks {\"title\": \"Buy milk\"}\n\"remind me to call dentist tomorrow\"\tPOST with {\"title\": \"Call dentist\", \"date\": \"TOMORROW\", \"type\": \"reminder\"}\n\"P0 deadline: submit proposal by Friday\"\tPOST with {\"title\": \"Submit proposal\", \"date\": \"FRIDAY\", \"priority\": \"P0\", \"type\": \"deadline\"}\n\"add monthly payment: rent €1200 on the 1st\"\tPOST with {\"title\": \"Rent\", \"type\": \"payment\", \"amount\": \"1200\", \"currency\": \"EUR\", \"recurrence\": {\"type\": \"monthly\", \"day\": 1}}\n\"what's overdue?\"\tGET /api/tasks, filter done=false where date < today\n\"mark passport task done\"\tSearch by title → PUT {\"done\": true}\n\"what should I do today?\"\tGET /api/tasks, filter for today's date, sort by priority\n\"move it to next week\"\tPUT with {\"date\": \"NEXT_MONDAY\"}\n\"add subtask: book flight\"\tPOST /api/tasks/{id}/subtasks {\"title\": \"Book flight\"}\n\"log progress on bun-do: shipped v1.3\"\tPOST /api/projects/{id}/entries {\"summary\": \"Shipped v1.3\"}\n\nImportant: Always resolve relative dates (\"tomorrow\", \"next Friday\") to YYYY-MM-DD before sending.\n\nAPI reference\nAction\tMethod\tEndpoint\nList tasks\tGET\t/api/tasks\nAdd task\tPOST\t/api/tasks\nEdit task\tPUT\t/api/tasks/{id}\nDelete task\tDELETE\t/api/tasks/{id}\nAdd subtask\tPOST\t/api/tasks/{id}/subtasks\nEdit subtask\tPUT\t/api/tasks/{id}/subtasks/{sid}\nDelete subtask\tDELETE\t/api/tasks/{id}/subtasks/{sid}\nReorder backlog\tPOST\t/api/tasks/reorder\nClear done\tPOST\t/api/tasks/clear-done\nList projects\tGET\t/api/projects\nAdd project\tPOST\t/api/projects\nEdit project\tPUT\t/api/projects/{id}\nDelete project\tDELETE\t/api/projects/{id}\nAdd log entry\tPOST\t/api/projects/{id}/entries\nDelete log entry\tDELETE\t/api/projects/{id}/entries/{eid}\nTask fields\n{\n  \"title\": \"string (required)\",\n  \"date\": \"YYYY-MM-DD (default: today)\",\n  \"priority\": \"P0 | P1 | P2 | P3 (default: P2)\",\n  \"type\": \"task | deadline | reminder | payment (default: task)\",\n  \"notes\": \"string\",\n  \"done\": false,\n  \"amount\": \"string (for payments)\",\n  \"currency\": \"CHF | USD | EUR | BRL (default: CHF)\",\n  \"recurrence\": null | {\"type\": \"weekly\", \"dow\": 0-6} | {\"type\": \"monthly\", \"day\": 1-31} | {\"type\": \"yearly\", \"month\": 1-12, \"day\": 1-31}\n}\n\n\nPriorities: P0 = critical/drop everything, P1 = high/do today, P2 = normal, P3 = backlog (not on calendar). Types: task = actionable, deadline = hard date, reminder = FYI, payment = bill/invoice tracker. Recurring: When a recurring task is marked done, the next occurrence is auto-created.\n\nCurl patterns\nBefore any operation — check server is up\ncurl -sf http://localhost:8000/api/tasks > /dev/null && echo \"OK\" || echo \"Server not running — run: bun-do start\"\n\nAdd a task\ncurl -s -X POST http://localhost:8000/api/tasks \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"title\": \"Buy milk\", \"date\": \"2026-03-01\", \"priority\": \"P2\"}'\n\nAdd a recurring payment\ncurl -s -X POST http://localhost:8000/api/tasks \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"title\": \"Server hosting\", \"date\": \"2026-03-01\", \"priority\": \"P1\", \"type\": \"payment\", \"amount\": \"29\", \"currency\": \"USD\", \"recurrence\": {\"type\": \"monthly\", \"day\": 1}}'\n\nFind task by title → get ID\ncurl -s http://localhost:8000/api/tasks | python3 -c \"\nimport sys, json\nfor t in json.load(sys.stdin)['tasks']:\n    if 'SEARCH' in t['title'].lower(): print(t['id'], t['title'])\n\"\n\nEdit (only send fields to change)\ncurl -s -X PUT http://localhost:8000/api/tasks/TASK_ID \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"priority\": \"P0\", \"date\": \"2026-03-15\"}'\n\nMark done\ncurl -s -X PUT http://localhost:8000/api/tasks/TASK_ID \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"done\": true}'\n\nDelete\ncurl -s -X DELETE http://localhost:8000/api/tasks/TASK_ID\n\nAdd subtask\ncurl -s -X POST http://localhost:8000/api/tasks/TASK_ID/subtasks \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"title\": \"Step one\"}'\n\nLog project progress\ncurl -s -X POST http://localhost:8000/api/projects/PROJECT_ID/entries \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"summary\": \"Shipped v1.3 with MCP server and OpenClaw skill\"}'\n\nProactive patterns\n\nUse these patterns for scheduled/autonomous behavior:\n\nMorning briefing: GET /api/tasks, filter for today + overdue, summarize by priority. End of day: Mark completed tasks done, add entries to active projects. Weekly review: List all tasks, highlight overdue + P0/P1 without progress. Payment forecast: List tasks where type=payment, group by month, sum amounts.\n\nRules\nAlways verify the server is running before any API call.\nNever guess IDs — search by title first, then use the UUID.\nDates must be YYYY-MM-DD. Resolve \"tomorrow\", \"next Monday\", etc. before sending.\nOnly send fields you want to change on PUT requests.\nThe API returns the created/updated object on success.\nGET /api/tasks auto-carries overdue non-payment tasks to today."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/ricardofrantz/bun-do-api",
    "publisherUrl": "https://clawhub.ai/ricardofrantz/bun-do-api",
    "owner": "ricardofrantz",
    "version": "1.3.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/bun-do-api",
    "downloadUrl": "https://openagent3.xyz/downloads/bun-do-api",
    "agentUrl": "https://openagent3.xyz/skills/bun-do-api/agent",
    "manifestUrl": "https://openagent3.xyz/skills/bun-do-api/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/bun-do-api/agent.md"
  }
}