{
  "schemaVersion": "1.0",
  "item": {
    "slug": "siyuan-task-skill",
    "name": "siyuan-task-skill",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/zhhkheaven/siyuan-task-skill",
    "canonicalUrl": "https://clawhub.ai/zhhkheaven/siyuan-task-skill",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/siyuan-task-skill",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=siyuan-task-skill",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "config.env",
      "SKILL.md",
      "scripts/siyuan_api.py",
      "scripts/task_ops.py",
      "references/API.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",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/siyuan-task-skill"
    },
    "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/siyuan-task-skill",
    "agentPageUrl": "https://openagent3.xyz/skills/siyuan-task-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/siyuan-task-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/siyuan-task-skill/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": "SiYuan Note Task Management",
        "body": "Manage tasks in SiYuan Note (思源笔记) via Python scripts. All connection settings are in config.env — modify that file when the SiYuan instance address or credentials change."
      },
      {
        "title": "Configuration",
        "body": "Edit config.env in the skill root directory. Only 3 items need manual configuration:\n\nSIYUAN_API_URL=http://100.64.0.11:52487\nSIYUAN_API_TOKEN=xxxxxxxxxxxxxxxx\nSIYUAN_NOTEBOOK_NAME=work\n\nNote: SIYUAN_NOTEBOOK_ID is auto-resolved from SIYUAN_NOTEBOOK_NAME at runtime. You can still set it explicitly to skip the lookup.\n\nThen run init to auto-create the database and write remaining config:\n\ncd <skill_root>/scripts\npython3 task_ops.py init\n\nThis creates the 任务清单 document, the TASK database, all columns, and writes AV_ID / COL_* IDs back to config.env automatically. If the 任务清单 document already contains a TASK database (e.g. copied from another notebook), init will detect and reuse it instead of creating a duplicate."
      },
      {
        "title": "Task Data Model",
        "body": "Tasks are stored as rows in a TASK database (Attribute View) block inside the 任务清单 document. Each row has these columns:\n\nColumnChineseTypeValues / Colors主键任务名称blockPrimary key — task name任务内容任务内容textTask description / details (what the task is about)相关方相关方textFree text重要程度重要程度select高(红) / 中(绿) / 低(灰)紧急程度紧急程度select高(红) / 中(绿) / 低(灰)状态状态select未开始(灰) / 进行中(绿) / 结束(红) / 挂起(蓝)备注备注textExtra notes / supplementary remarks (not the main task info)创建时间创建时间createdAuto开始时间开始时间dateTimestamp结束时间结束时间dateTimestamp更新时间更新时间updatedAuto\n\nDatabase IDs (auto-generated in config.env by init command):\n\nAV_ID — Attribute View ID\nAV_BLOCK_ID — AV block ID\nCOL_* — Column IDs for each field\n\nEach task automatically gets a sub-document under /任务清单/{task_name} with this template:\n\n# 任务描述\n\n# 任务附件\n\n# 下一步\n\nThe sub-document name always matches the task name. The task's primary key in the database is linked to the sub-document (non-detached), showing a document icon. Renaming a task also renames its sub-document. Deleting a task also deletes its sub-document."
      },
      {
        "title": "Scripts",
        "body": "All scripts are in the scripts/ directory. Run from that directory:\n\ncd <skill_root>/scripts"
      },
      {
        "title": "siyuan_api.py — Base API Client",
        "body": "Low-level client wrapping all SiYuan HTTP API endpoints. Used by task_ops.py internally. Can also be imported directly for custom operations:\n\nfrom siyuan_api import SiYuanClient\nclient = SiYuanClient()\nresult = client.sql_query(\"SELECT * FROM blocks WHERE type = 'd' LIMIT 5\")\n\nKey methods: sql_query, create_doc, append_block, update_block, delete_block, set_block_attrs, get_block_attrs, get_child_blocks, get_block_kramdown, export_md, upload_asset, push_msg. See references/API.md for full SiYuan API reference."
      },
      {
        "title": "task_ops.py — Task CRUD Operations",
        "body": "High-level CLI for task management. All commands output JSON.\n\nCreate a task (auto-creates sub-document with template):\n\npython3 task_ops.py create \"任务名称\" content=\"任务内容\" importance=\"高\" urgency=\"中\" notes=\"备注信息\"\n\nParameter mapping:\n\ncontent → 任务内容 (task description / main information about the task)\nnotes → 备注 (supplementary remarks, not the main task info)\nstakeholders → 相关方\nimportance → 重要程度 (高/中/低)\nurgency → 紧急程度 (高/中/低)\nstatus → 状态 (default: 未开始)\n\nList all tasks:\n\npython3 task_ops.py list\n\nFind tasks by status:\n\npython3 task_ops.py find \"进行中\"\n\nChange task status (pass row_id from list output):\n\npython3 task_ops.py start <row_id>\npython3 task_ops.py complete <row_id>\npython3 task_ops.py suspend <row_id>\n\nRename a task (also renames sub-document):\n\npython3 task_ops.py rename <row_id> \"新名称\"\n\nAttach image to task sub-document (uploads file and inserts into section):\n\npython3 task_ops.py attach-image <row_id> /path/to/image.png\npython3 task_ops.py attach-image <row_id> /path/to/image.png section=\"任务描述\"\n\nDefault section is 任务附件. On macOS, save clipboard image first: osascript -e 'set png to (the clipboard as «class PNGf»)' -e 'set f to open for access (POSIX file \"/tmp/clip.png\") with write permission' -e 'write png to f' -e 'close access f'\n\nList sub-documents:\n\npython3 task_ops.py list-docs\n\nDelete a task (also deletes sub-document):\n\npython3 task_ops.py delete <row_id>\n\nMigrate database (apply schema changes and reorder columns):\n\npython3 task_ops.py migrate"
      },
      {
        "title": "Programmatic Usage",
        "body": "For complex workflows, import TaskManager directly in Python:\n\nimport sys; sys.path.insert(0, \"<skill_root>/scripts\")\nfrom task_ops import TaskManager\n\ntm = TaskManager()\n\n# Create task (auto-creates sub-document with template)\nresult = tm.create_task(\"实现用户登录\", content=\"OAuth2 集成\", importance=\"高\", urgency=\"高\")\nrow_id = result[\"row_id\"]\ndoc_id = result[\"doc_id\"]\n\n# Rename task (also renames sub-document)\ntm.rename_task(row_id, \"实现OAuth2登录\")\n\n# Status transitions\ntm.start_task(row_id)\ntm.complete_task(row_id)\n\n# Delete task (also deletes sub-document)\ntm.delete_task(row_id)\n\n# Attach image to task sub-document (default section: 任务附件)\ntm.attach_image_to_task(row_id, \"/path/to/image.png\")\ntm.attach_image_to_task(row_id, \"/path/to/image.png\", section=\"任务描述\")"
      },
      {
        "title": "Important Notes",
        "body": "The 任务清单 document and TASK database are auto-created on first use\nTasks are stored as database rows (Attribute View), not plain blocks\nrow_id from list output is used for all update/delete operations\n创建时间 and 更新时间 columns are auto-managed by SiYuan\nBlock references use SiYuan format: ((<block_id> \"anchor text\"))\nAll API responses have code field — 0 means success"
      }
    ],
    "body": "SiYuan Note Task Management\n\nManage tasks in SiYuan Note (思源笔记) via Python scripts. All connection settings are in config.env — modify that file when the SiYuan instance address or credentials change.\n\nConfiguration\n\nEdit config.env in the skill root directory. Only 3 items need manual configuration:\n\nSIYUAN_API_URL=http://100.64.0.11:52487\nSIYUAN_API_TOKEN=xxxxxxxxxxxxxxxx\nSIYUAN_NOTEBOOK_NAME=work\n\n\nNote: SIYUAN_NOTEBOOK_ID is auto-resolved from SIYUAN_NOTEBOOK_NAME at runtime. You can still set it explicitly to skip the lookup.\n\nThen run init to auto-create the database and write remaining config:\n\ncd <skill_root>/scripts\npython3 task_ops.py init\n\n\nThis creates the 任务清单 document, the TASK database, all columns, and writes AV_ID / COL_* IDs back to config.env automatically. If the 任务清单 document already contains a TASK database (e.g. copied from another notebook), init will detect and reuse it instead of creating a duplicate.\n\nTask Data Model\n\nTasks are stored as rows in a TASK database (Attribute View) block inside the 任务清单 document. Each row has these columns:\n\nColumn\tChinese\tType\tValues / Colors\n主键\t任务名称\tblock\tPrimary key — task name\n任务内容\t任务内容\ttext\tTask description / details (what the task is about)\n相关方\t相关方\ttext\tFree text\n重要程度\t重要程度\tselect\t高(红) / 中(绿) / 低(灰)\n紧急程度\t紧急程度\tselect\t高(红) / 中(绿) / 低(灰)\n状态\t状态\tselect\t未开始(灰) / 进行中(绿) / 结束(红) / 挂起(蓝)\n备注\t备注\ttext\tExtra notes / supplementary remarks (not the main task info)\n创建时间\t创建时间\tcreated\tAuto\n开始时间\t开始时间\tdate\tTimestamp\n结束时间\t结束时间\tdate\tTimestamp\n更新时间\t更新时间\tupdated\tAuto\n\nDatabase IDs (auto-generated in config.env by init command):\n\nAV_ID — Attribute View ID\nAV_BLOCK_ID — AV block ID\nCOL_* — Column IDs for each field\n\nEach task automatically gets a sub-document under /任务清单/{task_name} with this template:\n\n# 任务描述\n\n# 任务附件\n\n# 下一步\n\n\nThe sub-document name always matches the task name. The task's primary key in the database is linked to the sub-document (non-detached), showing a document icon. Renaming a task also renames its sub-document. Deleting a task also deletes its sub-document.\n\nScripts\n\nAll scripts are in the scripts/ directory. Run from that directory:\n\ncd <skill_root>/scripts\n\nsiyuan_api.py — Base API Client\n\nLow-level client wrapping all SiYuan HTTP API endpoints. Used by task_ops.py internally. Can also be imported directly for custom operations:\n\nfrom siyuan_api import SiYuanClient\nclient = SiYuanClient()\nresult = client.sql_query(\"SELECT * FROM blocks WHERE type = 'd' LIMIT 5\")\n\n\nKey methods: sql_query, create_doc, append_block, update_block, delete_block, set_block_attrs, get_block_attrs, get_child_blocks, get_block_kramdown, export_md, upload_asset, push_msg. See references/API.md for full SiYuan API reference.\n\ntask_ops.py — Task CRUD Operations\n\nHigh-level CLI for task management. All commands output JSON.\n\nCreate a task (auto-creates sub-document with template):\n\npython3 task_ops.py create \"任务名称\" content=\"任务内容\" importance=\"高\" urgency=\"中\" notes=\"备注信息\"\n\n\nParameter mapping:\n\ncontent → 任务内容 (task description / main information about the task)\nnotes → 备注 (supplementary remarks, not the main task info)\nstakeholders → 相关方\nimportance → 重要程度 (高/中/低)\nurgency → 紧急程度 (高/中/低)\nstatus → 状态 (default: 未开始)\n\nList all tasks:\n\npython3 task_ops.py list\n\n\nFind tasks by status:\n\npython3 task_ops.py find \"进行中\"\n\n\nChange task status (pass row_id from list output):\n\npython3 task_ops.py start <row_id>\npython3 task_ops.py complete <row_id>\npython3 task_ops.py suspend <row_id>\n\n\nRename a task (also renames sub-document):\n\npython3 task_ops.py rename <row_id> \"新名称\"\n\n\nAttach image to task sub-document (uploads file and inserts into section):\n\npython3 task_ops.py attach-image <row_id> /path/to/image.png\npython3 task_ops.py attach-image <row_id> /path/to/image.png section=\"任务描述\"\n\n\nDefault section is 任务附件. On macOS, save clipboard image first: osascript -e 'set png to (the clipboard as «class PNGf»)' -e 'set f to open for access (POSIX file \"/tmp/clip.png\") with write permission' -e 'write png to f' -e 'close access f'\n\nList sub-documents:\n\npython3 task_ops.py list-docs\n\n\nDelete a task (also deletes sub-document):\n\npython3 task_ops.py delete <row_id>\n\n\nMigrate database (apply schema changes and reorder columns):\n\npython3 task_ops.py migrate\n\nProgrammatic Usage\n\nFor complex workflows, import TaskManager directly in Python:\n\nimport sys; sys.path.insert(0, \"<skill_root>/scripts\")\nfrom task_ops import TaskManager\n\ntm = TaskManager()\n\n# Create task (auto-creates sub-document with template)\nresult = tm.create_task(\"实现用户登录\", content=\"OAuth2 集成\", importance=\"高\", urgency=\"高\")\nrow_id = result[\"row_id\"]\ndoc_id = result[\"doc_id\"]\n\n# Rename task (also renames sub-document)\ntm.rename_task(row_id, \"实现OAuth2登录\")\n\n# Status transitions\ntm.start_task(row_id)\ntm.complete_task(row_id)\n\n# Delete task (also deletes sub-document)\ntm.delete_task(row_id)\n\n# Attach image to task sub-document (default section: 任务附件)\ntm.attach_image_to_task(row_id, \"/path/to/image.png\")\ntm.attach_image_to_task(row_id, \"/path/to/image.png\", section=\"任务描述\")\n\nImportant Notes\nThe 任务清单 document and TASK database are auto-created on first use\nTasks are stored as database rows (Attribute View), not plain blocks\nrow_id from list output is used for all update/delete operations\n创建时间 and 更新时间 columns are auto-managed by SiYuan\nBlock references use SiYuan format: ((<block_id> \"anchor text\"))\nAll API responses have code field — 0 means success"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/zhhkheaven/siyuan-task-skill",
    "publisherUrl": "https://clawhub.ai/zhhkheaven/siyuan-task-skill",
    "owner": "zhhkheaven",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/siyuan-task-skill",
    "downloadUrl": "https://openagent3.xyz/downloads/siyuan-task-skill",
    "agentUrl": "https://openagent3.xyz/skills/siyuan-task-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/siyuan-task-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/siyuan-task-skill/agent.md"
  }
}