If something looks wrong, start here: the connector never blocks your work, and every problem it hits is logged to stderr with an [attribut] prefix.
It never breaks your session
The capture hook is fail-safe by design. On any error — bad input, an unreadable transcript, a network or validation failure — it logs to stderr prefixed [attribut] and exits cleanly. It never blocks or breaks your coding session, and it never silently swallows a problem: if something goes wrong, you will see it in the logs.
Is it working?
A successful run logs a line like this:
[attribut] posted <trigger> envelope for session <id> → HTTP <status>
If you see that, data is being sent.
Common issues
Nothing is being sent. Check stderr. A
[attribut] POST failed: …line points to a network or endpoint problem. Ano ingest token …line means no token is stored — re-runattribut connect(orattribut install) to store one.Just installed, but no data. Restart any running sessions so they pick up the hook. For Codex and Cursor you must also accept the one-time trust prompt the first time you run the tool. See "Supported tools & setup notes".
The hook path broke. The package must stay durably installed — the hook invokes the installed collector by absolute path. Do not run it via ephemeral
npx. Reinstall globally:
npm i -g attribut
Configuration
The connector reads these environment variables:
Variable | Purpose | Default |
| Ingest base URL ( |
|
| Dir holding device_uuid, token, cursor state |
|
| App origin for the |
|
|
| — |
| Override Claude settings.json target |
|
| Override Codex config.toml target |
|
| Override Cursor hooks.json target |
|
| Override Antigravity hooks.json target |
|
|
| — |
Related
