UTCP tools jarvis.run.tail

jarvis.run.tail run:tail

Fetch a run row by id (status, exit code, bounded stdout/stderr)

Auth

Header: Authorization: Bearer $JARVIS_BEARER_TOKEN

  • Every call requires a Bearer token (JARVIS_BEARER_TOKEN). Missing/wrong → HTTP 403.
  • Optional capability grants: JARVIS_UTCP_CAPABILITIES=policy:check,run:create (empty = full owner grant).
  • Missing capability on invoke → HTTP 403 with reason "capability denied".
  • Audit actor is a token fingerprint (tok_<prefix>_<sha256[0..4]>), never the raw secret.
  • Loopback bind only in v0 (127.0.0.1).

This tool requires capability run:tail. If JARVIS_UTCP_CAPABILITIES is set, include that grant or the provider returns 403.

curl

curl -sS \
  -H "Authorization: Bearer $JARVIS_BEARER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"tool":"jarvis.run.tail","args":{"run_id":1}}' \
  http://127.0.0.1:7777/tools/invoke

Python

import json, os, urllib.request

url = "http://127.0.0.1:7777/tools/invoke"
token = os.environ["JARVIS_BEARER_TOKEN"]
payload = {
  "tool": "jarvis.run.tail",
  "args": {
    "run_id": 1
  }
}

req = urllib.request.Request(
    url,
    data=json.dumps(payload).encode(),
    headers={
        "Authorization": f"Bearer {token}",
        "Content-Type": "application/json",
    },
    method="POST",
)
with urllib.request.urlopen(req) as resp:
    print(resp.read().decode())

Example args

{
  "run_id": 1
}

input_schema

{
  "type": "object",
  "required": [
    "run_id"
  ],
  "properties": {
    "run_id": {
      "type": "integer"
    }
  }
}

output_schema

{
  "type": "object",
  "required": [
    "run_id",
    "status"
  ],
  "properties": {
    "run_id": {
      "type": "integer"
    },
    "status": {
      "type": "string"
    },
    "exit_code": {
      "type": "integer"
    },
    "argv": {
      "type": "string"
    },
    "cwd": {
      "type": "string"
    },
    "stdout": {
      "type": "string"
    },
    "stderr": {
      "type": "string"
    }
  }
}

← All UTCP tools