First, set PROVELY_DECISION_LOG and run the agent again. An empty log has three usual causes: no plugin applied, the posture only records, or no check found a fault.
The instance does not start. Why?
Most often the key is missing. The error is:
Set api_key or bearer_token. Use PROVELY_API_KEY or PROVELY_BEARER_TOKEN.
Get your API key: sign in at app.provely.sh/account/api-keys, open API keys, and create a key. The dashboard shows the key once. Keep it in an environment variable, never in code.
Under PROVELY_STRICT=true, a plugin failure or an unsupported version also stops the start. An unknown id in PROVELY_DISABLED_CHECKS always stops the start. A fixed id stops the start only under PROVELY_STRICT=true.
Why did no plugin apply?
- The plugin package is not installed. Install
@provely/instrumentationsorprovely-instrumentations. - The framework does not resolve from the application. A plugin applies only to a package that your application can import.
- The version is outside the range. The warning
PROVELY_UNSUPPORTED_FRAMEWORKnames it. Read Frameworks and paths. - The plugin failed. The warning
PROVELY_PLUGIN_FAILEDnames it.
Why does the log say record and not refuse?
The default guard_mode is observe, so an authority check only records. PROVELY_DEFENSE=record makes the defence checks record too. Read Postures.
A tool hangs. What bounds it?
The bound is the largest timeout that your code states for the tool. With no stated timeout, it is the default of 600 seconds. A synchronous Python tool has no default bound. Read the timeout variables in Postures.
An identical status poll was refused. Why?
Provely treats a tool with an unknown effect as a write. In one agent call, it refuses a write equal to a write that completed. Mark the tool as a read with PROVELY_READ_TOOLS. Only a person marks a read. A tool annotation or a statement of the model never does.
Does a check call a language model?
No. Every check is a deterministic function. No check asks a model, and no check reads a prompt for intent.
Does the decision log hold my data?
No. A line holds ids, codes, and hashes. It never holds an argument value, a tool result, or a candidate.
Can I turn off every check?
No rule and no signature turns off fm.repeat_of_completed or fm.repeat_after_unknown. Read Rules.
Does a plain loop get the same protection as a framework?
Mostly. A tool that hangs or raises inside your own loop handler is out of reach, because your code runs the tool.