log-todo — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited log-todo (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This skill resolves placeholders against ~/.claude/state/personal_config.json. See _config/README.md and _config/personal_config.example.json for setup. If the config is missing or a needed field is unset, the skill must surface an error to the user and refuse to proceed rather than guess.
Required config fields:
personal_config.notion.tasks_data_source_idpersonal_config.notion.tasks_parent_page_idpersonal_config.projects[].name and optional aliases (used for project inference below)Mid-session task capture. The user types a one-liner, the skill writes a row to the Notion Tasks DB and returns the URL.
Fire on any of these patterns (case-insensitive, trim leading prefix and use the remainder as the task title):
/log-todo Xlog this: X / log: X / log to notion: Xtodo: X / TODO: Xremember: X / remind me to Xfollow-up: XI should X laternext time: Xwe need to XIf the message looks like one of these but the intent is ambiguous (e.g. the user is narrating, not capturing), ask once. Otherwise just log and report.
{{personal_config.notion.tasks_data_source_id}}{{personal_config.notion.tasks_parent_page_id}}mcp__notion__notion-create-pageslog this:, todo:, remind me to, we need to, etc.) and any inline flags (P2, 45min, by Thu). What remains is the Task title. Capitalize first letter; keep verbs in imperative ("Cite Brady PNAS in section 3").\bP[0-3]\b → that priority. Else P2.(\d+)\s*(min|h|hr|hrs|hour|hours) → if h* multiply by 60. Else 30.by (mon|tue|wed|thu|fri|sat|sun|today|tomorrow) or ISO YYYY-MM-DD. Resolve weekday to next occurrence >= today. Else leave blank.Admin if no hit.personal_config.projects[]. Else leave blank.["computer"] default. If task mentions "call", "text", "DM", "voice memo" → ["phone-OK"]. If "deep think", "model", "derive", "proof", "write up" → add "deep-focus". If "skim", "tidy", "rename", "file" → add "shallow".Deep if Context contains deep-focus; else Shallow.Manual.To-do.-- separator in the trigger line.mcp__notion__notion-create-pages: {
"parent": {"type": "data_source_id", "data_source_id": "{{personal_config.notion.tasks_data_source_id}}"},
"properties": {
"Task": "<title>",
"Status": "To-do",
"Priority": "<P0/P1/P2/P3>",
"Est min": <int>,
"Type": "<Type>",
"Project": "<Project or omit>",
"Context": ["computer"],
"Energy": "<Deep|Shallow>",
"Source": "Manual",
"Due": "<YYYY-MM-DD or omit>"
}
} logged "<title>" — P2, 30min, Admin[, #Project][, due YYYY-MM-DD]
<notion-url>| Property | Type | Options |
|---|---|---|
| Task | Title | — |
| Status | Status | To-do / In progress / Done |
| Priority | Select | P0 / P1 / P2 / P3 |
| Due | Date | — |
| Est min | Number | — |
| Type | Select | Research / Teaching / Admin / Personal / Health / Travel / Social |
| Project | Select | values from personal_config.projects[].name |
| Context | Multi-select | computer / phone-OK / deep-focus / shallow |
| Energy | Select | Deep / Shallow |
| Source | Select | Manual / Telegram / Email / Calendar |
| Notes | Rich text | — |
1. Keyword inference (mid-coding capture):
User: log this: investigate why mainR2.tex won't compileParse: no explicit flags. Title = "Investigate why mainR2.tex won't compile". Keywords mainR2.tex and compile → Type Research. No project keyword → Project blank. Context ["computer"], Energy Shallow, Priority P2, Est min 30.
Report: logged "Investigate why mainR2.tex won't compile" — P2, 30min, Research
2. Explicit P/min/type tags:
User: todo: cite Brady PNAS in section 3 P1 15min ProjectAParse: Priority P1, Est min 15, Project ProjectA (resolved from personal_config.projects[]). Title (after stripping flags) = "Cite Brady PNAS in section 3". cite → Type Research. Context ["computer"], Energy Shallow.
Report: logged "Cite Brady PNAS in section 3" — P1, 15min, Research, #ProjectA
3. Due date + natural phrasing:
User: remind me to email a collaborator about the onboarding packet by ThuParse: Title = "Email collaborator about the onboarding packet". email → Type Admin. by Thu → Due = next Thursday. Priority P2, Est min 30, Context ["computer"], Energy Shallow.
Report: logged "Email collaborator about the onboarding packet" — P2, 30min, Admin, due 2026-05-14
mcp__notion__notion-create-pages returns an error, report the error verbatim and offer to retry. Do not silently drop the task — show the parsed payload so the user can re-paste it later.P1 P3, ProjectA ProjectB), use the first one and warn in the report ((ignored second P3)).personal_config.projects[], leave Project blank and surface a note in the report ((no project match for "X")).This skill does NOT:
/daily-brief./capture.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.