Engineering

Building Agentic Systems with Markdown Workflows

Agents are most useful when they are reliable and easy to reason about. A pragmatic approach is to keep the agent’s data and orchestration in plain Markdown files: readable, versioned, and editable by both humans and programs. Using Markdown as the primary substrate reduces accidental complexity, makes debugging straightforward, and lets deterministic code operate on a stable, auditable surface.

Treat Markdown as the canonical source of truth for prompts, examples, and structured notes. When behavior must be deterministic (for example, polling a provider or classifying documents), implement the deterministic parts in small scripts that operate over the Markdown corpus. Keep the LLM-dependent parts focused on summarization, idea generation, or enrichment — tasks that tolerate probabilistic outputs.

Design your agent to follow a clear separation of concerns: human-editable content in Markdown, deterministic processing and orchestration in small, testable scripts, and LLM calls isolated behind a thin adapter. This structure allows you to iterate quickly: change a prompt in Markdown, run deterministic tests, and observe the effects without hunting through compiled code or tangled state.

Organize notes with explicit metadata and small conventions rather than heavy schema machinery. Lightweight frontmatter or simple tag lines are enough to let scripts find and filter relevant content. Avoid complex runtime validations; instead, prefer clear early guard clauses in the scripts and fail-fast on invalid conditions so problems are visible and fixable immediately.

Use Markdown workflows to enable human-in-the-loop adjustments. When an LLM produces an output that needs polishing or verification, present it as a draft Markdown artifact that a human can edit. This pattern keeps responsibility where it should be: deterministic code ensures structural correctness and auditability, while humans apply taste, domain knowledge, and final quality checks.

Automate enrichment and indexing as separate steps. For example, run a nightly process that extracts summaries and keywords into a lightweight index file, and then let deterministic search algorithms do retrieval. This avoids embedding index state inside LLM prompts and preserves repeatability for testing and debugging.

Finally, version-control everything. Markdown files, enrichment scripts, and small orchestration utilities should live together under git. This makes rollbacks, code review, and collaboration natural, and gives you a reliable audit trail when investigating unexpected behaviors. The combination of plain-text content and small, focused code is a practical, resilient approach to building personal agentic systems.