- Brand
- Orisu
- Category
- Pending
- Primary Subcategory
- Pending
Integration details
Description
Orisu helps users create, inspect, edit, run, and share node-based workflows for generating AI images, video, audio, and text. Users can manage reusable apps and brand kits, validate workflow graphs, estimate run costs, monitor executions, and review generated outputs from ChatGPT.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Category
- Pending
- Primary Subcategory
- Pending
- Secondary Subcategories
- None listed
- Brand
- Orisu
- Access
- Account required
- First tracked
- 2026-10-02
- Tool count
- 34
- Geography
- US
The broad Category that contains the Primary Subcategory.
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
ChatGPT Plugin discovery is coming soon
ChatGPT can surface a Plugin when it matches a user's request.Your Plugin Discovery Score measures how often yours appears.
No spam. Unsubscribe any time.
What discovery looks like

Get alerts for Orisu
Get updates when Orisu’s Discoverability Score or category rank changes.
Competitive lineup
34 tools agents can invoke
WHAT — Approves or rejects a run paused at a human_review node, optionally selecting which array indices to approve when the upstream node produced an array. WHEN — Use when orisu://runs/{run_id} shows status='paused' — the workflow is waiting on a human gate. For non-paused runs this call fails fast. NEXT — On 'approved': the workflow resumes; continue polling orisu://runs/{run_id} for terminal status. On 'rejected': the run moves to status='cancelled'. PITFALLS — submit_review only applies to runs PAUSED at a human_review node — check status first. approved_indices is only meaningful when the upstream node produced an array (e.g. a list_selector fan-out); for scalar outputs, omit it.
submit_review
WHAT — Holds the connection while polling the runs table every second; returns the run JSON (same shape as orisu://runs/{id}) when status becomes completed / failed / cancelled / paused, or when timeout_ms elapses. WHEN — Use INSTEAD of reading orisu://runs/{id} in a manual loop after trigger_run / trigger_app. Saves token cost (one call vs N reads) and reduces latency (server-side poll is faster than RPC round-trips). For workflows you expect to finish in <30s, just call wait_for_run after trigger_run; for longer workflows, pass timeout_ms up to 110000 and re-call if `timed_out: true` comes back. NEXT — If status='completed': the result embeds thumbnails of the terminal image/video outputs inline (you can SEE and critique them directly) plus outputs/steps with asset URLs. If 'failed': read `error` for the failure reason. If 'paused': the workflow is waiting on a human_review — surface the prompt to the user and call submit_review when they decide. If `timed_out: true`: status is still in-flight — re-call wait_for_run with a larger timeout, or fall back to reading orisu://runs/{id} on your own cadence. PITFALLS — timeout_ms is capped at 110000 (~110s) — long enough for short runs to complete in a single call, short enough to play nice with proxy idle timeouts. For a 5-min video generation, expect to call wait_for_run a few times. Embedded thumbnails are capped (12) and only appear once the background pipeline has produced them; asset URLs are permanent. To render a specific asset at higher fidelity, call preview_asset.
wait_for_run
WHAT — Paginated, filterable listing of the org's asset library with full metadata + provenance (run/agent/node) and permanent URLs. Optionally returns inline thumbnails so you can see the page. WHEN — Use to BROWSE or enumerate assets — 'everything the Mon Cheri agent made last week', 'all videos', paging through a large library. For a name lookup use search({ kind: 'asset' }); to render specific ids at higher fidelity use preview_asset. NEXT — Page with `cursor`→`next_cursor` until next_cursor is null. Filter by media_kind / created_after / agent_id. Set include_thumbnails to view the page inline. Reuse an asset via { kind, assetId } on an upload_* node input. PITFALLS — limit caps at 100; keep paging via next_cursor for more. include_thumbnails adds base64 — leave it off for bulk enumeration, on when the user is actually looking. Thumbnails only exist once the background pipeline has produced them (audio/document rows never have one).
list_assets
WHAT — Cancels a run that is queued, running, or paused. Idempotent — cancelling an already-terminal run is a no-op. WHEN — Use when the user explicitly asks to stop a run, or when you detect a run will fail/produce wrong output and want to spare the credits. NEXT — No follow-up needed; the run's status moves to 'cancelled'. If you want to verify, read orisu://runs/{run_id}. PITFALLS — Cancelling does NOT refund credits already consumed by completed nodes. There is no 'pause and resume' shape — cancel is terminal.
cancel_run
WHAT — Creates a brand kit (name, colors, fonts, logo, voice, guidelines) in the bound org for brand-aware generation. WHEN — Use when the user describes their brand and no matching kit exists in orisu://brand-kits. For extracting a brand automatically from a website, send the user to the Orisu dashboard — the scraper pipeline is web-only. NEXT — Wire the returned brand_kit_id into brand_context / brand_guidelines / brand_voice nodes (their brand_kit_id config field) so generation respects the brand. PITFALLS — Colors are hex strings, primary first. team_id defaults to the org's first team — pass it explicitly for multi-team orgs. Creating a kit does NOT retro-apply it to existing workflows; wire the brand nodes yourself.
create_brand_kit
WHAT — Creates a new Orisu agent (workflow) in the bound org, optionally with an initial graph. WHEN — Use when the user describes a new workflow from scratch ('make me a brand video pipeline'). For existing workflows, use search({ kind: 'agent', query }) first to avoid duplicates. For a partial change to an existing agent, use replace_graph instead. NEXT — If initial_graph was provided, call estimate_run_cost then trigger_run. Otherwise call replace_graph to populate the workflow, then trigger_run. Burn fixed choices (model, aspect, prompts that never change) into the graph config; if the workflow will be RUN REPEATEDLY with varying inputs, publish it as an app (publish_app) and drive it with trigger_app — trigger_run's `inputs` are a per-run overlay that never persists, so they're for one-off/ad-hoc runs only. The created agent renders inline via the in-chat canvas — no extra read is needed to see it. PITFALLS — GraphSpec node ids are YOUR strings, not auto-generated — keep them stable when referencing from edges. Do NOT set node `position` (server auto-lays out). Pass idempotency_key when retrying after a network failure or you will create duplicate agents.
create_agent
WHAT — Dry-runs build + semantic validation on a GraphSpec without persisting anything. Every error/warning names the offending node (nodeId, nodeLabel), a code, and a message — including catalog-aware checks: unknown config.model ids (UNKNOWN_MODEL), a model that doesn't support the node's capability (MODEL_CAPABILITY_UNSUPPORTED), and an aspectRatio/resolution/quality value outside the selected model's option list (INVALID_CONFIG_VALUE, message lists the valid options verbatim). On failure, `summary` is a ready-to-read per-code fix digest. WHEN — Use BEFORE create_agent / replace_graph whenever the spec is non-trivial (more than 2 nodes, any dynamic-arity nodes, any logic nodes, or any model-bound node). Catches port-type mismatches, missing required inputs, bogus model ids, and invalid per-model option values before they become a wasted version or a runtime 422. NEXT — On success (errors=[]), call create_agent or replace_graph. On failure, read `summary` for the fix-by-code digest and errors[] for the exact node + message (aspect/quality/resolution errors list valid options in the message; cross-check against get_effective_ports' models[] for that node), fix, and re-validate. PITFALLS — Validation does NOT execute any nodes — it only checks graph shape and config. A graph that validates can still fail at runtime (e.g. invalid API keys, unreachable model providers). The model-binding checks are conservative: they skip fields still at the node's own shipped default (to avoid false positives before a model is chosen) and skip config keys the model's catalog doesn't enumerate.
validate_graph
WHAT — Creates a new agent in the bound org that is a deep copy of an existing one (same graph, fresh ids, new name). WHEN — Use when the user wants to fork a workflow for variation ('make me one like X but with a different model'). Cheaper than create_agent + replace_graph with the full spec. NEXT — Optionally call replace_graph or update_agent on the clone to differentiate it, then trigger_run. PITFALLS — The clone is in the SAME org as the source — there is no cross-org clone. Versions are NOT cloned; the clone starts with version 1.
clone_agent
WHAT — Sums per-node estimated credit costs for an agent's latest version, COMPOSED through the graph: chained fan-outs (split -> per-item LLM -> per-item image) and cartesian products (two loop ports) multiply through when array lengths are statically known (saved values, split_text over literal text). Runtime-sized factors (LLM output splits) keep their known part, mark the node { per_item, multiplicity: 'dynamic' }, and set total_is_lower_bound. exceeds_runtime_cap lists nodes whose static count already breaks the 200-iterations-per-node executor ceiling (the run WOULD fail mid-flight). WHEN — Call this BEFORE trigger_run when the user mentions cost, when triggering an unfamiliar workflow, or when running on a low-credit account (check orisu://credits first). NEXT — If total_estimated_credits is acceptable, call trigger_run. When total_is_lower_bound is true, warn the user the real cost is per_item × (array length) for the nodes in fanout_nodes — an 18-scene fan-out is ~18× the per_item cost, not 1×. If too high, suggest cheaper models via suggest_model. PITFALLS — Estimates are coarse — some nodes (logic, input) cost 0; some (video generation) can be 10x the median image cost. When total_is_lower_bound is true, dynamic fan-out nodes are counted at their statically-known factor only — compute per_item × N yourself from the N you designed (e.g. the block count you told the LLM to output) and quote the user that. If exceeds_runtime_cap is non-empty, DO NOT trigger — the run will fail mid-execution after upstream nodes have billed. Execution has NO automatic spend ceiling tied to this estimate — pass max_credits on trigger_run/trigger_app (this estimate × a safety factor, e.g. 2×) so the run stops cleanly at your cap instead of billing every iteration until the org balance runs out.
estimate_run_cost
WHAT — Returns the bound MCP session's identity: org id, user id (if any), client id, auth source, granted scopes, and the org's workspaces (with the default one flagged). WHEN — Call this ONCE at session start to confirm the connection is working, understand which org you're operating on, and learn the available workspace ids. NEXT — Use the returned org / scopes to decide whether the user's request is feasible (e.g. don't attempt trigger_run without 'runs:execute' in scopes). Most orgs have ONE workspace and you never need to think about it. When there are several and the user wants a specific one, pass its id as `workspace_id` to create_agent / search / the list resources; omit it to use `default_workspace_id`. PITFALLS — userId is null on API-key auth (no human is logged in); attribute writes to the org owner via Orisu's internal resolver. scopes is a Set — convert to Array if you need to share it elsewhere. Don't pass workspace_id unless the user actually manages multiple workspaces — the default is right for the common case.
who_am_i
WHAT — Returns the actual input + output ports a node exposes for a given config, including dynamic-arity expansion, PLUS its full config-field schema: config_fields (authored key/label/type/default/options), config_defaults, schema_fields (every Zod-derived config key with type/enum/min/max/description), and — for model-bound nodes (generate_image, generate_video, ...) — capability_kind and models[] (every compatible model id + that model's own aspect_ratio/quality/resolution option lists). Each input port also carries its fan-out/arity flags: accepts_array (this port fans out over an upstream ARRAY — the downstream subgraph runs once per item), loop_mode (loop-eligible), multiple (accepts multiple incoming edges), and expand_key/dynamic for config-driven port counts. WHEN — Call this BEFORE wiring edges to any node whose ports depend on config (prompt_concatenator, list_selector, router), AND whenever you need to know whether a port fans out over an array (accepts_array). ALSO call this before setting ANY node's config — it's the single call that answers both 'what ports does this node have' and 'what config keys/models/options are valid', so you never have to guess a field name (brand_context's companyName, human_review's instructions, etc.) or a model's aspect ratio. Skipping this is the #1 reason graphs fail semantic validation. NEXT — Use the returned port ids in your GraphSpec edges (sourcePort / targetPort). A port with accepts_array will map a single node over an upstream array. Use config_fields/schema_fields keys (camelCase) for config, and for model-bound nodes pick config.model from models[] then a value from that model's own fields[].options. Then call validate_graph to confirm the wiring works. PITFALLS — Pass the EXACT config you intend to commit — different `elements` count produces different port lists. models[] excludes deprecated variants. For a bird's-eye view across many node types at once, orisu://nodes (catalog) and orisu://nodes/{type} (single-node) carry the identical config schema and are cheaper to read in bulk.
get_effective_ports
WHAT — Returns the exact { node_id, value_type, example } per input-node in the agent's latest graph. The `inputs` map you pass to trigger_run keys off these node_ids; each value should match the value_type (string for text_prompt; { url, key, contentType, size, name } for upload_*). WHEN — Call BEFORE trigger_run / trigger_app for any agent whose inputs you haven't seen before. Cheap (one DB read), saves you a round-trip when trigger_run rejects with VALIDATION_FAILED because the shape was wrong. NEXT — Build trigger_run's inputs arg as { [node_id]: value } using the returned shapes — text_prompt nodes take a string, upload_* nodes take an AppInputFileValue from upload_asset's response (url + key + contentType + size + name). PITFALLS — upload_* nodes do NOT take `{ asset_id }` despite what older docs suggest — the validator wants the full file shape. Use upload_asset's url/storage_key/size_bytes/content_type/filename fields, mapping size_bytes→size, content_type→contentType, filename→name.
get_run_inputs_schema
WHAT — Generates a public read-only share link for an agent's current graph (the studio share page). Returns the full share_url — hand THAT to the user verbatim. WHEN — Use when the user wants to share their workflow with someone outside the org (link in chat, embed in a doc). For runnable sharing (inputs + run button), publish_app instead. NEXT — Return the `share_url` field to the user EXACTLY as returned — do not rewrite its domain. (`share_path`/`share_token` are also returned if you need to build the link yourself.) They can revoke at any time via unshare_agent. PITFALLS — Use the returned share_url as-is — do NOT guess or swap the host (the share page is served by the app origin, not the marketing domain). Share links carry the CURRENT graph at access time, not a snapshot — edits made later are visible to anyone with the link. Sensitive config fields (API keys, private URLs) are scrubbed automatically, but only if marked sensitive in the node definition.
share_agent
WHAT — Lists canvas comments on an agent — both free-form canvas annotations and node-bound comments — including reply threads. Returns resolved and unresolved by default. WHEN — Use before editing or rebuilding an agent to surface team feedback, reviewer notes, and open questions. Gives full context on what the team thought was wrong or worth improving. NEXT — Read the agent's graph (orisu://agents/{id}) to understand which nodes are referenced by anchor_node_id, then address the feedback in replace_graph or reply via the Orisu UI. PITFALLS — Includes resolved comments by default — pass resolved:false to see only open threads. Do NOT resolve or delete comments programmatically; humans manage comment state in the Orisu UI.
list_comments
WHAT — Lists recent runs in the current org, newest first, with optional status / agent filters. WHEN — Use whenever the user references a run without giving an id ('show me the last failed run', 'what's still running'). Cheaper than scanning orisu://runs/{id} blindly. NEXT — Pick a run_id from the results, then call orisu://runs/{run_id} for per-step outputs, asset URLs, and errors. PITFALLS — Returns at most 50 rows per call (default 20) — there is no cursor pagination here; if you need more history, walk orisu://agents/{id}/versions or filter narrower. error_summary may be null on completed/queued runs.
list_runs
WHAT — Moves an asset to trash (soft delete — sets deletedAt). It stops appearing in search / list_assets / previews immediately; a background cron purges trashed assets after 30 days. WHEN — Use when the user asks to remove/clean up a specific asset from their library. For agents use delete_agent; this is media only. NEXT — The asset is recoverable from the studio trash until the 30-day purge. To keep it, don't delete — nothing here un-trashes it (restore is a studio action). PITFALLS — Requires assets:write scope. Soft, not hard: storage bytes persist until the purge. Deleting an already-trashed or unknown id returns ASSET_NOT_FOUND (idempotent — it's already gone).
delete_asset
WHAT — Patches ONE node on an agent — config is MERGED (send only changed fields), value replaces an input node's content, label renames it. Creates a new (minor) version; node positions are preserved. WHEN — Use for any single-node change: swap a model, tweak a prompt/aspect ratio, rename. This replaces the resend-the-whole-graph pattern for small edits — reach for replace_graph only when the STRUCTURE (nodes/edges) changes. NEXT — Call trigger_run({ agent_id }) to execute with the new config. The canvas re-renders inline from this result. PITFALLS — config is a partial MERGE — never send the full config back (a stale full copy can revert concurrent changes). Keys are camelCase (aspectRatio, not aspect_ratio); check warnings[] in the result for ignored/shadowed keys. Pass base_version_id from view_agent to get VERSION_CONFLICT instead of lost updates. A config change that removes in-use dynamic ports fails with the dangling edges listed. include_graph defaults to true (full graph, for inline canvas re-render); pass false for bulk/scripted edits to get back only the patched node + version, ~10x smaller.
update_node_config
WHAT — Runs ONE pure, deterministic node (prompt_concatenator, split_text, list_selector, if_else, text_prompt, rename_asset) in isolation and returns its output. Costs 0 credits, no side effects, no agent needed. WHEN — Use while authoring to test a deterministic step — see what a prompt_concatenator joins to, how split_text tokenizes, which branch if_else takes — WITHOUT a full trigger_run. Model/billed nodes (generate_*, edit_*, generate_text, scrapers) are NOT previewable; use trigger_run for those. NEXT — Feed the previewed output shape into your GraphSpec wiring, or adjust config/inputs and preview again. Nothing is persisted. PITFALLS — inputs is keyed by INPUT PORT id (e.g. input_texts), not node id; strings are treated as text, or pass full Data envelopes. list_selector in selectionMode:'random' is non-deterministic — pin an index/first mode for a stable preview. config keys are camelCase (see orisu://nodes/{type}).
preview_node
WHAT — Renders assets inline: returns image/audio bytes as viewable/playable media content blocks, plus each asset's metadata and a permanent URL. This is HOW you show an asset to the user in the chat. WHEN — Use whenever the user wants to SEE or hear an asset — 'show me that image', 'preview the last render', 'play the audio'. Prefer this over telling the user to open a URL, and over the orisu://assets/{id} resource (many hosts, e.g. ChatGPT, can't read resource URIs from a tool flow — they answer 'Unknown resource'). NEXT — Video (no inline block exists) and oversized media return url-only — surface the url. To reuse an asset in a workflow, pass { kind, assetId } to an upload_* node input. PITFALLS — Max 8 ids per call; images/audio over ~5MB come back url-only (too big to inline). Ids from another org, or unknown ids, are reported in the text summary and skipped — never fatal.
preview_asset
WHAT — Publishes an agent as an end-user-facing app: a stable URL + input schema that anyone in the org (or beyond, if shared) can run without seeing the graph. WHEN — Use when the user wants to expose a workflow for repeated triggering ('make this a reusable tool for my team'). For one-off shares, use share_agent instead. NEXT — Return the app_id; subsequent runs are triggered via trigger_app (NOT trigger_run). The app schema is at orisu://apps/{id}. PITFALLS — Publishing pins the app to a specific version — editing the agent does NOT update the app until you re-publish. The input schema is derived from the agent's `app_input`-marked nodes; if none are marked, the app has no inputs and runs with whatever defaults the graph holds.
publish_app
WHAT — REPLACES an agent's entire graph (nodes + edges) atomically, creating a new version. WHEN — Use for substantial edits to an existing agent. For metadata-only changes (name, description, thumbnail) use update_agent. For a fresh agent use create_agent. NEXT — Call trigger_run({ agent_id }) to execute the new graph. The change renders in the in-chat canvas; no separate view is needed. PITFALLS — This is a full replacement, NOT a merge — anything not in the new spec is removed. Reuse node ids across versions when you want UI continuity; brand-new ids reset run-history attribution. Always validate_graph first; replace_graph rejects invalid specs. Pass base_version_id (from view_agent's latest_version_id) so a concurrent edit fails with VERSION_CONFLICT instead of silently overwriting it.
replace_graph
WHAT — Restores an agent's graph to a prior version, creating a new version (so history is preserved). WHEN — Use when the user wants to revert a bad edit ('undo my last change') or roll back to a known-good state. To inspect versions first, read orisu://agents/{id}/versions. NEXT — Optionally call trigger_run to verify the restored graph works. The studio canvas updates to match the restored version automatically. PITFALLS — Restoring CREATES a new version (which then becomes the latest) — it does NOT remove versions in between. Version numbers monotonically increase; you cannot revert to a previous version number, only re-apply that version's graph as a new one.
restore_version
WHAT — Revokes the public share link for an agent, returning it to private. WHEN — Use when the user explicitly asks to revoke sharing, or when sensitive content was accidentally included. NEXT — No follow-up needed. The previous share URL returns 404 immediately. PITFALLS — Anyone who already cloned the agent retains their copy — unshare only revokes future access via the link, not past actions.
unshare_agent
WHAT — Triggers an execution of a published app, validating inputs against the app's defined schema. WHEN — Use when triggering an Orisu app (published via publish_app). For triggering an agent that is NOT yet an app, use trigger_run. NEXT — Call wait_for_run({ run_id }) to block until terminal status; treat outputs same as trigger_run. PITFALLS — Read orisu://apps/{id} first to know the input schema — missing or wrong-shape inputs are rejected with VALIDATION_FAILED. The app runs against the PINNED version, not the agent's current graph; if the agent was edited after publishing, re-publish_app first.
trigger_app
WHAT — Triggers an execution of an agent's latest version, with optional input-node values for this run only. WHEN — Use after create_agent / replace_graph to actually run the workflow. For workflows already shaped as apps (with input schema), use trigger_app instead — it validates the inputs against the published schema. NEXT — Call wait_for_run({ run_id }) to block until a terminal status (completed, failed, cancelled, paused) — cheaper than polling orisu://runs/{run_id}. On 'completed', pull asset URLs from steps[]. On 'paused', the workflow is waiting on a human_review — call submit_review. PITFALLS — Inputs are a run-scoped overlay, NOT a mutation — they do not change the saved graph. Asset URLs in the run output have a TTL; download / re-upload via upload_asset if the user needs them later. Pass idempotency_key when retrying or you will spend credits twice. Runs have NO spend ceiling unless you pass max_credits — for fan-out graphs (loop edges, split_text) always set it from estimate_run_cost × safety factor.
trigger_run
WHAT — Runs an agent UP TO a target node: the node plus everything it transitively depends on (its ancestor-closure), reusing cached unchanged upstream steps. Nothing downstream of the target runs. WHEN — Use to test ONE branch of a workflow cheaply — e.g. verify a mid-graph generate step before running the whole pipeline. For the full graph, use trigger_run. NEXT — Call wait_for_run({ run_id }) to block until terminal. Outputs for the target + its ancestors are on the run; downstream nodes were not executed. PITFALLS — v1 takes NO input overrides — it runs the values already saved on the graph. Set an input value with update_node_config first, then trigger_node_run. Only the target's ancestors run; a node OUTSIDE that closure keeps whatever output it already had (or none).
trigger_node_run
WHAT — Sets the stored value of MULTIPLE input nodes (text_prompt, upload_*, element) in ONE call and ONE version bump — the bulk form of update_node_config's `value`. WHEN — Seeding a template's inputs or preparing an agent for a run — anywhere you'd otherwise chain update_node_config calls. NEXT — trigger_run, or estimate_run_cost first. PITFALLS — Values use update_node_config's exact semantics (string for text_prompt; [{ kind, assetId }] or file shape for upload_*; JSON-encoded strings parsed). Non-input node ids are reported per-node and skipped, they don't abort the batch. A MALFORMED value (e.g. a non-JSON string for an upload node) aborts the whole batch atomically — nothing persists; only unknown/non-input node ids soft-fail per-node.
set_input_values
WHAT — Soft-deletes an agent. The agent is hidden from listings and its runs cannot be triggered, but data is preserved for ~30 days for recovery. WHEN — Use when the user explicitly asks to remove a workflow. Confirm with the user first — there is no undo from the agent's perspective. NEXT — No follow-up needed. The agent disappears from orisu://agents and search({ kind: 'agent' }). PITFALLS — Soft delete, not hard delete — the data persists server-side until cleanup. Do NOT use this to 'reset' an agent for editing; that's what replace_graph is for. Triggering runs on a deleted agent will fail with NOT_FOUND.
delete_agent
WHAT — Returns ranked model variants from the @repo/models catalog, filtered by media kind + capability. WHEN — Use BEFORE create_agent / replace_graph when picking a model for a generate_* node. Cheaper and more direct than reading the whole orisu://models catalog and parsing client-side. NEXT — Use the top suggestion's variant_id as the `model` config field on the generator node. Confirm capability details with orisu://models/{variant_id} if you need exact aspect ratios / max durations. PITFALLS — Ranking is keyword match against family + variant descriptions, not semantic. If the suggestions look wrong, drop `use_case` (it's a hint, not a constraint) and pick from the unfiltered list. `aspect_ratio` is enforced strictly — typos like '16x9' drop everything.
suggest_model
WHAT — Searches the Orisu catalog by free text across one resource kind at a time. WHEN — Use whenever the user mentions a workflow / model / asset by approximate name. Cheaper and more direct than reading the whole orisu://agents or orisu://models resource and grep-ing client-side. NEXT — Pick the top result's id, then call the typed reader (orisu://agents/{id}, orisu://apps/{id}, orisu://nodes/{type}, orisu://models/{variant_id}) for full detail. To SHOW an asset hit to the user, call preview_asset({ asset_ids }) — it renders image/audio inline; do NOT rely on reading orisu://assets/{id} (tools-first hosts can't). PITFALLS — One kind per call — there is no cross-kind 'find anything'. Empty query returns everything; pass a limit. Ranking is substring + word-boundary boost, not semantic — short queries match broadly.
search
WHAT — Patches an existing brand kit — only the fields you pass change (colors, fonts, logo_url, tagline, description, voice, guidelines, name). WHEN — Use when the user corrects or extends their brand ('our primary is #C4823A now', 'add our tagline'). Read orisu://brand-kits/{id} first to see current values. NEXT — No follow-up needed — brand_* nodes referencing this kit pick up the new values on the next run. PITFALLS — Pass ONLY changed fields; omitted fields are kept, but an explicitly passed field REPLACES the whole value (colors is replaced wholesale, not merged — send the full new palette).
update_brand_kit
WHAT — Updates an agent's metadata fields (name, description, thumbnail) without touching its graph. WHEN — Use when only the metadata is changing (rename, re-describe, swap thumbnail). For graph changes, use replace_graph. NEXT — No follow-up call is needed — the update applies immediately and is visible in orisu://agents/{id}. PITFALLS — Pass ONLY the fields you want to change; omitted fields are NOT cleared. Thumbnail URLs must be publicly reachable (Orisu will re-host them — local file paths or signed URLs that expire are wrong inputs).
update_agent
WHAT — Uploads a file (via URL or data URL) into Orisu's storage and creates an asset row referencing it. WHEN — Use when the user provides external content that a workflow needs (an image to edit, a video to caption). For Orisu-generated assets, the trigger_run / trigger_app response already includes URLs. NEXT — Feed the result into trigger_run / trigger_app inputs for an upload_image / upload_video / upload_audio / upload_file node. Those nodes take EITHER an asset reference { kind, assetId } (kind ∈ image|video|audio|file — from this tool's `kind` + `asset_id`) OR the full file shape { url, key, contentType, size, name } (map storage_key→key, size_bytes→size, content_type→contentType, filename→name). They do NOT accept a bare { asset_id }. PITFALLS — Provide EITHER url OR data_url, not both. data_url is preferred for files <5MB; for larger files, host the bytes somewhere reachable and pass url — or, from a non-agent client that holds raw bytes, POST multipart/form-data to `/v1/assets/upload` (API key) which returns the same asset id without base64. Filename is optional but recommended — improves the asset's display name in orisu://assets.
upload_asset
WHAT — Reads an agent's current graph (nodes + edges + per-node config) and renders the read-only canvas inline. WHEN — Use when the user references an existing agent and you need to know its structure before editing. Cheaper than reading orisu://agents/{id} when you also want the inline visualization. NEXT — If editing: call replace_graph with the modified GraphSpec, passing this response's latest_version_id as base_version_id so a concurrent edit fails with VERSION_CONFLICT instead of being overwritten. If running: call trigger_run({ agent_id }). If branching: call clone_agent first to keep the original intact. PITFALLS — Returns the LATEST saved graph, not the in-flight version of any running execution. Run outputs are NOT in this response — fetch orisu://runs/{run_id} for those.
view_agent
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.