Story

Ochat – reproducible, diffable LLM workflows in a single Markdown file

dakotamurphyucf Thursday, February 19, 2026

I built Ochat, a toolkit for building AI agent workflows out of a small set of primitives.

The core primitive is ChatMarkdown (ChatMD): a single .md file is both:

the prompt/program (model config, tool allowlist, instructions, context), and the auditable transcript (assistant replies + tool calls + tool outputs) The part that feels most powerful in practice is that this simple building block scales: with good prompting + a curated tool set you can build lots of workflows, and then package them as prompt packs by mounting other prompts as tools (“agent-as-tool”). That lets you assemble Claude Code/Codex-style “agent apps” as just a folder of .md files.

High-leverage built-ins (especially for coding workflows):

apply_patch (repo-safe atomic edits) read_file / read_dir (safe grounding in local files) webpage_to_markdown (web ingestion + GitHub blob fast-path) local retrieval: index_markdown_docs + markdown_search code retrieval: index_ocaml_code + query_vector_db import_image (vision inputs) Extensibility: beyond built-ins, you can add narrowly-scoped shell wrappers, and (optionally) import external tools via MCP. MCP isn’t the point of the project, but it’s useful when you want to reuse existing tool servers.

You can run the same prompt file via:

chat_tui (interactive terminal UI; persistent sessions; branching/export; manual context compaction) ochat chat-completion (scripts/CI) mcp_server (expose prompts as MCP tools) Caveats: provider support today is OpenAI-only; project is research-grade and evolving quickly.

Repo <https://github.com/dakotamurphyucf/ochat>

Demo <https://youtu.be/eGgmUdZfnxM>

If this resonates: stars help a lot, and I’d love early adopters + contributors (prompt packs, examples, docs, tool integrations).

Minimal snippet (prompt pack orchestrator + optional MCP tool):

  <config model="gpt-5.2" reasoning_effort="medium" temperature="0"/>

  <!-- core built-ins -->
  <tool name="read_dir"/>
  <tool name="read_file"/>
  <tool name="apply_patch"/>
  <tool name="webpage_to_markdown"/>

  <!-- optional: import an external tool via MCP -->
  <tool mcp_server="stdio:npx -y brave-search-mcp" name="brave_web_search" />

  <!-- prompt-pack tools (agents as tools) -->
  <tool name="plan"   agent="prompts/pack/plan.md" local/>
  <tool name="code"   agent="prompts/pack/code.md" local/>
  <tool name="review" agent="prompts/pack/review.md" local/>

  <developer>
  You are the orchestrator. Call plan first.
  Keep edits small. Before apply_patch: explain the diff and wait for confirmation.
  </developer>

  <user>
  Add a Quickstart section to README.md.
  </user>

1 0
Read on Hacker News