← All Projects
Devlog CLI — Agent-Aware Project Manager
A Python CLI that acts as a shared state engine between a developer and their AI agents — tracking goals, blockers, and journey entries across projects with git-backed persistence and portfolio export.
PythonTyper + Rich (CLI and terminal UI)python-frontmatter (structured Markdown storage)Pydantic (schema validation)Git (automatic audit trail via commits)
Portfolio Highlights
- →Built a Python CLI that acts as a shared state engine between a developer and AI agents, with git-backed persistence, per-project state isolation, and structured Pydantic data models.
- →Designed a double-ledger architecture: a central Markdown index for long-term history and per-project AGENTS.md files for live agent working memory.
- →Implemented a sanitized JSON export pipeline that strips internal entries and feeds a public portfolio frontend.
Stack
- Python
- Typer + Rich (CLI and terminal UI)
- python-frontmatter (structured Markdown storage)
- Pydantic (schema validation)
- Git (automatic audit trail via commits)
What I Built
- Double-ledger state engine: central index of project Markdown files + per-project AGENTS.md for live agent working memory.
- Per-project .devlog.json for isolated goal/handoff state — no global session clobbering across terminals.
- Pydantic-validated data model: Project, Hurdle, JourneyEntry with visibility (public/internal) and status fields.
- YAML frontmatter migration across 26 project files for robust, queryable storage.
- devlog export command: strips [INTERNAL] entries and outputs sanitized JSON for the portfolio frontend.
- Goal deduplication: setting the same goal twice is a no-op in the journey log.
- Commands: link, unlink, status, standup, goal, block, resolve, log, decide, decisions, handoff, reset, edit, list, show, export.
Key Decisions
- Central index stays source of truth; AGENTS.md is a generated working copy. Keeps portfolio cards (archived/offline projects) working without requiring live repos.
- Per-project state file (.devlog.json) instead of global session — multiple terminals in different projects can't clobber each other.
- [INTERNAL] tag is parsed structurally at read-time (Pydantic visibility field), not as a brittle string prefix at write-time.
- Git auto-commit on every write creates a queryable audit trail of the developer journey.
Development Timeline
- Build a CLI to bridge active development sessions and a long-term professional portfolio
- Implemented core commands: link, status, goal, hurdle, resolve, log, handoff
- Initial git-commit logic for non-repo paths
- Expand CLI with local state management (AGENTS.md)
- Implemented Double-Ledger State Engine: central index + local AGENTS.md for agent working memory
- Refactor devlog CLI for production standards: YAML Frontmatter, Pydantic validation, and Export engine
- Killed global session state; per-project .devlog.json now owns goal and handoff
- Added goal deduplication, devlog unlink, devlog edit commands
- Migrated all 26 project files to YAML frontmatter
- Rewrote parser with python-frontmatter and Pydantic models
- Build the portfolio frontend that consumes devlog export JSON
- DecidedUse git-backed markdown as storage
- ShippedPhase 1 features shipped: goal lifecycle, decisions log, typed journey
- DoneBuild the portfolio frontend that consumes devlog export JSON
- GoalImplement Phase 2: standup command + enrich AGENTS.md with decisions section
- Fixedtest blocker
- ShippedRenamed commands for semantic clarity: hurdle→block, get→show, clear→reset, Hurdles→Blockers across all 24 project files
- ShippedPhase 2 shipped: standup command aggregates goal, handoff, recent activity, decisions, and active blockers; AGENTS.md refresh now includes decisions and recent logs
- DoneImplement Phase 2: standup command + enrich AGENTS.md with decisions section