I’ve been working primarily with Claude on recent projects. With Astra’s launch, it felt overdue to make my Obsidian vault, agents and skills usable by both Codex and Claude (with room for other models later). Bottom line, I wanted to bring another collaborator into the same projects without maintaining two versions of artifacts like skills.
I spent a few days going back and forth with Fable, my Claude collaborator, and Astra, removing Claude-isms, tool references and assumptions that only held in Anthropic-land, and checking what actually worked in each client.
The biggest unlock (and my main “I wish I’d known..”), was asking Claude Code to invoke Codex CLI directly. Until then, I was courier: “Hey, have a look at what the other agent wrote in this markdown file and please respond.” Then they would take turns building and reviewing each other’s work, playing the Perfection Game: checking correctness, saying what was worth keeping, proposing specific improvements.
Claude and Codex found mistakes in each other’s changes. They also found tests that passed without testing what we thought they tested.
A few things I learned that might help if you’re bringing a second AI collaborator into your own workspace:
- Give both agents one shared contract and skill source. Keep common rules together, then explicitly map each client’s tools and what to do when a capability is unavailable.
- Test ordinary tasks in fresh sessions. Ask each agent a normal project question without telling it which skill to load; check its sources and behaviour. For AquaRac (my swim meet photography), that included preserving some important details like confirming must-shoot swimmers.
- Use one agent as writer and another as independent reviewer. Have the reviewer inspect the actual changes and rerun the checks. I already have a skill called “fren-pair” that keeps the main thread as orchestrator and delegates to a builder and a reviewer/critic. The critic can also play the Perfection Game on the builder’s work. It keeps the detailed work out of the main conversation and gives meaningful changes another pair of eyes. The cross-client handoff is the next piece I want to bottle up.
- Ask what each check actually proves. A lint pass only covers defects the lint can recognise. Deliberately break a fix and confirm its test fails; we found a test that passed even with the fix absent.
- Apply exactly what was reviewed. Record hashes of approved artifacts and verify them before applying. Our vault automation changed a staged proposal; exceptions should also be tied to the particular bytes reviewed.
- Keep the record honest about what is done. Update decisions when changes take effect, preserve a recovery route, and name any untested step. In my case, to markdown in the Vault, avoiding Claude-isms like Memory. We closed with one rollback discovery check explicitly outstanding.
Hope this helps others in a similar position. Try giving the gist above to your own agents.
The cover pic is some astrophotography I did a few years ago: a couple of mighty trees collaborating against the same night sky. Feels appropes.
Publishing this post with Astra surfaced a network-permission setting we’d missed. One config change and a restarted session, and it went live through the WordPress API using our freshly migrated side-quest-publisher skill.
Now onto bigger stuff. Not Millennium Problems just yet, but big in my little world.