Install
openclaw skills install todolist-md-clawdbotRead, summarize, propose edits, and write back changes for Markdown todo files using line-stable bot markers without altering task identity.
openclaw skills install todolist-md-clawdbotOperate on todolist-md: a Markdown-first todo viewer/editor. The app does not contain an AI; the bot reads/writes Markdown.
<!-- bot: ... -->Question[id=...], no custom metadata blocks).fileId, local path, S3 bucket+key).<!-- bot: last_review --> 2026-02-04T15:39Z root=<rootFolderId> model=<model>- [ ] and - [x]#tagdue:YYYY-MM-DDAsk once, then persist the answers (in memory/config) for future runs.
storageKind?
google-drive | local-folder | s3 | otherfileIdpathbucket+keyrootFolderIdbucket + optional prefixWhen a Drive folder contains many .md files, not all of them should necessarily be AI-reviewed.
Recommendation (simple + app-controlled):
Two easy options:
Create a config file in the same folder:
.todolist-md.config.jsonExample:
{
"ai": {
"enabled": true,
"include": ["*.md"],
"exclude": ["todoapp.md"],
"botSuggestedSectionTitle": "Tasks (bot-suggested)"
}
}
The agent should:
.todolist-md.config.json when it changes.Add a single line near the top of the markdown file:
<!-- bot: ai_enabled --> trueThe agent should only review files containing that marker.
Do not call an LLM unless a file changed. Use code-first change detection.
.md under root, compare modifiedTime/size (or etag when available) against a local state file.- [ ]) and relevant context<!-- bot: last_review --> <ISO_UTC> root=<rootFolderId> model=<model>If you use Google Drive as storage, gog CLI flags matter. In gog v0.9.0+:
gog drive ls --parent <folderId> --jsongog drive download <fileId> --out <path>ubuntu and download to /tmp (because /root is typically 700)Included helper scripts:
skills/todolist-md-clawdbot/scripts/todolist_drive_folder_agent.mjs
.md under a folder, detects changes via state file, downloads only changed files, and writes back a <!-- bot: suggested --> block under a dedicated section title.files.update to overwrite-update the same fileId (no duplicates).--authCode <CODE>.skills/todolist-md-clawdbot/scripts/todolist_agent_entrypoint.mjs
Example:
- [ ] Update README for bot workflow #docs due:2026-02-05
> Include quick start and a worked example
<!-- bot: suggested --> for bot-suggested sections<!-- bot: question --> for in-file Q/A<!-- bot: digest --> for summaries/digests<!-- bot: note --> for short audit notes (optional)When you want LLM help but must keep Drive as the source of truth (and keep costs low), use the two-stage flow:
Goal: generate a compact JSON request for the OpenClaw agent runtime (LLM), without calling any LLM from the Node script.
What happens:
modifiedTime/size against a local state file.md- [ ] ..., max N lines)llm_request.jsonCommand example (single file):
node skills/todolist-md-clawdbot/scripts/todolist_drive_folder_agent.mjs \
--folderId <rootFolderId> \
--onlyName vyond.md \
--mode prepare \
--requestOut outputs/todolist-md/vyond_llm_request.json
Goal: take a suggestions JSON (produced by the agent runtime) and write it back only to a dedicated bot section.
Rules:
## Tasks (bot-suggested)<!-- bot: suggested -->fileId (no duplicates).headRevisionId) to avoid overwriting while you edit in Chrome.Suggestions JSON shape:
{
"schema": "todolist-md.llm_suggestions.v1",
"items": [
{
"fileId": "...",
"name": "vyond.md",
"suggested_markdown": "- [ ] ...\n > <!-- bot: note --> ..."
}
]
}
Command example:
node skills/todolist-md-clawdbot/scripts/todolist_drive_folder_agent.mjs \
--folderId <rootFolderId> \
--mode apply \
--suggestionsIn outputs/todolist-md/vyond_llm_suggestions.json
Example: if a folder has 50 Markdown files, but only 1 changed:
- [ ] ...), not the entire Markdown.Put bot-generated tasks under a dedicated section so humans can review before adopting.
## Tasks (bot-suggested)
<!-- bot: suggested -->
- [ ] Add a “Bot Log” section
Ask a question using the detail blockquote line under the task:
- [ ] Deploy v2.0 to production #backend
> <!-- bot: question --> Which CI job is failing? Options: unit / integration / e2e
Answer by adding an inline answer on the same line to keep line-stable:
- [ ] Deploy v2.0 to production #backend
> <!-- bot: question --> Which CI job is failing? Options: unit / integration / e2e Answer: integration
Rules:
If you want to keep tasks clean while preserving history:
## Bot Log. > <!-- bot: question --> (archived to Bot Log)
Create (if missing):
## Bot Log
Append entries like:
- 2026-02-01 Task: Deploy v2.0 to production
Q: Which CI job is failing?
A: integration
<!-- bot: digest --> Top 3 next actions: 1) … 2) … 3) …
Start state:
## Work
- [ ] Deploy v2.0 to production #backend due:2026-02-05
> Runbook: docs/deploy.md
## Tasks (bot-suggested)
<!-- bot: suggested -->
- [ ] (suggested) Add a “Bot Log” section
Bot asks a clarifying question (in-file):
- [ ] Deploy v2.0 to production #backend due:2026-02-05
> Runbook: docs/deploy.md
> <!-- bot: question --> Which CI job is failing? Options: unit / integration / e2e
User answers by editing the same line (line-stable):
> <!-- bot: question --> Which CI job is failing? Options: unit / integration / e2e Answer: integration
After the bot consumes the answer, archive it (preferred):
> <!-- bot: question --> (archived to Bot Log)
## Bot Log
- 2026-02-04 Task: Deploy v2.0 to production | Q: Which CI job is failing? | A: integration
<!-- bot: ... -->.