Only Python 3.11+ is required. No npm, no build, no external services.
The whole system runs on your machine. You generate a data file, start a tiny Python server, and open a browser. That is it.
This matters because the project is intentionally fragile in one direction: it does not ask you to trust a cloud service, create an account, or install a package manager. Your tasks stay in data.json; your edits stay in your browser.
Think of it like… a paper notebook that happens to refresh itself from the notes already scattered on your desk. The notebook is not magic; it is just organized.
collector.py uses only the Python standard library. It walks docs/ and sessions/, runs regexes over Markdown, and emits a typed dataclass list. server.py uses http.server with two extra routes: /agents returns JSON, and /events streams SSE for live status.
The server binds to port 7321 and serves static files from the dashboard folder. It also exposes an /agents endpoint that checks running processes.
def active_agent_status() -> list[dict]: procs = subprocess.run(["ps", "-eo", "comm"], capture_output=True, text=True).stdout agents = [] for name in ["claude", "codex", "grok", "kimi"]: running = name in procs.lower() agents.append({ "name": name, "status": "active" if running else "idle", "last_seen": datetime.now(timezone.utc).isoformat() if running else None, }) return agents
open ~/Documents/Projects/appfy/organizer-loop-engineering/dashboard/server.py
Open a terminal and run the three commands below. The dashboard should appear in your default browser.
cd ~/Documents/Projects/appfy/organizer-loop-engineering python3 dashboard/collector.py python3 dashboard/server.py open http://127.0.0.1:7321
server.py says the port is in use, set ORGANIZER_PORT=7322 and try again. In the next lesson you will learn how to read the dashboard once it is open.