Hi HN, I'm Marco. I built Maki while automating a weekly AI/data newsletter (Bowl of Data) and pulled it out into a standalone framework once the pipeline needed real orchestration: fetch dozens of sources, run several LLM passes over them (extraction, ranking, summarization, curation), then hand off to separate agents for the editorial writeup and the podcast script.
What it does:
Backends: Ollama (local), OpenAI, Anthropic, and raw HuggingFace Transformers behind one interface, so you can swap a local Gemma model for GPT or Claude without touching agent code.
Agents and workflows: role-based agents with memory and tool use; an AgentManager that runs multi-agent pipelines with dependency resolution, parallel batching, and checkpoint/resume for long jobs.
Plugins: 16 built-in tools (web fetch, file I/O, search, trading data, memory) with fail-closed permissions; every plugin declares which methods are allowed, and destructive ones need explicit opt-in.
Distributed: maki serve exposes an agent over HTTP with an SSRF-protected connector (DNS pinning), so agents calling agents doesn't turn into an open proxy.
Install:
curl -fsSL https://raw.githubusercontent.com/BowlOfData/maki/main/insta... | bash
MIT licensed, 888 tests passing in CI across Python 3.10 to 3.13. The newsletter is the main dogfooding target, so the framework gets exercised end to end every week, not just in unit tests.
Happy to answer questions about the design or the newsletter pipeline it grew out of.
What it does:
Backends: Ollama (local), OpenAI, Anthropic, and raw HuggingFace Transformers behind one interface, so you can swap a local Gemma model for GPT or Claude without touching agent code. Agents and workflows: role-based agents with memory and tool use; an AgentManager that runs multi-agent pipelines with dependency resolution, parallel batching, and checkpoint/resume for long jobs. Plugins: 16 built-in tools (web fetch, file I/O, search, trading data, memory) with fail-closed permissions; every plugin declares which methods are allowed, and destructive ones need explicit opt-in. Distributed: maki serve exposes an agent over HTTP with an SSRF-protected connector (DNS pinning), so agents calling agents doesn't turn into an open proxy.
Install: curl -fsSL https://raw.githubusercontent.com/BowlOfData/maki/main/insta... | bash
MIT licensed, 888 tests passing in CI across Python 3.10 to 3.13. The newsletter is the main dogfooding target, so the framework gets exercised end to end every week, not just in unit tests.
Happy to answer questions about the design or the newsletter pipeline it grew out of.