How do I compare usage between Claude Code and OpenHands on my team?
Rius lets you compare Claude Code and OpenHands in one workspace, using the Users page, the trace list and the Agents page. Send both to the same workspace, then tell them apart by the developer shown on each trace and by the agent. Compare tokens and cost only where both agents report them, because OpenHands has gaps that Claude Code does not. Trace counts and failures compare across both.
How it works
Both agents send OpenTelemetry traces, and the API key that sends a trace decides which workspace it lands in. Claude Code uses the Rius plugin, and OpenHands sends with three environment variables. Both appear side by side once they share a workspace.
The two agents define a trace differently, which matters when you compare:
- Claude Code: one trace is one session, with its model calls, tool calls and subagents. The Agents view shows it as an agent named
claude-code, or yourRIUS_SERVICE_NAME. - OpenHands: one trace is one conversation, with model calls, tokens, cost and tool calls.
The Users page lists each developer with Traces, Failed traces and Cost for the selected window, 7 days by default. Claude Code developers show by the email they signed in with, which needs plugin 0.6.2 or later. OpenHands developers show by the user_id you pass when you create the conversation. The trace list has a Sent by column that names the owner of the key that sent each trace, and you can click it to filter to one developer.
Set it up
- Pick one workspace. Use the team workspace for both agents. A workspace admin invites teammates, and each developer picks that workspace when signing in.
- Connect Claude Code. Each developer installs the plugin, runs
/rius:login, picks the team workspace, then runs/rius:enable-herein each repo to trace. Follow Track Claude Code usage and cost across a team for the full steps. The Claude Code plugin page covers sign-in and troubleshooting. - Connect OpenHands. Create an API key for the same workspace under Settings → API keys, with Send telemetry (
ingest). Set these three variables where OpenHands runs, with your key in the header:
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://ingest.eu.console.rius-glassflow.com/v1/traces
export OTEL_EXPORTER_OTLP_TRACES_PROTOCOL=http/protobuf
export OTEL_EXPORTER_OTLP_TRACES_HEADERS="Authorization=Bearer%20ri_..."- Pass a user for OpenHands. Give
user_idwhen you create the conversation, so each developer gets a row on Users. Pick values you can match to the sign-in emails that Claude Code shows. Without it, the conversations have no developer to group by. - Check both arrive. Open the trace list view in the console, run one session in each agent, and look at Sent by and the Users page. OpenHands Cloud cannot send to Rius, so use the OpenHands SDK.
Tracing is off until each developer turns it on, per folder for Claude Code and by setting the variables for OpenHands.
What you get
One workspace shows both agents, so you can sort Users by Cost or filter the trace list to one developer and see each agent’s sessions or conversations.
These figures compare fairly:
- Trace counts and failed traces. Treat them as activity per developer, not as identical units, since a Claude Code session and an OpenHands conversation are not the same size.
- Tokens and cost, for traces that have them. Cost is a list-price estimate in US dollars from LiteLLM’s public model-price catalog, worked out from token counts at API rates. On a Claude Pro or Max subscription it measures usage, not what you pay.
These figures do not compare cleanly:
- OpenHands tokens and cost have gaps. There is no token data for OpenAI Responses API models, or for the web app’s streamed calls. Those conversations show no tokens or cost, so OpenHands totals can read lower than real use. Compare token and cost only across traces that report them, such as OpenHands SDK runs on supported models against Claude Code.
- Claude Code subagents count in the session. They get their own spans with their own tokens, and in long sessions they can account for more than half of all tokens.
The Users and Agents figures count a Claude Code session once it has ended. A session that never ends cleanly, because Claude Code crashed or was killed, is never counted there. The trace list shows it while it runs.
Content differs too. A Claude Code folder sends prompts and replies only if the developer enabled content for it, while OpenHands always sends them. Everyone in the workspace can read what is sent, so agree which repos send content.
When something else fits
- If you only need to know who drives Claude Code spend, Track Claude Code usage and cost across a team is the shorter route.
- If most of your OpenHands use is the web app or OpenAI Responses API models, compare trace counts and failures only, because those conversations carry no cost.
- If you need billed amounts rather than list-price estimates, use your provider’s own invoice. Rius does not model negotiated or subscription pricing.