Skip to content
SHAMPOO

Tool catalogue

107 documented tools.

Derived from the canonical SHAMPOO tool documentation (the same source the implementation is gated against), so these pages and the software cannot drift apart.

3 tools

Inbox

Reviewing inbound material before it becomes agreed state.

inbound_approve

Write · Conductor only

Approves staged inbound items into agreed state. Tasks insert as fresh entries through real creation; knowledge merges additively with type conflicts skipped and relations gated on both endpoints.

Full documentation →

Arguments, result and boundaries
Arguments
Required: `kind`, `item_ids`. Optional: `reason`. - `kind`. Note: tasks or knowledge. - `item_ids`. Note: JSON array string of namespaced ids (t:N tasks, e:N entities, r:N relations); must match kind. Every id must exist and be pending or the whole call fails with nothing applied. - `reason`. Note: Recorded as the decide reason on each item.
Result
Object with approved array (id plus task_id for tasks) and skipped array (id plus reason).
Boundaries
Conductor role required. Approved content is created under the approver identity within the selected profile boundary, so approver scope and validation apply exactly as for direct creation.
Lifecycle
Strict eligibility pre-check first, then entities before relations: tasks are created fresh through the real creation path; entities merge additively (type conflicts skip, only new observations merge); relations need both endpoints pre-existing or approved in the same batch. Each item is marked decided with a decision history event.
Errors
Non-conductor callers get a requires-conductor error payload. Invalid kind, malformed ids, kind/id mismatch, or any ineligible item fails the whole call with nothing applied. Type conflicts and missing relation endpoints land in skipped, not errors.
Example
```json { "item_ids": "[\"t:1\"]", "kind": "tasks" } ``` Result shape: ```json { "approved": [ { "id": "t:1", "task_id": "<uuid>" } ], "skipped": [] } ```

inbound_list

Read · Advanced

Lists staged inbound proposals: tasks plus knowledge with merge diffs. Call it to review what the Relay staged before approving or rejecting.

Full documentation →

Arguments, result and boundaries
Arguments
Optional: `kind`, `limit`, `project`, `quorum_id`, `state`. - `kind`. Note: Empty means both; tasks or knowledge narrows. Anything else returns the empty shape. - `limit`. Note: Defaults 20, clamped 1 to 100. - `project`. - `quorum_id`. Note: Narrows to one quorum; participation still applies. - `state`. Note: Defaults pending; approved and rejected are queryable. Anything else returns the empty shape.
Result
Object with tasks, entities (each with observations plus a set-difference diff: new_entity, merge with new_observations, or type_conflict), relations (each with from_present/to_present endpoint flags), and count.
Boundaries
Project scope AND quorum participation filter silently: conductor and star see all, others see only entries whose quorum they participate in or whose target project is granted. Untargeted entries stay override-only.
Lifecycle
Pure staged-content read; records nothing. The Relay is the only writer and nothing auto-imports.
Errors
Wrong-typed arguments rejected by validation. Unknown kind or state values return the empty shape, not an error.
Example
```json { "state": "pending" } ``` Result shape: ```json { "count": 2, "entities": [], "relations": [], "tasks": [ { "item_id": "t:1", "state": "pending", "title": "Sync catalog" } ] } ```

inbound_reject

Write · Conductor only

Rejects staged inbound items with no content effects. Call it to decline proposals the conductor will not adopt.

Full documentation →

Arguments, result and boundaries
Arguments
Required: `kind`, `item_ids`. Optional: `reason`. - `kind`. Note: tasks or knowledge. - `item_ids`. Note: JSON array string of namespaced ids (t:/e:/r:) matching kind; every id must exist and be pending or the whole call fails. - `reason`. Note: Recorded as the decide reason on each item.
Result
Object with rejected array of id entries.
Boundaries
Conductor role required. Operates inside the selected profile boundary; rejection changes only item state, never content.
Lifecycle
Marks each item rejected with decider, timestamp, and reason plus a decision history event. Content entries are untouched.
Errors
Non-conductor callers get a requires-conductor error payload. Invalid kind, malformed ids, kind/id mismatch, or any ineligible item fails the whole call with nothing applied.
Example
```json { "item_ids": "[\"e:2\"]", "kind": "knowledge" } ``` Result shape: ```json { "rejected": [ { "id": "e:2" } ] } ```