DashClaw owns
Action risk, policy checks, human-in-the-loop approval, decision replay, and evidence records.
DashClaw controls whether an agent should act. Triptych OS controls whether an agent should spend. Use them together when a governed agent needs to buy an external capability, record the decision evidence, and reconcile the paid outcome.
Put DashClaw before the agent action and Triptych OS before the paid execution. DashClaw evaluates action risk, human approval, and evidence capture. Triptych OS evaluates wallet runway, procurement policy, supervisor spend approval, receipts, jobs, and reconciliation around Agoragentic's hosted router.
Agent goal
-> DashClaw guard()
-> Triptych OS procurementCheck()
-> Agoragentic execute()
-> Triptych OS receipt() + reconciliation()
-> DashClaw record outcome
npm install dashclaw agoragentic
Set both control-plane credentials in the agent runtime. Do not put either key in prompt text.
DASHCLAW_BASE_URL=https://your-dashclaw-instance.example
DASHCLAW_API_KEY=oc_live_xxx
AGORAGENTIC_API_KEY=amk_xxx
This wrapper keeps the boundary explicit: DashClaw governs the decision, Triptych OS governs the spend, and Agoragentic routes paid work only after both checks pass.
import { DashClaw } from "dashclaw";
import agoragentic from "agoragentic";
const claw = new DashClaw({
baseUrl: process.env.DASHCLAW_BASE_URL,
apiKey: process.env.DASHCLAW_API_KEY,
agentId: "buyer-agent"
});
const agora = agoragentic(process.env.AGORAGENTIC_API_KEY);
export async function executeGovernedSpend({
task,
input,
listingId,
maxCostUsdc,
riskScore = 50
}) {
const guard = await claw.guard({
action_type: "external_capability_purchase",
risk_score: riskScore,
declared_goal: `Buy external capability for task: ${task}`
});
if (guard.decision === "block") {
throw new Error(`DashClaw blocked spend: ${guard.reason || "policy_denied"}`);
}
const action = await claw.createAction({
action_type: "external_capability_purchase",
declared_goal: `Execute ${task} through Agoragentic`,
risk_score: riskScore
});
const procurement = listingId
? await agora.procurementCheck(listingId, { quotedCostUsdc: maxCostUsdc })
: await agora.procurement();
const decision = procurement.procurement_check?.decision || procurement.procurement?.decision;
if (decision?.allowed === false) {
await claw.updateOutcome(action.action_id, {
status: "blocked",
error_message: decision.status || "agoragentic_procurement_blocked"
});
throw new Error(`Triptych OS blocked spend: ${decision.status}`);
}
const result = await agora.execute(task, input, { max_cost: maxCostUsdc });
const receiptId = result.receipt_id || result.invocation_id;
const receipt = receiptId ? await agora.receipt(receiptId) : null;
await claw.recordAssumption({
action_id: action.action_id,
assumption: `Agoragentic invocation ${result.invocation_id} completed with receipt ${receiptId}`
});
await claw.updateOutcome(action.action_id, { status: "completed" });
return { result, receipt, dashclaw_action_id: action.action_id };
}
This integration uses only public contracts. Do not copy Agoragentic routing internals into DashClaw policies, and do not treat DashClaw as the payment rail. Keep the responsibilities separate.
Action risk, policy checks, human-in-the-loop approval, decision replay, and evidence records.
Account state, procurement policy, spend approvals, receipts, recurring jobs, learning, and reconciliation.
Provider match, paid execution, metering, settlement, and the 3% platform fee on managed paid work.
npx dashclaw-demo.GET /api/commerce/reconciliation to attach spend summaries back to DashClaw decision records.