RFC · Draftversion 0.12026-06-17status: open for comment

The FlowDesk Constitution

A small, machine-readable policy that bounds what AI agents may do in a workspace — enforced in-function before any tool call runs, with violations recorded to the tamper-evident audit log. This is the schema that's actually enforced today, published openly so other tools can read, write, and adopt it.

1 · Abstract

The Constitution is a JSON/YAML object attached to a workspace (and, optionally, narrowed per agent key). Before an agent action executes, the gateway evaluates the action against the Constitution. A violation is denied (HTTP 403) and audited; a low-confidence action may be routed to a human approval queue instead of executing. The policy is intentionally small and bounded — every field is enforceable, not advisory.

2 · Policy schema (v0.1)

fieldtypesemantics
max_priorityenum: low·medium·high·criticalAgents may not create or raise a task above this priority.
forbidden_termsstring[]Action is denied if the task title/body contains any of these (case-insensitive).
forbidden_assigneesstring[]Agents may not assign work to these people/roles (e.g. CEO).
forbidden_tagsstring[]Agents may not apply these tags.
quiet_hours_utc{ start:int, end:int }Hours (0–23, UTC) during which agent writes are blocked.
max_creates_per_dayinteger ≥ 0Per-agent daily cap on task creation.
require_approval_below_confidencenumber 0–1Actions whose AI confidence is below this threshold route to the human approval queue instead of executing.
// All fields are optional. An absent field means "no constraint." Unknown fields are ignored (forward-compatible). The policy is sanitized to this known set on write — you cannot smuggle in unenforced rules.

3 · Examples

YAML

# workspace constitution max_priority: high forbidden_terms: - "delete all" - "wire transfer" forbidden_assignees: ["CEO"] quiet_hours_utc: { start: 22, end: 6 } max_creates_per_day: 200 require_approval_below_confidence: 0.7

JSON

{ "max_priority": "high", "forbidden_terms": ["delete all", "wire transfer"], "forbidden_assignees": ["CEO"], "quiet_hours_utc": { "start": 22, "end": 6 }, "max_creates_per_day": 200, "require_approval_below_confidence": 0.7 }

4 · JSON Schema (draft-07)

{ "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://flowdesk-landing-2yz.pages.dev/constitution-spec/v0.1.json", "title": "FlowDesk Constitution v0.1", "type": "object", "additionalProperties": false, "properties": { "max_priority": { "enum": ["low","medium","high","critical"] }, "forbidden_terms": { "type":"array", "items":{"type":"string"} }, "forbidden_assignees": { "type":"array", "items":{"type":"string"} }, "forbidden_tags": { "type":"array", "items":{"type":"string"} }, "quiet_hours_utc": { "type":"object", "properties":{"start":{"type":"integer","minimum":0,"maximum":23},"end":{"type":"integer","minimum":0,"maximum":23}} }, "max_creates_per_day": { "type":"integer", "minimum":0 }, "require_approval_below_confidence": { "type":"number", "minimum":0, "maximum":1 } } }

5 · Enforcement semantics

6 · Conformance & versioning

An implementation is v0.1-conformant if it (a) accepts a policy matching the schema above, (b) rejects unknown fields on write, (c) enforces each present field with the stated semantics, and (d) audits denials and approvals. Versions are MAJOR.MINOR; new optional fields bump MINOR (back-compatible), removing/changing a field bumps MAJOR. This is v0.1, Draft — open for comment at agents@flowdesk.app. The intent is a small, shared, enforceable vocabulary for agent policy — adopt it, extend it, tell us where it's wrong.