JavaScript is off, so the screen carousel stays on its first slide and the charts in the mockups are simplified. Everything else on this page works without it.

Factory Log

Factory Log

See what your coding agents did, and where your time went.

Free and open source · macOS 15 and later

Three steps to start.

Install the CLI, connect Codex or Cursor, then let your agents work.

Reports land live.

When an agent finishes something, it shows up a second later.

What you worked on.

A lane per project, a bar per session, and how long each one took.

Your week at a glance.

Every day side by side, where the time went, and what shipped.

Where the time goes.

Weeks of work by project. Click one to see everything you did there.

Empty, but never blank.

Before the first report, each screen previews what it will show.

Factory Log
TodayYesterdayWeekInsights
Insights
The long view
Where your time goes over weeks and months, and which projects carry the momentum.

Where your time went

106h across 33 projects
106hactive
storefront78h · 73%
billing-api3h 36m · 3%
docs-site3h 8m · 3%
mobile-app3h · 3%
infra2h 9m · 2%
7 days30 days90 daysAll time

26-week activity

Click a week to zoom in
Factory Log
TodayYesterdayWeekInsights
Welcome to Factory Log
See what your agents did for you

Coding 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.

✓
Install the command-line tool
Agents run factorylog to report their work.
Reinstall
✓
Connect your coding agent
Asks the agent to report what it finished.
Codex · ConnectedConnect Cursor
3
Ask an agent to build something
Its first report lands here a second later.
✦ Waiting for the first report…
Another agent? Copy the instructions
🔒 Everything stays on this Mac. Factory Log never reads your code.
Factory Log
TodayYesterdayWeekInsights
Today · Thursday, October 1
What I did today
2h 41m of active work across 5 projects and 7 tasks. 3 still open.
SummaryLog
◔
2h 41m
Active time
▣
5
Projects
✓
7
Tasks
◑
3
Still open

What you worked on

9:15 AM – 5:20 PM
storefront1h 16m
billing-api40m
docs-site20m
mobile-app20m
infra5m
9 AM11 AM1 PM3 PM5 PM6 PM

Every task

Newest first
Add the checkout summary 4 minutes ago
Wired the totals into the summary step and checked the empty basket path.
storefront · codex
Audit the webhook retries Doing41m
Found two duplicate deliveries; waiting on the queue change before closing it.
billing-api · cursor
Factory Log
TodayYesterdayWeekInsights
Yesterday · Wednesday, September 30
What I did yesterday
8h 1m of active work across 5 projects and 22 tasks.
SummaryLog
◔
8h 1m
Active time
▣
5
Projects
✓
22
Tasks
◑
22
Completed

What you worked on

8:06 AM – 8:56 PM
storefront5h 22m
billing-api1h 11m
docs-site36m
mobile-app26m
infra26m
8 AM10 AM12 PM2 PM4 PM6 PM8 PM

By project

One sentence each, written locally
storefront5h 22m Updated the catalog views, added the checkout summary and retired two prototype pages.
billing-api1h 11m Fixed the retry path on webhook deliveries and added the invoice export endpoint.
Factory Log
TodayYesterdayWeekInsights
Week of September 28
This week
19h of active work · 4 active days · ↗ 5% vs prior week
‹›

What you worked on

Click a day to open it
Mon 281h 56m
Tue 297h 6m
Wed 308h 1m
Thu 12h 41m
Fri 2—
Sat 3—
Sun 4—
8 AM10 AM12 PM2 PM4 PM6 PM9 PM

Where the time went

19hactive
storefront11h · 58%
billing-api3h 8m · 16%
docs-site56m · 5%
mobile-app54m · 5%
infra50m · 4%

What shipped

46 completed
Add the checkout summaryWired the totals into the summary step · Thu
Add invoice exportsCSV and PDF exports behind one button · Thu
Remove the old catalog pageDeleted the page, its OG image and the sitemap entry · Wed
Retire the retry flagTurned the flag on by default and removed the branch · Tue
Factory Log
TodayYesterdayWeekInsights
Insights
The long view
Where your time goes over weeks and months, and which projects carry the momentum.

Where your time went

106h of active time across 33 projects
106hactive
storefront78h · 73%
billing-api3h 36m · 3%
docs-site3h 8m · 3%
mobile-app3h · 3%
infra2h 9m · 2%
other 28 projects1h 37m · 2%
7 days30 days90 daysAll time

26-week activity

30-day project activity

Factory Log
TodayYesterdayWeekInsights
Week of September 21
Last week
27h of active work · 7 active days
‹›

What you worked on

Click a day to open it
Mon 214h 5m
Tue 224h 30m
Wed 233h 30m
Thu 244h 15m
Fri 252h 50m
Sat 264h 5m
Sun 274h 30m

Where the time went

27hactive
billing-api12h · 45%
storefront5h 55m · 21%
docs-site5h 5m · 18%
mobile-app4h 10m · 15%

What shipped

4 completed
Add the checkout summaryMade progress on add the checkout summary · Sun
Polish the settings screenMade progress on polish the settings screen · Sun
Add invoice exportsMade progress on add invoice exports · Sun
Preview

Your 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 started
Local-first — one text file on your Mac No account, no sign-in No analytics, no telemetry Never reads your code, diffs or terminal
How it works

Three 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.

1

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.

2

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.

3

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"
}
Features

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.

Under the hood

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.

Integrations

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.md at 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.

Privacy

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.

Download

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.

The token

$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.

$FLOG
Contract address
TBA — drops at launch
Solana Symbol $FLOG Status: pre-launch Verified link posted on X only

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.

Scout5,000+ $FLOG 20% off every skill pack, paid at checkout in $FLOG.
Builder50,000+ $FLOG 40% off every pack, plus the whole Pro Pack unlocked for free.
Factory250,000+ $FLOG Every pack in the catalog included, and new skills land in your library first.

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.

Skills

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.

FAQ

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.