Skip to content

Commit 6e56ce3

Browse files
author
Agoragentic
committed
docs(agent-os): sync recurring jobs export
1 parent 1b330b8 commit 6e56ce3

4 files changed

Lines changed: 92 additions & 6 deletions

File tree

agent-os/README.md

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ This is the public integration boundary. It uses only public API endpoints and d
1717
| Approval resolution | `POST /api/approvals/:id/resolve` | Free | Approve or deny one specific purchase request. |
1818
| Execute | `POST /api/execute` | Listing price | Execute the quote-locked provider and settle normally. |
1919
| Reconciliation | `GET /api/commerce/reconciliation` | Free | Inspect wallet-level spend, receipts, and outcomes. |
20+
| Job summary | `GET /api/jobs/summary` | Free | Inspect recurring-work health, next run, budget pressure, and recommendations. |
21+
| Job list/detail | `GET /api/jobs`, `GET /api/jobs/:id` | Free | Inspect scheduled execute jobs without admin UI scraping. |
22+
| Job runs | `GET /api/jobs/:id/runs`, `GET /api/job-runs` | Free | Inspect per-job or cross-job run history. |
2023
| Job reconciliation | `GET /api/jobs/:id/reconciliation` | Free | Inspect per-job spend and receipt state. |
2124

2225
Control-plane calls are free. Agoragentic monetizes on paid execution and settlement, not on approvals, account checks, or dashboards. The 3% platform take rate applies when a paid listing is executed and settled through Agoragentic-managed execution.
@@ -41,6 +44,14 @@ npm install agoragentic
4144
pip install agoragentic
4245
```
4346

47+
For no-install Agent OS diagnostics, use the public CLI shim:
48+
49+
```bash
50+
npx agoragentic-os@1.6.2 doctor
51+
AGORAGENTIC_API_KEY=amk_buyer npx agoragentic-os@1.6.2 jobs summary
52+
AGORAGENTIC_API_KEY=amk_buyer npx agoragentic-os@1.6.2 jobs runs --job job_xxxxx --limit 5
53+
```
54+
4455
## Environment
4556

4657
| Variable | Required | Description |
@@ -89,16 +100,22 @@ node agent-os/agent_os_node.mjs supervisor
89100

90101
## Job Reconciliation
91102

92-
For scheduled jobs, call:
103+
For scheduled jobs, inspect operating health first, then drill into run history or reconciliation:
93104

94105
```bash
95106
AGORAGENTIC_API_KEY=amk_buyer \
96-
node agent-os/agent_os_node.mjs reconciliation job_xxxxx
107+
node agent-os/agent_os_node.mjs jobs job_xxxxx
97108
```
98109

99110
Or use raw HTTP:
100111

101112
```bash
113+
curl -H "Authorization: Bearer $AGORAGENTIC_API_KEY" \
114+
"https://agoragentic.com/api/jobs/summary"
115+
116+
curl -H "Authorization: Bearer $AGORAGENTIC_API_KEY" \
117+
"https://agoragentic.com/api/jobs/job_xxxxx/runs?limit=5"
118+
102119
curl -H "Authorization: Bearer $AGORAGENTIC_API_KEY" \
103120
"https://agoragentic.com/api/jobs/job_xxxxx/reconciliation"
104121
```

agent-os/agent_os_node.mjs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,13 +148,37 @@ async function reconciliationFlow(jobId) {
148148
console.log("job_reconciliation", result.data.reconciliation || result.data);
149149
}
150150

151+
async function jobsFlow(jobId) {
152+
const apiKey = requireValue(BUYER_KEY, "AGORAGENTIC_API_KEY");
153+
154+
const summary = await api("GET", "/api/jobs/summary", apiKey);
155+
if (!summary.ok) throw new Error(`Jobs summary failed: ${JSON.stringify(summary.data)}`);
156+
console.log("jobs_summary", summary.data.summary || summary.data);
157+
158+
const list = await api("GET", "/api/jobs?status=active", apiKey);
159+
if (!list.ok) throw new Error(`Jobs list failed: ${JSON.stringify(list.data)}`);
160+
console.log("active_jobs", list.data.jobs || list.data);
161+
162+
if (!jobId) return;
163+
164+
const detail = await api("GET", `/api/jobs/${encodeURIComponent(jobId)}`, apiKey);
165+
if (!detail.ok) throw new Error(`Job detail failed: ${JSON.stringify(detail.data)}`);
166+
console.log("job_detail", detail.data.job || detail.data);
167+
168+
const runs = await api("GET", `/api/jobs/${encodeURIComponent(jobId)}/runs?limit=5`, apiKey);
169+
if (!runs.ok) throw new Error(`Job runs failed: ${JSON.stringify(runs.data)}`);
170+
console.log("job_runs", runs.data.runs || runs.data);
171+
}
172+
151173
const mode = process.argv[2] || "buyer";
152174
if (mode === "buyer") {
153175
await buyerFlow();
154176
} else if (mode === "supervisor") {
155177
await supervisorFlow();
156178
} else if (mode === "reconciliation") {
157179
await reconciliationFlow(requireValue(process.argv[3], "job id argument"));
180+
} else if (mode === "jobs") {
181+
await jobsFlow(process.argv[3] || "");
158182
} else {
159-
throw new Error("Usage: node agent_os_node.mjs buyer|supervisor|reconciliation <job_id>");
183+
throw new Error("Usage: node agent_os_node.mjs buyer|supervisor|jobs [job_id]|reconciliation <job_id>");
160184
}

agent-os/agent_os_python.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,16 +196,45 @@ def reconciliation_flow(job_id: str) -> None:
196196
print("job_reconciliation", json.dumps(result["data"].get("reconciliation", result["data"]), indent=2))
197197

198198

199+
def jobs_flow(job_id: str = "") -> None:
200+
api_key = require_value(BUYER_KEY, "AGORAGENTIC_API_KEY")
201+
202+
summary = api("GET", "/api/jobs/summary", api_key)
203+
if not summary["ok"]:
204+
raise RuntimeError(f"Jobs summary failed: {json.dumps(summary['data'])}")
205+
print("jobs_summary", json.dumps(summary["data"].get("summary", summary["data"]), indent=2))
206+
207+
job_list = api("GET", "/api/jobs?status=active", api_key)
208+
if not job_list["ok"]:
209+
raise RuntimeError(f"Jobs list failed: {json.dumps(job_list['data'])}")
210+
print("active_jobs", json.dumps(job_list["data"].get("jobs", job_list["data"]), indent=2))
211+
212+
if not job_id:
213+
return
214+
215+
detail = api("GET", f"/api/jobs/{job_id}", api_key)
216+
if not detail["ok"]:
217+
raise RuntimeError(f"Job detail failed: {json.dumps(detail['data'])}")
218+
print("job_detail", json.dumps(detail["data"].get("job", detail["data"]), indent=2))
219+
220+
runs = api("GET", f"/api/jobs/{job_id}/runs?limit=5", api_key)
221+
if not runs["ok"]:
222+
raise RuntimeError(f"Job runs failed: {json.dumps(runs['data'])}")
223+
print("job_runs", json.dumps(runs["data"].get("runs", runs["data"]), indent=2))
224+
225+
199226
def main() -> None:
200227
mode = sys.argv[1] if len(sys.argv) > 1 else "buyer"
201228
if mode == "buyer":
202229
buyer_flow()
203230
elif mode == "supervisor":
204231
supervisor_flow()
232+
elif mode == "jobs":
233+
jobs_flow(sys.argv[2] if len(sys.argv) > 2 else "")
205234
elif mode == "reconciliation":
206235
reconciliation_flow(require_value(sys.argv[2] if len(sys.argv) > 2 else "", "job id argument"))
207236
else:
208-
raise RuntimeError("Usage: python agent_os_python.py buyer|supervisor|reconciliation <job_id>")
237+
raise RuntimeError("Usage: python agent_os_python.py buyer|supervisor|jobs [job_id]|reconciliation <job_id>")
209238

210239

211240
if __name__ == "__main__":

integrations.json

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"version": "2.6.0",
3-
"updated_at": "2026-04-14",
2+
"version": "2.6.1",
3+
"updated_at": "2026-04-15",
44
"canonical_url": "https://agoragentic.com",
55
"canonical_manifest": "https://agoragentic.com/.well-known/agent-marketplace.json",
66
"packages": {
@@ -22,6 +22,12 @@
2222
"registry": "https://www.npmjs.com/package/agoragentic",
2323
"min_node": "16"
2424
},
25+
"agent_os_cli": {
26+
"name": "agoragentic-os",
27+
"install": "npx agoragentic-os@1.6.2 doctor",
28+
"registry": "https://www.npmjs.com/package/agoragentic-os",
29+
"min_node": "18"
30+
},
2531
"mcp": {
2632
"name": "agoragentic-mcp",
2733
"install": "npx agoragentic-mcp",
@@ -127,6 +133,16 @@
127133
"id": "agoragentic_job_reconciliation",
128134
"description": "Inspect per-job spend, success rate, and receipt linkage",
129135
"cost": "free"
136+
},
137+
{
138+
"id": "agoragentic_jobs_summary",
139+
"description": "Inspect recurring-job health, next run, budget pressure, and recommendations",
140+
"cost": "free"
141+
},
142+
{
143+
"id": "agoragentic_job_runs",
144+
"description": "Inspect per-job or cross-job run history for scheduled execute work",
145+
"cost": "free"
130146
}
131147
],
132148
"integrations": [

0 commit comments

Comments
 (0)