A deployed flow entry inside one space: identity, run entry and activity switch.
The runnable identity of a deployed flow.
An agent names a flow entry point inside exactly one space — it is the thing external clients actually run. An agent cannot exist outside a space: the space is chosen at creation, and deleting the space deletes its agents. The record itself is deliberately light — a display name, the agentId slug, the run entry (startFlow + startNode), an active switch and timestamps.
Two identities matter and must not be confused: the generated row id is what admin pages address, while the agentId slug is what clients run by — and the same slug is what an Agent node's agentId setting names inside a flow. So there is just one human-facing id, the slug, used everywhere a flow or a client refers to the agent, and one row id used only by the admin console. Beyond identity, every agent carries two independent settings channels — runtime settings readable by your flow scripts, and partner-facing front settings delivered to partner sites — each capped at 1,000,000 characters. Agent lists stay fast no matter how large the settings grow.
agent not found in space.startFlow-startNode (for example MainFlow-Start). Both names are strict PascalCase with letters and digits only — a dash inside either name would corrupt the join, which is why dashes are forbidden.system/settings scripting resource. Saved on its own page, never delivered to partners.Exact validation — the platform is the authority; the UI mirrors it for fast feedback.
^[a-z]+(-[a-z]+)*$: lowercase letters in single-dash-separated words, no digits, no leading/trailing/double dashes; 3–100 characters; unique across the entire platform. The input sanitizes as you type — uppercase is lowercased, digits and spaces never enter the field.^[A-Z][A-Za-z0-9]*$: strict PascalCase, letters and digits only, 3–60 characters each, no dashes — the run entry is derived by joining them with a dash, so an internal dash would corrupt it.1,000,000 characters each; the live counter in the editor mirrors exactly the limit enforced on save. Saving an empty value legitimately clears the settings.^[a-z][a-z0-9]*(-[a-z0-9]+)*$ (kebab-case, digits allowed here, unlike the agent slug) and unique among the rows. Required is type-relative: 0 is a real number, false is a real boolean, but an untouched rich-text value (<p></p>) counts as empty.10 agents (a per-space limit, not an organization-wide number). Past the cap a create is refused; need more, deploy into another space.406 Not Acceptable with no detail attached: a duplicate slug, an unknown id and a validation failure all look identical. This is deliberate — a probing caller learns nothing about what exists or why a request failed.Both channels store a set of typed field rows — { displayName, fieldId, fieldType, required, value, valid }:
| fieldType | Editor | Notes |
|---|---|---|
input | Single-line input | The default type |
text | Textarea | Multi-line plain text |
richtext | Rich-text editor | An untouched value counts as empty for a required field |
number | Numeric input | 0 is a valid required value |
password | Masked input | Masked in the editor |
boolean | Checkbox | false is a valid required value |
array | List of string items | Value is a list of strings |
What happens between filling the form and a client getting an answer.
?space= URL parameter.StartFlow-StartNode (for example MainFlow-Start).r_agent webhook notifies partner integrations, and the UI redirects to the new agent's detail page.{fieldId: value} map (valid rows only) through system/settings; front settings stay unreachable from scripts.agent webhooks (notify-then-fetch)
r_agent fires on agent create / update / delete AND on a runtime-settings save r_agent_front_settings fires ONLY on a front-settings save delivery: a notification POST {"synch-data":["<kind>"]} to every webhook URL your organization has configured; the body names WHAT changed, never the data — on receipt, fetch the fresh values through the API
/agents — Agent Management landing, with cards leading to Create and List./agents/list — space-scoped: a space picker at the top, and ?space=<id> in the URL is the source of truth (refresh, shared links and back/forward land on the same view); nothing is fetched until a space is chosen — there is deliberately no cross-space agent list. Columns: Display Name, Agent ID, Entry, Status (Active / Inactive) and a Visit link./agents/create — the create form: required Space select, Display Name with slug-follow into Agent ID, input-level sanitization on the ID, and the PascalCase hint on Start Flow / Start Node./agents/<id> — Agent Details: a cross-link card to the owning space, the Active switch (inactive agents are refused at run time), the Agent ID with copy-to-clipboard and the rename warning, Save gated on real changes (dirty check), and a two-step Delete (Delete → Confirm delete) returning to the space's agent list./agents/<id>/json-settings and /agents/<id>/front-settings — one shared settings card per channel: the settings row builder (read-only row summaries; all editing happens in a Definition modal and a per-type Value modal), a valid/invalid badge, a live character counter ("N / 1,000,000 - allowed characters", red over the limit), and Update Settings enabled only when valid and under the limit and changed from the load-time baseline./agents/<id> — a Rebuild Resource Cache button rebuilds this agent's served configuration on demand, a shortcut to the same action on the Cache page. It is gated by the cache permission (cache read, cache:w write), separate from the edit permission, so a cache manager can refresh it while an editor without cache rights never sees the button. You rarely need it — normal saves refresh the copy automatically. See Resource Cache.
The agent detail screen — display name, the agentId slug with copy, the run entry, the Active switch, and Save and Delete.
hasSettings flag — and it fires a different webhook kind. A partner watching only r_agent will never learn front settings changed.valid: false. You can save a set containing invalid legacy rows (the editor blocks only new violations) — those rows simply never reach scripts or partners. If a field "isn't showing up" at run time, check its valid stamp first.hasSettings: boolean, and it tracks the runtime channel only. The settings travel exclusively through their dedicated settings pages.406.Keen Agents 2026
Documentation
Release 15