BeamWeaver integration
Export BeamWeaver agent, model, and tool traces to WeaveScope.
BeamWeaver is the recommended WeaveScope integration for Elixir applications. It captures agent runs, model calls, tool calls, errors, usage, and metadata, then exports them without blocking the application request.
For BeamWeaver concepts and APIs beyond tracing, use the BeamWeaver documentation .
Configure trace export
Store the project API key in your environment:
export WEAVESCOPE_API_KEY=ws_...
Configure BeamWeaver in config/runtime.exs:
import Config
config :beam_weaver,
weave_scope: [
endpoint: "https://app.weavescope.com",
api_key: System.fetch_env!("WEAVESCOPE_API_KEY")
]
Configure model-provider credentials separately. Keep only the providers your application calls:
config :beam_weaver,
openai: [api_key: System.fetch_env!("OPENAI_API_KEY")],
anthropic: [api_key: System.fetch_env!("ANTHROPIC_API_KEY")],
google: [api_key: System.fetch_env!("GOOGLE_API_KEY")]
See the BeamWeaver provider guides for supported providers, models, and provider-specific options.
Add trace identity
Pass trace: at the application boundary so the complete workflow shares one trace ID:
MyAgent.invoke(input,
trace: [
name: "customer_support_agent",
thread_id: thread.id,
user_id: thread.user_id,
session_id: thread.session_id,
execution_mode: "support_chat",
environment: "production",
fields: %{ticket_id: ticket.id, account_id: account.id},
metadata: %{feature: "support_inbox"}
]
)
| Field | Use |
|---|---|
:name
| Name shown for the root trace. |
:thread_id
| Conversation or durable workflow thread. |
:user_id
| Authenticated end user. |
:session_id
| Browser, job, or application session. |
:execution_mode
|
Workflow mode, such as ai_chat or background_job.
|
:environment
| Deployment environment. |
:fields / :custom_fields
| Flat, indexed values available to filters. |
:metadata
| Additional context shown in trace details. |
Custom fields accept flat string dimensions. BeamWeaver drops blank or nested values, private keys, and secret-like fields such as api_key, token, secret, password, and authorization.
What BeamWeaver sends
BeamWeaver sends native observation events to:
POST /api/v1/observations/batch
Depending on the operation, an observation can include:
-
Trace, observation, and parent observation IDs
-
Run kind, name, status, and timestamps
-
Tags, metadata, context metadata, and custom fields
-
Inputs, outputs, and errors
-
Provider, model, request ID, finish reason, and service tier
-
Token usage and cost metadata
-
Tool call IDs and structured-output metadata
When tracing is active, model and tool calls become child observations under the current agent or workflow trace.
Export behavior
BeamWeaver exports observations through a supervised background queue:
| Setting | Default |
|---|---|
| Batch size | 50 observations |
| Flush interval | 250 ms |
| Maximum queued observations | 10,000 |
| When the queue is full | Drop the oldest observation |
| Initial retry delay | 100 ms with backoff |
| Maximum attempts | 5 |
Transient transport failures are retried. Invalid payloads are not retried. Export failures are logged but do not change the result of the application path being traced.
Flush the queue before a short-lived process exits:
BeamWeaver.Tracing.flush_exporter(60_000)
Preserve trace context in tasks
BeamWeaver propagates trace context through its graph nodes. If your own code starts supervised tasks, use the BeamWeaver tracing helpers to keep child runs under the current trace:
task =
BeamWeaver.Tracing.async(MyApp.TaskSupervisor, fn ->
BeamWeaver.Tracing.with_run("model call", fn ->
call_model()
end)
end)
A detached task without the active context starts a separate root trace. See the BeamWeaver tracing guide for additional context-propagation patterns.
Redaction
Before export, BeamWeaver redacts common secrets from inputs, outputs, metadata, usage, and errors. This includes authorization headers, API keys, bearer tokens, URL credentials, query-string secrets, private-key blocks, and common secret fields.
Review the data your application records before enabling tracing in production. Redaction reduces accidental exposure, but it does not replace application-level data classification and filtering.