BashBrainTeammatesPricingDevelopersGet a test key

Work

The work Bash does on its computer: list it, read it, stop it or delete it.

Send Authorization: Bearer vk_test_... on every call. Every route of Work.

GET/v1/tasks/{task_id}/traceEvery step: tools called with a summary of inputs and outputs, timings, tokens and cost per turn.

Your API key, scope runtime or all. On the card: events. Every call here is a checked sample.

Request1 field

Path

task_idstringrequiredThe piece of work's id (task_...).
Type
string
Answers 2005 fields
object"task_trace"Always task_trace.
Type
"task_trace"
task_idstringThe task (task_...).
Type
string
stepsobject[]Every tool Bash used, in order.
tool_use_idstringThe step: one use of a tool.
Type
string
namestring | nullThe tool Bash used; null when it was not recorded.
Type
string | null
input_summarystring | nullWhat Bash did with it, in a line: never the raw input. Null when there is none.
Type
string | null
output_summarystring | nullWhat came back, in a line; null when there is none.
Type
string | null
is_errorbooleanWhether the step failed.
Type
boolean
started_atstringWhen it started, as an ISO 8601 time.
Type
string
finished_atstring | nullWhen it finished, as an ISO 8601 time; null while running.
Type
string | null
duration_msnumber | nullHow long it took, in milliseconds; null while running.
Type
number | null
turnsobject[]Every call to the model, in order, with its tokens and cost.
turn_idstringThe model turn: one call to the model.
Type
string
modelstring | nullThe model that answered; null when it was not recorded.
Type
string | null
input_tokensnumberTokens the model read.
Type
number
output_tokensnumberTokens the model wrote.
Type
number
cache_read_tokensnumberOf the tokens it read, how many came from the cache, at a lower price.
Type
number
cost_usdnumberWhat this turn cost, in billed US dollars.
Type
number
duration_msnumber | nullHow long it took, in milliseconds; null when not recorded.
Type
number | null
statusstring | nullHow it ended, as recorded; null when not recorded.
Type
string | null
started_atstringWhen it started, as an ISO 8601 time.
Type
string
totalsobjectThe turns added up.
input_tokensnumberAll tokens read.
Type
number
output_tokensnumberAll tokens written.
Type
number
cost_usdnumberWhat every turn cost together, in billed US dollars.
Type
number
TypeScript
const trace = await vestra.events.trace('task_91d');
Python
trace = vestra.events.trace("task_91d")
CLI
vestra events task_91d
HTTP
# Stream a conversation live. If the connection drops, reconnect with the last seq you saw.curl -N "$VESTRA_BASE_URL/v1/conversations/conv_8f2k/events" \  -H "Authorization: Bearer $VESTRA_API_KEY" \  -H "Last-Event-ID: 41" # Read the same events as JSON. You get them in pages, after the seq you give.curl "$VESTRA_BASE_URL/v1/conversations/conv_8f2k/events?format=json&after=41" \  -H "Authorization: Bearer $VESTRA_API_KEY" # Read a task afterwards. You get every step of one task, with tokens and cost per turn.curl "$VESTRA_BASE_URL/v1/tasks/task_91d/trace" \  -H "Authorization: Bearer $VESTRA_API_KEY" # Send events to your server. Register a URL and the events it wants. The signing secret is shown only once.curl "$VESTRA_BASE_URL/v1/webhooks" \  -H "Authorization: Bearer $VESTRA_API_KEY" \  -H "Content-Type: application/json" \  -d '{ "url": "https://hooks.example.com/vestra", "events": ["task.completed", "interaction.created", "usage.cap_reached"] }' # Catch up on what you missed. List the events your webhooks were sent, newest first.curl "$VESTRA_BASE_URL/v1/events?type=task.failed" \  -H "Authorization: Bearer $VESTRA_API_KEY"
MCP
{  "method": "tools/call",  "params": {    "name": "events",    "arguments": { "user": "traveller-42", "conversation": "conv_8f2k", "after": 0 }  }}