bundled-skills/time-ledger/SKILL.md
Natural-language time tracking: parse what the user says they did into Activity/Minutes/Date rows in their own Notion database — asking instead of guessing when unsure.
npx skillsauth add FrancoStino/opencode-skills-antigravity time-ledgerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Conversational time tracking. The user reports time in plain language — "read papers 2h, gym 1h, did a leetcode" — and the agent parses it into structured rows (activity, minutes, date, an optional compounding tag) and writes them to the user's own Notion database through the official Notion connector. The core design is an honesty contract: anything uncertain becomes a To-confirm row and gets batch-asked — never fabricated. A log that quietly invents durations is worse than no log.
On the first write of a session, use Notion search to find the database (type database, not a page) whose title contains "time-ledger". Read its data_source_id (the collection://... UUID) and use it as the parent for create-pages / query for the rest of the session. If more than one matches, ask the user which to use. Nothing is pasted or configured.
The companion Notion template (free, linked in the source repo) ships this field schema — select values are a controlled enum, copy them exactly:
Entry (title) — the user's words or a clear titleActivity (select): Reading / Coding / Practice / Fitness / Investing / Meeting / Writing / Life / OtherMinutes (number)Date (date) — expand to "date:Date:start": "YYYY-MM-DD"; a bare Date value fails with HTTP 400Status (select): To-sort / To-confirm / DoneCompounding (select): Compounding / Consuming / NeutralNotes (text) — clue from the user's words / your questionParse the report → create-pages (parent = the data source id above). Set Status=Done for what is certain; for anything uncertain set Status=To-confirm, write the specific question in Notes, and ask it once in your reply.
Parsing rules:
When the user says "tidy up my time ledger": query rows where Status ∈ {To-sort, To-confirm} or empty → parse each → update-page the certain ones to Done; batch all remaining questions into one message; fill answers in when the user replies.
User: log it: read ML system design 2h, gym 1h, did a leetcode
Agent: Logged 3 entries ✅
· Reading · ML system design · 120min · Compounding
· Fitness · gym · 60min
· Practice · LeetCode · ~20min ❓ To-confirm: you didn't say how long — I guessed 20min, right?
User: tidy up my time ledger
Agent: 3 rows need confirmation — answering in one go works:
1. Tue "LeetCode" — how many minutes?
2. Wed "reading" — book or papers (Reading), or course exercises (Practice)?
3. "all afternoon on the deck" — Wed or Thu?
Date property; use the date:Date:start expansionTo-confirm and asks, rather than writing invented data into the user's records."date:Date:start": "YYYY-MM-DD" — a bare Date value fails.create-pages succeeds but the Date column is empty (known Notion MCP issue: notion-mcp-server#121 — expanded date fields silently dropped).
Solution: After the session's first create, read the row back; if Date is empty, fill it with update-page.database when resolving "time-ledger".@trading-ledger - The same "parse plain language → own Notion DB → ask instead of guessing" pattern applied to trading journals (entry thesis, plan, emotion).tools
Authorized security assessment of LLM applications and AI agents: prompt injection, tool abuse, RAG exposure, memory poisoning, system-prompt extraction, and agent-compliance engineering per OWASP LLM/ASI Top 10.
development
Builds two parameterized UI modes—流光溢彩白 (iridescent white) and 五彩斑斓黑 (colorful black)—with OKLCH, WebGL/CSS fallback, vision gating, screenshot QA, and total/per-color intensity reports. Use when a UI request names either mode or needs measured color parameters.
tools
Delegate coding tasks to the Kimi Code CLI (`kimi`) only when the user explicitly requests it, while the orchestrator retains review and landing responsibility.
development
Front-end JavaScript reverse engineering: locate signature chains, analyze encrypted request parameters, sample runtime behavior, and reproduce logic locally in Node for evidence-based output.