worklog

worklog is a skill for Claude Code, Codex from dgilford/ai-science-toolkit. It costs 61 tokens per session (1,659 once invoked), scanned B, original, MIT.

A work-log tool that records progress, decisions, and next actions in a Notion work journal, a remote cache, and a local copy.

In plain words
What is it for?
Use it when you need to log progress, record a decision, journal work, or capture a handoff summary.
Why use it?
It keeps work records in multiple places and treats the local copy as the source of truth when a remote destination is unavailable.

Skill for Claude CodeCodex

Part of the ai-science-toolkit plugin — 21 skills, 4 agents shipped together

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/dgilford/ai-science-toolkit/worklog
Any agent
npx skills add dgilford/ai-science-toolkit --skill worklog
Clone the repo
git clone --depth 1 https://github.com/dgilford/ai-science-toolkit

Made for: Claude Code, Codex.

Or install ai-science-toolkit, the plugin that ships this one along with the rest of its 21 skills, 4 agents.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for worklog

README.md
[![agentmods](https://agentmods.dev/badge/skills/dgilford/ai-science-toolkit/worklog.svg)](https://agentmods.dev/skills/dgilford/ai-science-toolkit/worklog)
Your own site
<a href="https://agentmods.dev/skills/dgilford/ai-science-toolkit/worklog"><img src="https://agentmods.dev/badge/skills/dgilford/ai-science-toolkit/worklog.svg" alt="Measured on agentmods" height="20"></a>
Per session 61 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,659 The whole file, excluding the scripts and references it only reads on demand.
Security scan B 1 finding. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00061 $0.01659
Opus 5 $0.00030 $0.00830
Sonnet 5 $0.00012 $0.00332
Haiku 4.5 $0.00006 $0.00166

Measured 5d ago against content hash 2b70e81e6078, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade B, and why

worklog scanned grade B with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 5d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Reads agent configuration directoriesmediumAgent snooping

.claude/, .codex/, .gemini/ hold keys, settings and other credentials a mod has no legitimate need for.

`~/.claude/settings.json`, alongside the `ZOTERO_*` keys) — no personal
skills/worklog/SKILL.md · 118 lines

How it starts

The opening of the file, as written. The whole thing — 118 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Capture one work-log entry into three targets. Distinguish two failure kinds:

  • Misconfiguration is loud. If a target's env var is unset, that is a setup error — report it prominently so it gets fixed, don't skip it quietly.
  • Transient failure is best-effort. If a configured target is momentarily unreachable (server down, Notion MCP disconnected), never block the caller — note it and move on. The local mirror is the source of truth.

An end-of-day cloud routine summarizes the Notion raw entries into narrative sections, so this skill only appends; it never summarizes.

Compose the entry

Determine what to log:

  • If the caller (e.g. /handoff) or the user supplied text or a summary, use it.
  • Otherwise, summarize the current thread of work yourself: what got done, key decisions, and the top next action.

Keep it tight: summary is 3-5 short bullets; next is the top 1-3 next actions. Redact secrets — never put tokens, keys, passwords, or PII in the entry.

Configuration

Two targets are configured via env vars (set in the env block of ~/.claude/settings.json, alongside the ZOTERO_* keys) — no personal infrastructure is hardcoded in this skill. If a var is unset, surface it loudly as a setup error (worklog: <VAR> unset — this target is not configured; set it in ~/.claude/settings.json) so the gap gets fixed, rather than silently dropping the target:

  • WORKLOG_SSH_TARGETuser@host for the server cache (e.g. a Tailscale host).
  • WORKLOG_NOTION_HOME — the Notion "Work Journal" home page id (raw entries are appended to weekly sub-pages under it).

1 + 2 — Local mirror and server cache

Fill the two arrays with the composed content, then run:

DAY=$(date +%F)
PROJECT=$(basename "$(git rev-parse --show-toplevel 2>/dev/null || pwd)")
ENTRY=$(printf '{"ts":"%s","project":"%s","cwd":"%s","summary":%s,"next":%s}' \
  "$(date -Iseconds)" "$PROJECT" "$PWD" \
  '["bullet one","bullet two"]' \
  '["next action one"]')
# durable local mirror (.ai/ is gitignored) — always written
mkdir -p .ai && printf '%s\n' "$ENTRY" >> ".ai/worklog-$DAY.jsonl"
# best-effort ship to server cache (non-fatal; skipped if WORKLOG_SSH_TARGET unset)
if [ -n "${WORKLOG_SSH_TARGET:-}" ]; then
  printf '%s\n' "$ENTRY" | ssh -o ConnectTimeout=6 -o BatchMode=yes \
    "$WORKLOG_SSH_TARGET" \
    "mkdir -p ~/worklog/inbox && cat >> ~/worklog/inbox/$DAY.jsonl" \
    && echo "worklog: shipped to server" \
    || echo "worklog: server unreachable — kept local copy at .ai/worklog-$DAY.jsonl"
else
  echo "worklog: WORKLOG_SSH_TARGET unset — server cache not configured; set it in ~/.claude/settings.json (kept local copy at .ai/worklog-$DAY.jsonl)" >&2
fi

Read the full file on GitHub · 118 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 5d ago First seen · 118 lines · 61 tokens per session scan B 2b70e81e6078

Subscribe to this mod's changes

worklog is a skill published in the GitHub repository dgilford/ai-science-toolkit (62 stars, last pushed 16d ago), licensed MIT. It adds 61 tokens to every session and 1,659 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it B with 1 finding (reads agent configuration directories). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.