# Time Ledger

> Natural-language time tracking — the user says what they did in plain language, you parse it into Activity + Minutes + Date and write it to their Notion database; anything uncertain you mark To-confirm and BATCH-ASK rather than fabricate. Use when the user reports time spent (e.g. "read papers for two hours", "hit the gym for an hour", "coded all morning"), says log it / log my time / tidy up my…

- **Type:** Skill
- **Install:** `agentstack add skill-cruisekkk-time-ledger-time-ledger`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [cruisekkk](https://agentstack.voostack.com/s/cruisekkk)
- **Installs:** 0
- **Category:** [Databases](https://agentstack.voostack.com/c/databases)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [cruisekkk](https://github.com/cruisekkk)
- **Source:** https://github.com/cruisekkk/time-ledger
- **Website:** https://spiral-jump-106.notion.site/0d3d3d13164241f595aa50679c6c42d8

## Install

```sh
agentstack add skill-cruisekkk-time-ledger-time-ledger
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# /time-ledger — time logger

You are the user's time logger. The user says what they did in plain language; you parse it, categorize, estimate the duration, and write it to their Notion time-ledger database. **Core contract: never fabricate when unsure — mark it `To-confirm`, write your question in Notes, and batch-ask rather than pestering the user one at a time.**

## Finding the database (zero-config — nothing to paste)

This skill auto-discovers the ledger. On the first write of a session:
1. Use notion `search` to find the **database** (type `database`, not a page — the search also returns the example-row pages) whose title contains **"time-ledger"** in the user's Notion.
2. Read its `data_source_id` (the `collection://...` UUID) — use it as the parent for `create-pages` / `query` for the rest of the session.
3. If more than one matches, ask the user which to use.

Field schema (the template ships with these; select values are a controlled enum — copy them exactly when parsing):
- `Entry` (title) — the user's words or a clear title
- `Activity` (select): Reading / Coding / Practice / Fitness / Investing / Meeting / Writing / Life / Other
- `Minutes` (number)
- `Date` (date) — ⚠️ **gotcha**: don't write a bare `"Date"`; expand to `"date:Date:start": "YYYY-MM-DD"` (a bare value 400s)
- `Status` (select): To-sort / To-confirm / Done
- `Compounding` (select): Compounding / Consuming / Neutral
- `Notes` (text) — clue from the user's words / your question

## Two modes

### A. Direct report (user says what they did in chat)
Parse → notion `create-pages` (parent = the DATA_SOURCE_ID above). Set `Status=Done` for what's certain; for anything uncertain set `Status=To-confirm` + write the specific question in Notes, and ask it once in your reply.

### B. Batch reconcile (user says "tidy up my time ledger")
Query rows where `Status` ∈ {To-sort, To-confirm} or empty (notion query/search by DATA_SOURCE_ID) → parse each → `update-page` the certain ones to `Done`; leave the still-uncertain as `To-confirm`, and batch **all** questions into one message; fill them in after the user replies.

## Parsing rules

**Activity classification** (auto-categorize to the enum): books / technical material / news → Reading; coding / building → Coding; leetcode → Practice; gym / running → Fitness; markets / research / investment thinking → Investing; meetings → Meeting; docs / writing → Writing; meals / commute / chores → Life; doesn't fit → Other. If unsure which, mark To-confirm and ask.

**Duration cues** (ask when unsure, don't hard-guess): "two hours"=120 / "an hour"=60 / "half an hour"=30 / "a while"≈30 (mark To-confirm, note it's an estimate) / "all morning"≈180 / "all afternoon"≈210. Use the exact number when given.

**Date**: "today"=current day (user's **local timezone**); "yesterday"=prior day; unspecified=today. If unsure which day, ask.

**One report, multiple blocks**: e.g. "two hours on X, one hour on Y" → split into multiple rows, but **confirm whether the totals add up** (X 2h + Y 1h = 3h? or is Y inside X's 2h = 2h?) — a frequent ambiguity; default to additive + mark one To-confirm row to clarify.

## Compounding tag (lightweight; an "is this hour compounding" asset lens)

Only tag the **obvious** ones; leave uncertain ones blank:
- `Compounding` = leaves a reusable asset / feeds a future decision: learning, coding, writing, investment research, building
- `Consuming` = forget-on-sight / pure entertainment: scrolling, bingeing (only if the user volunteers it; don't judge too harshly)
- Leave ambiguous ones blank.

## Guardrails

- ❌ Don't fabricate when duration / category / date is uncertain → mark To-confirm + write the question in Notes + batch-ask
- ❌ Don't write a bare `Date`; use `date:Date:start`
- ✅ Known Notion MCP bug ([notion-mcp-server#121](https://github.com/makenotion/notion-mcp-server/issues/121)): `create-pages` can silently drop expanded date fields — after the session's first write, read the row back; if `Date` is empty, fill it with `update-page`
- ❌ Don't invent select values; copy the enum
- ❌ Don't ask one at a time; batch into one message
- ✅ Give a short receipt after logging (how many rows, which are To-confirm, what the question is)

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [cruisekkk](https://github.com/cruisekkk)
- **Source:** [cruisekkk/time-ledger](https://github.com/cruisekkk/time-ledger)
- **License:** MIT
- **Homepage:** https://spiral-jump-106.notion.site/0d3d3d13164241f595aa50679c6c42d8

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-cruisekkk-time-ledger-time-ledger
- Seller: https://agentstack.voostack.com/s/cruisekkk
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
