Install
On macOS or Linux:~/.atatus/harness/config.json, and registers a command hook under the Stop and SessionEnd events
in Devin’s user config file. Each hook has a 30 second timeout.
If the config file already exists, the installer keeps your other settings and hooks and adds its own
entry once, so running it again does not create duplicates. Devin accepts comments in its config, and
the installer drops them when it rewrites the file. If the file cannot be parsed, the installer stops
without changing it.
What gets captured
Each trace is a three-level tree. Every model call is its own span, and the tools it requested sit inside it:
A trace reads as a sequence of model calls, each with its tools beneath it:
Tokens live only on the
LLM call spans. The root carries none, so adding up a trace counts every
token once. A figure for the whole interaction is the total across its model calls.session.id, so Atatus groups them as one session.
Cache read and cache write tokens are recorded when Devin reports them, and cached tokens are counted
inside the prompt total. A count that Devin reports as zero is left off the span.
When a generation has no visible text, the span shows its reasoning as the output so it still renders.
How the session is read
WhenStop fires, the hook finds the session and builds spans from what is new since the last time it
ran:
- It takes the project directory from
DEVIN_PROJECT_DIR, or the current directory when that is not set, and picks the most recently active Devin session whose working directory matches it. - It opens Devin’s
sessions.dbread-only and reads the assistant messages that carry usage metrics. Devin copies earlier messages as a conversation grows, so the tracer treats each request ID as one generation and sends it once, even when the copies appear under several rows. - It sends the new generations as one trace and records their request IDs so they are not sent again.
SessionEnd runs the same step, so a last turn that was interrupted is still sent. Spans are sent
straight from the hook process, so there is no separate collector or buffer service to run. A hook
failure never stops Devin: errors are written to the log and the hook exits cleanly.
Where things live
On Windows the hook config lives under
%APPDATA%, but the session database stays under your user
profile at %USERPROFILE%\.local\share\devin\cli.Known limits
- Tool results are empty. The session database does not expose a tool’s result while the session
is live, so a
Toolspan records the tool name and arguments but no output. - Tool timing matches the model call. A
Toolspan uses the start and end of the model call that requested it, so it does not show how long the tool itself ran. - One trace covers every new generation. Each
Stopsends all generations not yet sent for that session. The root shows only the latest prompt, so a trace that spans several prompts, such as the first one after you install into an existing session, groups them under that one prompt. - Sessions are matched by directory. If two Devin sessions are active in the same working directory, the most recently active one is traced.
- Content settings apply. Prompts, reasoning, tool arguments and tool content are only recorded when your logging settings allow them.
Uninstall
Stop and SessionEnd events in Devin’s config, drops an
event or the hooks key if it ends up empty, and leaves the rest of the file untouched. See
Uninstall for the full-wipe option.