Projects
Open source work, experiments, and tools — organised by what motivated them, not just what they do. Full history at github.com/mattjoyce.
Recent
Autonomous agent orchestration service — runs a staged Frame/Plan/Act/Reflect loop with tool use, persistent workspace memory, and async execution
After building ductile, I wanted to experiment with agent workflow design by building a small agent I could trigger via API to pursue a goal. The Frame/Plan/Act/Reflect loop is deliberately explicit — I wanted to understand how agents decompose work before trusting them to automate anything real. AgenticLoop can query ductile for available plugins and compose them to solve tasks.
LLM boundary layer for safe, governed automation: scoped capabilities, policy routing, reliable job execution, and auditable plugin operations
Senechal taught me what I actually wanted: a personal service layer that an LLM could operate, not just call. Ductile is the redesign — Go instead of Python (simpler to deploy), with a plugin architecture so capabilities can be added without touching the core. The key design principle was treating the LLM as a first-class operator: commands like 'skills' return a plain-text narrative written for an LLM to read, so the agent can discover what's available and how to use it without any out-of-band documentation. --skills is the new --help. Built using Claude, Codex, and Gemini.
Discord bot companion for ductile
Started as a set of Discord slash commands to trigger ductile plugins directly. Building it revealed what I actually wanted: not a command interface, but a conversational one — message a bot, have it figure out which plugin to use. That's not a ductile problem, that's an agent problem. This will likely evolve into a Discord front-end for AgenticLoop.
AI skill to manage a markdown file based kanban workload
I needed a way to coordinate three LLMs while building ductile — shared task state they could all read and update without a database or a server. I'd had the idea for a text-based kanban for a while, so I used the opportunity to try it. What surprised me was how fluid it became in practice: any time a new idea or concern surfaced I could just say 'make a card for that', flick to another agent, ask it to critique a proposal, and have it append its comment to the card. The unanticipated flaw: you have to be disciplined about which git branch you're on when cards are created. A dedicated kanban branch is probably the right fix.
Matt Joyce's Claude Code plugin marketplace
A convenience repo for installing kanban-skill into Claude Code, with room to grow. The intent is to collect reusable skills as I build them — a personal marketplace that makes it easy to wire up new capabilities without reinventing the setup each time.
Also
- mcp-persona-sessions ★ 8 — MCP server for persona-driven AI sessions: interviews, guided reflection, role-play
- roundtable-consensus — Auditable consensus for AI/human teams - democratic decision-making with traceability
- change-of-mind — Intelligent LLM routing based on user persona and task characteristics
- mcp-construe ★ 9 — FastMCP server that loads personal context from Obsidian vaults using frontmatter filtering
- obsave ★ 20 — Go CLI to pipe content into Obsidian vault with frontmatter injection
- ifyoureallyknewme ★ 3 — Knowledge management system that accretes information about a person for LLM use
- senechal ★ 1 — Personal API - core service with MCP, Discord, and Google integrations
- gotok ★ 5 — Go CLI to count LLM tokens
- google-oauth-client — FastAPI-powered Google OAuth 2.0 client with automatic token refresh and SQLite storage
- unraid-rrdtool ★ 5 — Docker for rrdtools with configuration to produce graphs from data
- tree-signal — Lightweight treemap-based hierarchical message dashboard for Unraid/Docker