October 22, 2026
Podium v1.3.0: Mutual TLS, Session Replay and Spend Reporting
Until now, a Podium reporter sent its token in a header over plain HTTP. Anyone on the path between a laptop and the server could read it, and anyone who read it could use it. For a tool that carries your prompts, your plans and the answers you send back, that was the thing I most wanted to fix. v1.3.0 fixes it with mutual TLS, and the hard part wasn’t turning TLS on. It was changing a certificate without breaking everyone already holding the old one.
TL;DR
- Podium now makes its own certificate authority and gives each person one config file. The reporter proves who it is with a certificate on every connection, and the server checks it on every request. It has been tested end to end with no known security issues.
- The old token method still works as a fallback if the certificate path fails, so turning this on can't lock anyone out.
- A user asked for session recording and replay, and it's here, opt-in. Combined with forking a session, it shows what an agent was doing when something went wrong.
- Admin now has a Reporting group that shows where spend goes, per person and over time, with a projection built from past usage.
Why a certificate and not a better token
A token is a secret that sits in a header. Whoever reads the header owns it. A certificate works differently. The private key signs part of the TLS handshake and is never sent, so there is nothing in the traffic to lift and replay (IETF, “RFC 8446: TLS 1.3”).
With TLS on, the server makes its own CA and serving certificate and serves HTTPS on a second port. Each person gets a client certificate inside one generated config file, which holds the server address, the CA, their name, and their certificate and key. It’s the same idea as a kubeconfig, which carries the cluster’s CA and a user’s client certificate and key in one file (Kubernetes, “Kubeconfig (v1)”). Nothing gets installed on a person’s machine and nothing new is trusted system-wide.
The server maps the certificate to a person by fingerprint, and the report’s userName still has to match that person. Revoking the certificate, the token, or both are separate actions, and the server checks revocation on every request.
One workaround is worth knowing about. The reporter is a Claude Code mod, and the mod’s HTTP call accepts no CA or client certificate. So each session starts a small Node helper, and the mod talks to it over a Unix socket. It needs node on the machine, and macOS and Linux are the supported platforms. I will be submitting a request to Anthropic’s Claude Code team to make the required change to the harness so that the helper is no longer required. I also have an open issue to support Windows machines in an upcoming release.
Rotating a certificate without breaking anyone
Every certificate expires, and the CA is no exception. A reporter’s config file holds the CA, so the reporter trusts exactly the CA it was given. If I swap the CA on the server, every reporter holding the old one sees a server certificate it has no reason to trust. Telling everyone to download a new file on the same day isn’t a rotation plan.
The answer is a cross-signed overlap. A planned rotation makes a new CA and has the old CA sign a cross certificate for it. During the overlap the server trusts both CAs for client certificates, and it presents its new certificate with the cross certificate behind it. A reporter that holds only the old CA follows the chain through the cross certificate and still verifies the server. The old CA’s key isn’t kept, and nothing is signed with it after the cross certificate.
The cross certificate lasts 120 days, which is a reporter’s 90-day certificate plus its 30-day grace. Reporters renew their own certificates during that window and pick up the new CA as they do, so the overlap ends by itself. An Admin can retire the old CA early, for a leaked key for example. A laptop that stays asleep past both the cross certificate and the grace needs a reissued config, and the reporter tells the person so.
An Admin Certificates page shows what expires and when, and a pill in the header warns before it matters.
The fallback
This is new, and a security change that locks people out is a bad trade. So the token path doesn’t go away. Reporters over HTTP are an Admin switch. It’s on for an existing install and off for a fresh install that enables TLS. If the certificate path fails for someone, the token method they already had keeps working until the Admin turns it off. The token authentication will be deprecated in a future release, but for now, it stays put. Just be aware that any traffic sent using this method is over HTTP and is not secure.
Record a session, then replay it
A user asked for this one. When an agent does something you didn’t expect, the Activity feed has only the last 20 lines. A recording keeps all of it, from the moment you press Start: every prompt, what the model wrote, and each tool call with its whole input and result.
The replay is a page with a position slider and a Jump to next failure button. It never runs anything or sends anything to the session.
Forking a session, from v1.2.0, lets you question an agent without touching the original (my v1.2.0 post). Replay is the other half, because it shows what the agent did without asking it anything.
It’s the most Podium has ever kept of a conversation, so it takes three yes answers:
- The Admin turns on the Session recording feature flag, which needs the server’s auth on.
- The session’s owner, or an Admin, chooses to record that session.
- The reporter’s
sessionRecordingoption is on.
Everyone sees that a session is recording and who started it, and nobody can hide that. Secrets are replaced on the machine before anything is sent, which is best effort and not a guarantee. A recording is kept 6 hours by default, up to 7 days. The model’s thinking text isn’t captured, as that is a limitation of the Claude Code harness. If the mod API ever allows for this in the future, I will be sure to include it in a future update as it would be VERY useful for tracing and troubleshooting.
Where the spend goes
People told me that tracking spend matters to them, so Admin now has a Reporting group with six pages: Usage, Spend, People and groups, Sessions, Failures and Admin activity. Each takes a period and filters, and exports exactly what it shows as CSV or JSON.
The Spend page breaks cost down by person. Its projection takes a straight run rate over the last 7, 14 or 30 days and carries it to the end of the month or 30 days ahead, with the window and assumptions shown next to the number. With fewer than 7 days of history for someone, it says “Not enough history” and shows no number for them. Spend is estimated from tokens and a price table, so it isn’t a bill. Podium keeps daily summaries for 395 days, so a report can reach back further than the 30 days of detailed rows. The summaries hold counts, tokens, cost and names, and no session content.
Also in this release
- Docker support in
podiumctl, a feature improvement directly from the Docker engineering team! - Admins can keep the agent Activity feed for a set time, filter it on a Stored activity page, and delete it. It’s off by default.
- A Bash row in the Activity feed opens to the whole command and its output, with its exit code and whether the call is running, finished or never reported. Collecting output is an Admin flag and is off by default.
- An Orchestrator page has its own address
- Users can pin specific sessions on the fleet page, which is really useful if a user wants to keep a session in a specific location on the wall.
- The ability to collapse/open the Plan/Files object in the Orchestrator page, as well as the KPIs on the Kanban board.
- Improvements to the diff modal in the Orchestrator page, including wrapping of text.
- Tons of security improvements! If CodeQL and/or Sonar found it, it was fixed.
Try it
Podium is free and open source under the MIT license, at github.com/eengelking/podium. The v1.3.0 release page has the full changelog. If the certificate path doesn’t work on your setup, open an issue, and in the meantime the token method is still there.
Key Takeaways
- Reporters now authenticate with a certificate that can't be replayed from a header, checked on every request, with revocation separate from the token.
- Rotating the CA is safe because the old CA signs a cross certificate for the new one, and reporters keep verifying the server through the overlap.
- The token method remains as a fallback behind an Admin switch.
- Session recording is opt-in, needs three yes answers, redacts secrets on a best-effort basis, and pairs with forking to show what an agent did.
- Admin Reporting adds six pages and a spend projection from past usage, and stores no session content.