{"protocolVersion":"0.3.0","name":"rocky","description":"rocky — the nexus instance agent at https://chaos.enfusion.ca. Delegate tasks here over A2A: bug filing, knowledge-graph search/inspection, and time/billing queries, each backed by this instance's own MCP tool surface and typed ontology.","version":"0.1.0","url":"https://chaos.enfusion.ca/a2a","preferredTransport":"JSONRPC","additionalInterfaces":[{"url":"https://chaos.enfusion.ca/a2a","transport":"JSONRPC"}],"provider":{"organization":"nexus","url":"https://chaos.enfusion.ca"},"capabilities":{"streaming":true,"pushNotifications":false,"stateTransitionHistory":false},"defaultInputModes":["text/plain","application/json"],"defaultOutputModes":["text/plain","application/json"],"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","bearerFormat":"nexus-api-key-or-jwt","description":"A nexus API key (nxs_…) or MCP OAuth access token."}},"security":[{"bearer":[]}],"skills":[{"id":"delegate","name":"Delegate a task conversationally","description":"Free-text delegation. Send a natural-language task and this instance's agent runs a tool-using reasoning loop over its own knowledge graph (search, inspect, file, create) and returns a synthesized answer plus any created node refs. Use when the request needs judgement or spans multiple tools.","tags":["delegation","reasoning","agent"],"examples":["A bug surfaced in chaos: the artifact editor 400s on typed-ref save. File it on nexus.","What decisions constrain how cross-instance auth should work?"]},{"id":"search-graph","name":"Search the knowledge graph","description":"Semantic hybrid search (full-text + vector via RRF) across decisions, insights, work items, and artifacts. Filter by node type, client, date, or status. Returns ranked nodes with typed refs and URLs. Use for discovery and 'what do we know about X'.","tags":["discovery","knowledge","research"],"examples":["Search the graph for prior decisions about A2A cross-instance delegation."]},{"id":"inspect-artifact","name":"Inspect an artifact's content","description":"Retrieve the full content blocks of any node (decision, insight, work item, document) by its typed ref. Use to read the body behind a search hit before acting on it.","tags":["investigation","analysis","audit"],"examples":["Inspect art_Qt5bA4 and summarize its trust-and-auth section."]},{"id":"inspect-node","name":"Resolve a node by ref","description":"Fetch a single node (work item, decision, insight, document) by its typed ref and return its NORMALIZED VIEW — type, title, status, tags, typed refs, summary, related-edge counts (and for a work item, latest-update + spec). Use to resolve a known ref to its current state/metadata. Distinct from inspect-artifact (full content body) and search-graph (discovery). This is the capability cross-instance ref resolution depends on.","tags":["resolution","investigation","cross-instance"],"examples":["Resolve wi_Ka3c5Q and report its current status and title.","Fetch the node for this ref so I can route a follow-up."]},{"id":"query-billing","name":"Query time / billing entries","description":"Aggregate logged time entries by client, project, work item, user, or date range from THIS instance's ledger. Forward-looking placeholder for the aperture billing-delegation use case: today it answers from local time entries; the same skill shape will front aperture's cross-instance cost data.","tags":["billing","time-tracking","reporting","aperture"],"examples":["How many hours were logged to client 11 this month?"]},{"id":"create-work-item","name":"Create a work item","description":"Create a non-bug work item (task) with optional project, owners, priority, and target date. Returns the created wi_ ref. Use create-bug-flavored requests via file-bug instead.","tags":["work-management","task-creation","planning"]},{"id":"netbox-branch","name":"NetBox branch lifecycle","description":"Create, inspect, or merge a netbox-branching branch via the nexus-worker. One reasoning chain = one branch = one reviewable changeset. Direct skill — send args: { action: 'create'|'status'|'merge', name?, branch_id? }.","tags":["netbox","provisioning","branch","infrastructure"],"examples":["action=create, name='nexus-chain-42-subnets'","action=merge, branch_id='42'"]},{"id":"netbox-write","name":"NetBox branch-scoped write changeset","description":"Execute typed NetBox write primitives (ensure_prefix, ensure_vlan, assign_ip, allocate, ensure_tenant, ensure_site, ensure_tag, delete) against a named branch via the nexus-worker. Idempotent; external_uuid is derived from natural keys when omitted. Direct skill — send args: { branch_id, ops: [{op, ...}] }.","tags":["netbox","provisioning","ipam","infrastructure"],"examples":["ops=[{op:'ensure_prefix', prefix:'10.0.0.0/24', site:'dc1'}]"]},{"id":"netbox-import","name":"NetBox spreadsheet-shaped bulk import","description":"Bulk upsert from flat, spreadsheet-shaped rows into a branch via the nexus-worker. The worker owns dependency ordering and de-duplication (tenants → sites → tags → vlans → prefixes). Direct skill — send args: { branch_id, rows: [{tenant?, site?, prefix?, vid?, ...}], ensure_tags? }.","tags":["netbox","provisioning","ipam","import","infrastructure"],"examples":["rows=[{tenant:'surewerx', site:'azure-us-west-2', prefix:'10.25.0.0/24', description:'subnet'}]"]},{"id":"netbox-author","name":"NetBox desired-state authoring (spec blocks)","description":"Author desired NetBox state as per-object spec blocks on DCIM nodes via the nexus-worker (resolves external_uuids). Nothing touches NetBox; apply later with netbox-apply action=apply. Direct skill — send args: { client_id, rows: [{tenant?, site?, prefix?, vid?, ...}] }.","tags":["netbox","provisioning","ipam","seed","authoring","infrastructure"],"examples":["client_id=3, rows=[{tenant:'surewerx', site:'SW:AZ-westus2', prefix:'10.25.0.0/24'}]"]},{"id":"netbox-apply","name":"NetBox desired-state projection (branch-gated)","description":"Project a client's AUTHORED desired state — the per-object spec blocks netbox-author writes — into NetBox inside a branch. Merge stays the human gate, so nothing reaches NetBox main here. prune defaults TRUE: tracked objects absent from the authored state are deleted in that branch. action='adopt' promotes unmanaged realized objects into authored state instead. Direct skill — send args: { action: 'apply'|'adopt', client_id, branch_id?, branch_name?, prune? }.","tags":["netbox","provisioning","ipam","infrastructure"],"examples":["action=apply, client_id=3, prune=true","action=adopt, client_id=3"]},{"id":"netbox-export","name":"NetBox authored-state export (filtered, ephemeral)","description":"Materialize a deep, filtered projection of the state nexus has AUTHORED for a client — not what NetBox currently holds. Filtering is closure: everything at a site plus everything reachable from it, so the document is a self-contained subgraph and objects pulled in that way carry included_because. Returns an ephemeral art_ ref (~6h) plus counts, not the payload. Direct skill — send args: { client_id, site?, object_types?, sync_status?, format? }.","tags":["netbox","ipam","export","infrastructure"],"examples":["client_id=9, site='EG:OVN', object_types=['prefixes']","client_id=7, format='yaml'"]}]}