argospy SDK¶
Python API for writing packs and cases. Install: pip install argospy. Agent workflow: https://argos.benchyard.com/skill.md
Import package name: argos.
Spec¶
from argos.case import ONCE, SOAK, Spec
Spec(
id="pack:case", # unique id
title="short title",
group="live",
tags=("e2e",), # "e2e" → CLI requires --env
modes=(ONCE, SOAK), # default (ONCE,)
pack="", # stamped by Pack loader
)
ONCE / SOAK are string constants "once" / "soak".
CaseFn¶
from argos.runner import CaseFn
CaseFn(spec, fn) # fn: (Context) -> None
Each case module exports:
def cases() -> list[CaseFn]:
return [...]
Context¶
Created by the runner. Fields: spec, dest (case artifact dir), run_dest, iteration, mode.
Control¶
| Method | Behavior |
|---|---|
step(name, status="ok", detail="") |
Record/update a step (running then ok / failed) |
check(ok, message) |
If not ok, raise Fail |
skip(message) |
Raise Skip |
fail(message) |
Raise Fail |
fail_running(message) |
Mark all running steps failed |
note(message) |
Attach a note / emit event |
Metrics¶
| Method | Behavior |
|---|---|
metric(key, value, *, unit="", kind="gauge", scope="iteration") |
Scalar metric |
sample(name, value, *, unit="", timestamp=None, labels=None) |
Time series point (kept capped) |
distribution(name, values, *, unit="") |
Summary (min/avg/p50/p90/p95/p99/max) |
threshold(name, *, actual, operator, target, unit="") |
Record pass/fail; operators >= > <= < ==; returns bool |
Evidence¶
| Method | Behavior |
|---|---|
operation(label, *, kind, operation, expected, actual, artifacts=None, step_name="") |
Attach evidence to active/step_name step |
http_operation(label, method, url, *, request, status, body, expected_status, artifact="", step_name="") |
HTTP evidence |
command_operation(label, command, *, returncode, stdout="", stderr="", expected_returncode=0, artifact="", step_name="", elapsed_s=None) |
Command evidence (redacts secrets) |
Requires an active step (usually step(..., "running") first).
Artifacts / ownership¶
| Method | Behavior |
|---|---|
write(name, obj) |
Write under ctx.dest (bytes/str/JSON) |
own(resource_id, catalog_id="") |
Register resource id in run owned.json |
Pack¶
from pathlib import Path
from argos.pack import Pack, load_case_modules, stamp
def pack() -> Pack:
return Pack(
id="demo",
title="Demo pack",
envs=("office", "bj-test"),
apply_env=_apply_env, # (name: str) -> str
load_cases=_load, # () -> list[CaseFn]
# optional:
# group_order={}, execute=..., needs_stack=..., stack_up=...,
# stack_down=..., soak_teardown=..., plan_meta=..., presets=...,
)
Discover cases:
def _load() -> list[CaseFn]:
return stamp(
load_case_modules("mypack.cases", Path(__file__).parent / "cases"),
"demo",
)
Register in pyproject.toml:
[project.entry-points."argos.packs"]
demo = "mypack.pack:pack"
CLI (library surface)¶
| Command | Notes |
|---|---|
argos packs / argos list |
Discover |
argos run <query…> |
Local run |
argos run … --dash [url\|file] |
Stream to dash |
argos push <out-dir> --dash … |
Upload finished dir |
argos dash [url\|file] |
Open configured dash |
argos up / argos down |
Pack local stack |
--dash with no value uses ARGOS_DASH_URL + ARGOS_TOKEN or discovered secrets/dash.env. Path argument loads both keys from that file. URL argument sets origin; token still from env/file. HTTP shape: https://argos.benchyard.com/ingest/
Terminal progress and out/ layout: https://argos.benchyard.com/local/
Exceptions¶
argos.case.Skip— skipped resultargos.case.Fail— failed result (check/fail)