I built pmmate, a small supervisor agent that routes my PM work to Claude Code or Codex based on a few rules such as task scope/ complexity, how much tokens I have left with each ChatGPT/Claude subscription and informs me when something needed my attention.
As part of my work, I pay for two AI subscriptions, Claude and ChatGPT. On a busy day, I run several AI sessions open at once: one for communication related tasks such as newsletters, another for data analysis such as usage patterns, behavioral analysis and the last one for product work such as docs, prototype etc. I experienced several challenges with this approach. For example, when i switch between Claude or ChatGPT application because I am running low on subscription tokens, I lose all past learnings.
I wanted a workflow where my work can continue irrespective of what models I use. I wanted an agent that will know how to retain my work related memory, provide the necessary context to a specific model based on the task scope/complexity and automatically reflect on my past week and send me a retrospective. I wanted this agent to simply handover each task to the right model, watch it, and tell me only when something needed me.
Why I didn’t use firstmate as is
Initially, I explored firstmate, an open-source agent setup for running a crew of coding agents. You talk to one agent, the first mate. It starts workers in their own terminal tabs, supervises them, and brings back finished pull requests. Every worker gets its own git copy of the repo, so parallel workers never collide. This setup would work well if I am coding all day, but my PM work doesn’t live in git that way. So, I decided to build a small version for PM work and borrow only the ideas I needed.
I call my agent pmmate.
What pmmate does
I talk to pmmate. pmmate routes, supervises all my tasks and finally reports on the progress of each task, and never does the work itself.
Each task runs in its own herdr tab, so I can watch any worker.
A small script waits for a worker to write a status line, so the supervising agent spends no tokens while it waits.
Everything is saved on disk, so a restart picks up where it left off.
The new idea is lanes. Each of my ten workstreams is a lane. For example, my lanes typically cover a) product strategy and roadmap, b) product pricing, c) prototype related work, d) customer and broad newsletter communication, e) data analysis and so on. A lane runs one worker at a time, because workers in one workstream share a STATUS.md file that tracks what’s live. Different lanes run in parallel. Workers edit the real folders, so they see the decks and inputs.
How it splits work across my two subscriptions
For every task, pmmate picks a tool and a model and writes down why so we can audit and improve it later. The rules I have now are simple and short:
Hardest writing such as product strategy or pricing proposals and executive memos, choose Claude Fable 5.1 at high effort.
Standard writing, such as the newsletter, product updates and RFP answers, choose Claude Opus 5.5.
Mechanical edits, choose Claude Haiku 4.5.
Product mocks or prototypes or data analysis on customer support tickets, product usage patterns, etc, using tools such as Python/SQL then choose Codex with Luna.
Before launching a worker, my pmmate tool checks for the subsription status to see how many tokens remaining of each subscription’s weekly limit is left and then routes the task according to the above rules. If the preferred model is below 15%, then pmmate moves to the next option and tells me. If in case, I explicitly say “use codex”, then pmmate overrides my choice.
What I learned building it
Each worker takes one assignment and exits. If it has a question, it stops and pmmate asks me.
I gave up steering a worker mid-task in exchange for supervision that is simple and reliable.
Every commit uses a conventional commit message, so git log --oneline is the changelog.
A README and a handoff doc cover the rest, so a new agent can pick up the project with full context.
How it reflects and improves
Each finished task adds one line to an outcomes log: the lane, the model, the minutes, whether I accepted it or sent it back, and my correction in my own words.
A /retro command reads that log. It reports what went well, and it turns any correction I make twice into a proposed change to a skill or a routing rule, shown as a diff. I approve each change. Nothing edits itself.
I write the skills using Matt Pocock’s rules - one skill per repeated steering with the front matter setup so that the skill is loaded only when needed, clear and specific steps in the skill file and separate reference section.
I have setup so that pmmate’s six skills are only 9 to 12 lines each and a skill change counts as working only when the correction it targets is addressed in the next week’s retro.
What am I looking forward to
Route real code and data tasks through the Codex lanes, so the split isn’t all Claude.
Run /retro after a week and see which corrections repeat.
I expect to keep paying for both subscriptions. What I’m looking forward to evaluating is whether an agent can put my tokens to better use than how I did.
For all multiple subscribers, I am curious to know on how you all decide as to which AI subscription gets which task?
