Where your time went
106h across 33 projects26-week activity
Click a week to zoom inCoding agents write a one-line report each time they finish something. Factory Log turns those reports into a timeline of your day and your week.
factorylog to report their work.What you worked on
9:15 AM – 5:20 PMEvery task
Newest firstWhat you worked on
8:06 AM – 8:56 PMBy project
One sentence each, written locallyWhat you worked on
Click a day to open itWhere the time went
What shipped
46 completedWhere your time went
106h of active time across 33 projects26-week activity
30-day project activity
What you worked on
Click a day to open itWhere the time went
What shipped
4 completedYour week at a glance
One row per day, one bar per work session, colored by project. Next to it, where the time went and what shipped.
Get startedThree steps to start.
Agents don't talk to the app directly. Each one runs a small command, factorylog, which adds a line to a log file on your Mac — and the app shows the new line a second later. Setup comes down to two things: the agent can run factorylog, and it knows when to.
Install the command-line tool
The app copies factorylog to ~/.local/bin, then asks your login shell whether it can find the command there — because agents get their PATH from that shell. On zsh, one click adds the folder to ~/.zshenv.
Connect your agent
For Codex, one click adds a short instruction to ~/.codex/AGENTS.md and puts the log folder in Codex's sandbox, so the CLI is allowed to write there. For Cursor, it adds a rule to ~/.cursor/rules. Any other agent gets the same instructions on the clipboard.
Ask an agent to build something
Agents report work that changes something — a fix, a feature, new docs. Questions and explanations aren't logged. The first report lands a second later, and the welcome screen turns into your day.
What an agent runs — start, report, archive:
# the agent starts a task factorylog start \ --title "Add account settings" \ --summary "Started the settings screen." \ --source cursor # …then reports each result factorylog report --task-id task_7f3a \ --summary "Added profile editing and validation." # …and archives it when the work is done factorylog archive --task-id task_7f3a \ --summary "Finished settings and verified the build."
Every command returns JSON, and you can call them yourself:
$ factorylog report --task-id task_7f3a --summary "Added validation." { "event": { "kind": "task.reported", "taskID": "task_7f3a", "project": { "name": "storefront" }, "summary": "Added validation.", "timestamp": "2026-10-01T09:41:00Z" }, "store": "~/Library/Application Support/Factory Log/events.jsonl" }
Your day, written by the agents that did it.
Five projects in a day is hard to reconstruct at 7pm. Factory Log keeps the record for you, in your own words — the agents'.
Today and yesterday
Each day opens with your active time, the projects you touched and the tasks agents finished, plus a timeline with one lane per project and a bar per session.
Every task, once
The log lists each task with its latest report, newest first. Tasks still open say Doing, and you can close one with a final outcome.
A sentence per project
Finished days get a one-line recap per project, written by a local Ollama model if you have one. Without it you see the task titles instead.
Week at a glance
One row per day, one bar per session, colored by project. Next to it a donut of where the week went and the list of what shipped.
The long view
Insights shows time by project over 7, 30 or 90 days or all time, a 26-week heatmap, and the busiest projects.
Live
The app watches the log, so new reports appear on their own. There is no refresh button.
Hide what doesn't matter
Right-click a project to hide it. Work done inside an agent's own folder, like ~/.cursor or ~/.codex, never shows up.
Keyboard first
⌘1 to ⌘4 switch between Today, Yesterday, Week and Insights. Arrows move inside a day or between weeks, Esc steps back out.
The log is a text file.
No database, no server, no sync. Every report is one line of JSON in events.jsonl, and history is only ever appended to.
- Several agents can write at the same time: each write takes an exclusive lock, re-reads and validates the log, appends one line and fsyncs it.
- A line cut short by a crash is skipped, and a malformed record is reported by line number while the rest of your history stays readable.
- A file-system watcher reloads the app the moment the log grows — that's why reports land live.
- Correcting something means adding a report, never editing history. Closing a task adds an archive line, and a task open for 24 hours is closed for you.
- Optional compaction rewrites the detail file atomically after at least 30 days, keeping daily totals and every open task.
{
"schemaVersion": 1,
"id": "01JQ8Z…",
"taskID": "task_7f3a",
"timestamp": "2026-10-01T09:41:00Z",
"kind": "task.reported",
"project": {
"name": "storefront",
"path": "/Users/you/www/storefront"
},
"taskTitle": "Add the checkout summary",
"source": { "tool": "codex" },
"summary": "Added the checkout summary and verified the totals."
}
Read the whole history with cat. Time is estimated from when reports arrive — sessions of updates at most 45 minutes apart, plus 5 minutes of lead-in each — so two agents in parallel count toward both projects.
Codex, Cursor, Claude Code, Gemini CLI — or anything with a shell.
Any agent that can run a command can report. Paste the instructions where your agent keeps its standing rules, and it starts writing reports.
One-click for the big two
Codex: adds the instruction to ~/.codex/AGENTS.md and the log folder to ~/.codex/config.toml, so Codex's sandbox lets the CLI write. Cursor: adds a rule to ~/.cursor/rules. The same buttons live in Settings → Integrations for when you add an agent later.
- Claude Code reads
~/.claude/CLAUDE.md - Gemini CLI reads
~/.gemini/GEMINI.md - Most other agents read an
AGENTS.mdat the root of each project - Sandboxed agents need write access to
~/Library/Application Support/Factory Log
What the instruction tells an agent
Short and strict, so the log stays useful and safe:
- Start one task when a meaningful piece of work begins, keep the returned task ID
- Report after a meaningful result, archive when the requested work is finished
- Write short factual summaries: what changed, or what was verified
- Never include source code, diffs, command output, secrets, scores or guessed progress
- Keep a task open on a blocker and name the blocker instead of archiving it
Two optional importers fill the gap before you installed it: one turns runs of your Git commits into tasks, the other reads an older plain-text work log. Both are local, both support --dry-run.
Everything stays on this Mac.
Factory Log never reads your code.
There are no accounts, no analytics, no advertising and no hosted service. It doesn't read your source, your Git history, your diffs or your terminal output — only the reports your agents choose to write.
- Your history lives in
~/Library/Application Support/Factory Log/events.jsonl - The app goes online in exactly two cases: a once-a-day update check, and an optional local Ollama model for the day recaps
- Nothing is uploaded: no logs, no event history, no crash reports, no configuration
- The agents' instructions forbid code, diffs, command output and secrets in reports
- $FLOG changes nothing about this: buying a skill pack never asks for your log, and your work is never linked to a wallet
Files it may touch
~/.local/bin/factorylog— the CLI~/.codex/AGENTS.md,~/.codex/config.toml— Codex~/.cursor/rules/factory-log.mdc— Cursor~/.zshenv— only if your shell can't find the CLI
Each file is changed only after you press the matching button, in place, so a dotfile that is a symlink stays one.
Runs on macOS 15 Sequoia or later.
One universal app for Apple silicon and Intel Macs. Free and open source — the app, the CLI and the log format. No licence key, no seat count, no account.
Get Factory Log
Download the app, drag it to Applications, and let the first-run screen install the CLI and connect your agent for you.
Builds are published from @tryfactorylog while the download host is being provisioned. Following there is also how you hear about new skills first.
First launch, one Gatekeeper prompt
The app is ad-hoc signed rather than notarized, so macOS asks once. Click Done, then allow it in System Settings → Privacy & Security → Open Anyway. Or drop the quarantine flag in Terminal and open it:
xattr -dr com.apple.quarantine "/Applications/Factory Log.app"
The same command fixes a message saying the app is damaged. Gatekeeper does not need to be turned off. On a locked-down work laptop you can keep the app in ~/Applications and run the command against that path.
$FLOG pays for the skills. Nothing else.
The app is free and always will be. $FLOG is the currency for the optional skill packs that teach your agents how to report the way you want — and it buys you a better rate on every pack the longer you hold.
The contract address is posted here and on @tryfactorylog the moment the token goes live. Until then, treat any other address claiming to be $FLOG as a fake — we will never DM you one.
Tiers are read from the wallet you pay with. Hold the balance at the moment you buy; there is no staking, no lock-up and nothing to claim.
What $FLOG is actually for
- Buy skill packs. Every skill in the catalog is priced in USD and payable in $FLOG — one wallet, one transaction, the pack lands in your library.
- Hold for a better rate. Scout, Builder and Factory tiers take 20%, 40% or 100% off your basket.
- Unlock the bundles. Builder includes the Pro Pack; Factory includes the entire catalog, every future skill included.
- First access. New skills and new agent integrations are announced on X and shipped to holders first.
- Never gatekeeping the app. The macOS app, the CLI and the log format stay free and open source. $FLOG cannot unlock a feature that should be free, because there isn't one.
$FLOG is a community token used for these purchases. It is not a security, it pays no dividend, and holding it is not an investment promise. Nothing on this page is financial advice.
Teach your agents how to report.
A skill is a small, versioned instruction set your agent loads: what to log, when to log it, and what never to put in a report. Drop it in, and the log finally reads like a work history instead of a stream of half-sentences.
Release Notes
Turns a day of reports into release notes, grouped by project, with the boring refactors left out.
Changelog Keeper
Keeps CHANGELOG.md in step with what actually shipped, in semver order.
Standup Digest
A morning summary of yesterday's work per project, ready to paste into standup.
Questions people actually ask.
Is Factory Log really free?
Yes. The macOS app, the factorylog CLI and the log format are free and open source, with no licence key and no account. The only optional paid thing is the skill pack catalog, and you can pay for that with a card or with $FLOG.
Does it read my code, diffs or terminal?
No. Factory Log reads one file: the log your agents write. It never opens your source, your Git history, your diffs or your terminal output. The instructions it installs tell agents never to put code, diffs, command output or secrets in a report.
Where is my data, and can I read it?
In ~/Library/Application Support/Factory Log/events.jsonl — newline-delimited JSON, one line per report. You can read the whole history with cat, move it, or back it up. There is no server to sync with and nothing is uploaded.
How does it know how long I worked?
It doesn't track you — it infers. Agents report outcomes, not hours, so Factory Log measures the gaps between reports inside a project: reports at most 45 minutes apart form one session, and each session gets 5 minutes of lead-in. Treat the numbers as a map of where the time went, not billing-grade time tracking.
Which agents work with it?
Codex and Cursor have one-click setup. Claude Code, Gemini CLI and anything else that can run a shell command work by pasting the same instruction block — into ~/.claude/CLAUDE.md, ~/.gemini/GEMINI.md, or an AGENTS.md at the root of a project.
My reports aren't showing up. What now?
Check that a new Terminal window finds the command with command -v factorylog; if it prints nothing, the CLI folder isn't on your PATH. Then press Send a test report in Settings → Integrations — if that shows up in Today, the problem is on the agent's side, usually a session that started before the instructions were installed. The install guide walks through all five checks.
What does $FLOG do?
$FLOG is how you pay for skill packs, and how you get a better rate on them: hold 5,000 for 20% off, 50,000 for 40% off plus the Pro Pack, or 250,000 for the whole catalog. It never unlocks anything inside the app, because the app is free.
Do I have to use $FLOG?
No. You can use Factory Log forever without ever touching a wallet, and pay for skills with a card if you buy any at all. The token exists for people who want the holder rate and the first look at new skills.