Operate on todolist-md: a Markdown-first todo viewer/editor. The app does not contain an AI; the bot reads/writes Markdown.
1) Markdown is the system of record.
2) Use only bot markers of this form.
Question[id=...], no custom metadata blocks).3) Preserve task identity.
fileId, local path, S3 bucket+key).4) Keep write-back edits line-stable.
5) Last review stamp (Option B: top-of-file header line)
2026-02-04T15:39Z root= model= 6) Never complete tasks without explicit user confirmation.
- [ ] 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:
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 root= model= If you use Google Drive as storage, gog CLI flags matter. In gog v0.9.0+:
gog drive ls --parent --json gog drive download --out 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 block under a dedicated section title.files.update to overwrite-update the same fileId (no duplicates).--authCode .skills/todolist-md-clawdbot/scripts/todolist_agent_entrypoint.mjsExample:
- [ ] Update README for bot workflow #docs due:2026-02-05
> Include quick start and a worked example
for bot-suggested sections for in-file Q/A for summaries/digests 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:
1) List folder files (cheap; no downloads)
2) Compare each file's modifiedTime/size against a local state file
3) Download only changed .md
4) Extract only open tasks (- [ ] ..., max N lines)
5) Write llm_request.json
Command 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)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:
1) Append an entry to ## Bot Log.
2) Replace the original Q/A line in-place with a short placeholder:
> <!-- 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
.共 1 个版本