docs(manifest): document the per-command category

A command can now declare what it is FOR, and Riposte's agent browses the estate
by it: enrich, hunt, inspect, transform, collect, contain, remediate, identity,
notify, ticket, manage.

It is a second axis to the manifest-level `category`, which says what the
product is. All 101 of HarfangLab's commands are "endpoint"; the analyst looking
for a decoder and the one looking for an isolation are not looking in the same
place, and the product axis cannot separate them.

Optional, and the template says why it is worth writing anyway: a command that
declares nothing is classified by Riposte from its id and description, which is
a guess. A value outside the list is ignored and the command classified instead,
so a typo costs the declaration rather than inventing a twelfth category that
nothing else ever lands in.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F8cMrB8KPHVpL47rmKynDQ
This commit is contained in:
2026-09-10 14:26:09 +00:00
parent a26e71f29e
commit ab63ead00e
+28
View File
@@ -59,10 +59,38 @@ commands:
# its removal, blocklists, exclusions, deletes, identity and # its removal, blocklists, exclusions, deletes, identity and
# credential operations, running code on a host # credential operations, running code on a host
# --- Request-based command (recommended: declarative, no sandbox) --------- # --- Request-based command (recommended: declarative, no sandbox) ---------
#
# `category` says what the command is FOR. It is what the agent browses the
# estate by: an analyst who wants to decode a rewritten URL and one who wants
# to isolate a host are not looking in the same place, and every command of
# your integration shares the manifest-level `category` above, which describes
# the PRODUCT and cannot separate them.
#
# Optional. A command that declares none is classified from its id and
# description when Riposte projects it into an agent tool — a decent guess,
# and no more than that. Declaring it stops the guessing for that command,
# which is the point of the field: you know, the classifier infers.
#
# enrich reputation or analysis of an indicator by a third party
# hunt search telemetry: events, logs, process trees
# inspect fetch one object in detail — a detection, a host, a record
# transform decode, defang, parse, extract — acting on data, not on an estate
# collect gather artefacts: jobs, forensic packages, dumps
# contain isolate, block, quarantine, suspend
# remediate undo a control or delete: unisolate, unblock, restore, purge
# identity accounts: disable, reset a password, revoke a session
# notify send a message, an e-mail, a page
# ticket create or update a ticket or a case
# manage policies, exclusions, configuration, agent lifecycle
#
# A value outside this list is ignored and the command is classified instead,
# so a typo costs the declaration rather than inventing a category nothing
# else ever lands in.
- id: lookup - id: lookup
name: Lookup indicator name: Lookup indicator
description: Fetches a report for an indicator over HTTP. description: Fetches a report for an indicator over HTTP.
risk: read # required in practice · read | safe_write | destructive risk: read # required in practice · read | safe_write | destructive
category: enrich # optional · what the command is FOR (see above)
inputs_schema: inputs_schema:
properties: properties:
indicator: indicator: