Engaged coding time across AI agents — not agent uptime.
Dwell estimates how long you were in the loop: consecutive human prompts with gaps ≤ a configurable idle threshold (default 5 minutes). A longer gap ends the session; the next prompt starts a new one. Ten agents running for two hours while you’re AFK still counts as zero for you.
Fictional sample projects only (northstar-api, garden-app, …) — generated with scripts/generate_demo.py, not real user data.
| Dashboard | Settings |
|---|---|
![]() |
![]() |
| Agent | Local data |
|---|---|
| Grok | ~/.grok/sessions/ |
| Claude | ~/.claude/projects/ |
| Command Code | ~/.commandcode/ |
| Droid (Factory) | ~/.factory/ |
| Reasonix | ~/.reasonix/ |
| Pi | ~/.pi/ |
| OMP | ~/.omp/ |
| OpenCode | ~/.local/share/opencode/opencode.db |
Optional: Orca’s orca-stats.json only contributes secondary “agent wall” stats if present. Orca is not required.
skills/dwell/SKILL.md
Symlink into Claude / OpenCode / etc. skill directories so an agent can enable the tools you use and add new collectors when needed.
Python 3.10+ (stdlib only — no pip deps).
git clone https://github.com/edsmkt/dwell.git
cd dwell
python3 dwell.py --serve
open http://127.0.0.1:7432/User data lives in ~/.dwell/ (never committed): settings, categories, generated HTML/JSON, history.
# Generate report once
python3 dwell.py
# Local dashboard (required for Settings + category edits)
python3 dwell.py --serve
python3 dwell.py --serve --port 7432
# Override idle gap for this run only
python3 dwell.py --idle-minutes 5- Range — 7d / 14d / 30d / 90d / 1y / custom
- Chart — engaged hours by day, stacked by category
- Projects — engaged time, prompts, agent tags
- Click a project — daily history + session titles
- Category dropdown — assign work / personal / …
- Settings — agents on/off, idle minutes, add/edit/delete categories
~/.dwell/settings.json:
{
"idle_minutes": 5,
"agents": {
"grok": true,
"claude": true,
"command-code": true,
"droid": true,
"reasonix": true,
"pi": true,
"omp": true,
"opencode": true
}
}Or use Settings in the UI (server mode).
Defaults: Work, Personal projects, Productivity, Learning, Uncategorized.
In Settings → Categories: add, recolor (swatch), or delete (×; projects fall back to Uncategorized). Or edit ~/.dwell/categories.json.
Demo data is not shipped for users. Maintainers can regenerate fictional sample HTML locally (gitignored):
python3 scripts/generate_demo.py
python3 -m http.server 7433 --directory docs/demo
# then capture docs/screenshots/*.png| Situation | Counts? |
|---|---|
| You reply within idle gap | Yes — whole gap |
| You leave for 2 hours | No |
| You come back and chat again | New session |
| Agent runs while you’re gone | No |
Everything is local. Dwell only reads agent session files on your machine and writes under ~/.dwell. No network calls except your optional local server on 127.0.0.1.
MIT — see LICENSE.

