Status Values

March 29, 2026 · View on GitHub

Documents how the status input works in the AgentMeter Action and what values are valid.


How status is determined

Companion workflow mode (workflow_run trigger)

When workflow_run_id is set, status is resolved automatically from the GitHub Actions conclusion of the triggering workflow. The user does not need to pass status — the action reads it from the workflow_run event payload and normalizes it internally via normalizeConclusion().

- uses: agentmeter/agentmeter-action@main
  with:
    api_key: ${{ secrets.AGENTMETER_API_KEY }}
    workflow_run_id: ${{ github.event.workflow_run.id }}
    # status is resolved automatically — no need to set it

Inline mode (direct / same-workflow)

When running inline (no workflow_run_id), the user passes status explicitly. It defaults to 'success' if omitted.

- uses: agentmeter/agentmeter-action@main
  if: always()
  with:
    api_key: ${{ secrets.AGENTMETER_API_KEY }}
    status: ${{ steps.agent.outcome }}

Built-in GitHub conclusion mappings

normalizeConclusion() maps GitHub's standard conclusion strings to AgentMeter's internal status enum:

GitHub conclusionAgentMeter statusNotes
successsuccess
failurefailed
timed_outtimed_out
cancelledcancelled
skipped(not ingested)Run is skipped entirely — nothing is sent to the API

Source of truth: normalizeConclusion() in src/workflow-run.ts.


Custom statuses

Any value not in the mapping table above is passed through to the API unchanged. This is intentional — unrecognized values are preserved so custom statuses are not silently replaced with failed.

needs_human

The primary custom status. Use it when an agent run completes but requires human review before the result can be acted on (e.g. low-confidence output, a tool call was blocked, or the agent explicitly flagged escalation).

Example — conditionally set based on an agent output flag:

- uses: anthropics/claude-code-action@v1
  id: agent
  with:
    anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
    prompt: "..."

- uses: agentmeter/agentmeter-action@main
  if: always()
  with:
    api_key: ${{ secrets.AGENTMETER_API_KEY }}
    model: claude-sonnet-4-5
    status: ${{ steps.agent.outputs.needs_human == 'true' && 'needs_human' || job.status }}

When steps.agent.outputs.needs_human is 'true', the run is recorded as needs_human. Otherwise it falls back to the job's actual status (success or failure).


All valid AgentMeter status values

ValueSet via actionDescription
successAgent run completed successfully
failedAgent run failed
timed_outAgent run exceeded its time limit
cancelledAgent run was cancelled
needs_humanRun completed but requires human review
running❌ internal onlyRun is currently in progress — not settable via action