For teams running AI agents

Process governance for AI agents.

ConvOps is the operations layer for AI agents. Your team's process, run step by step by Claude Code, Codex, Cursor, ChatGPT or any MCP client. Agents stop at approval gates they cannot skip, share one memory, and every change lands in an audit trail.

Your agents do the work.ConvOps runs the operation.

An MCP serverAttended or unattendedNothing to migrate

scroll. this page is a workflow._

your AI toolskeep them
Claude Code
Cursor
ChatGPT
Codex
MCP
ConvOps owns the governancecloud or self-hosted
Workflow enginesteps, in order
Braindecisions, reasons
Governancegates · audit · roles
waiting for workexample
dispatch
you own the execution layer
Your machinelocal
Your runnercustom
Isolated runKubernetes
your Kubernetes · convops-runsone pod per run
free
free
free
free
connect

The whole install is one line.

ConvOps is an MCP server. Paste it into Claude Code, Cursor, ChatGPT, or any MCP client. On first use it opens a browser to sign in. No keys, no config files, nothing to migrate.

  • your client stays your client
  • sign in once, in the browser
  • any MCP client works

setup guides:Claude Code · Claude and Cowork · Codex · ChatGPT · Cursor · OpenCode

Claude Code · terminalmcp server
in short

What is ConvOps?

The operations layer for AI agents. Your AI client does the work; ConvOps holds the process it follows, the gates it stops at, what the team learned and the record.

key facts · october 2026

  • ConvOps is the operations layer for AI agents: an MCP server that holds your team's process as workflows, with approval gates, a shared memory and an audit trail. It runs no AI models.
  • Your AI client connects to https://mcp.convops.app/ over MCP and signs in with OAuth on first use. It works with Claude Code, Claude (desktop, web and Claude Cowork), OpenAI Codex, ChatGPT, Cursor and OpenCode, and with any other MCP client.
  • The agent receives one workflow step at a time. The engine, not the model, checks each gate before the workflow moves on, and a refusal lists every unmet condition.
  • Steps inside one workflow run in order. Parallel work runs as child tasks that share an order, and the parent waits until all of them are done.
  • Every change to a task or workflow instance is written to the audit trail with two identities: the label the agent declares and the verified account behind the call.
  • Neomanex, the company that builds ConvOps, runs its own engineering, content and releases on it: 64 workflows as of October 2026.
  • As of October 2026, ConvOps has four plans: Free at $0, Pro at $79 a month ($66 billed annually), Business at $299 a month ($249 billed annually) and Enterprise from $2,500 a month.

best for

  • Teams whose AI agents do repeatable work (bug fixes, releases, content, outreach) that must follow the same process every time.
  • Leads who need a named person to approve specific steps, and a record of who approved what.
  • Teams on more than one AI client that want one process and one memory across all of them.
  • Organizations that need to self-host agent governance on their own Kubernetes.

not for

  • Building or hosting AI models or agents: ConvOps runs no models. You bring Claude Code, Codex, Cursor or another MCP client.
  • Drag-and-drop app-to-app automation. There is no visual canvas; you describe workflows in conversation.
  • Durable execution of your own application code. That is what Temporal is built for.
  • One-off chats where nothing repeats.

updated

  1. describe. Say the process. That is the interface. Describe how the work should go, in plain language, from the AI client you already use. ConvOps compiles it into steps, gates, decisions and branches.
  2. route. Every task gets the right workflow. Define a process once. Each new task is matched to the workflow that owns it, by type, tags, project or plain language. Nobody wires anything per task.
  3. trigger. Create a task. That is your job. Type it, or let your stack or a schedule create it. The workflow attaches itself and hands step one to an agent. No prompt written, nothing assigned.
  4. memory. Recall first. Exactly where you choose. Write "recall first" into a step and the agent gets memories, routes and related tasks in one query. Task notes hand state to whoever runs the next step.
  5. step. A step is not a prompt. The workflow hands over one instruction when the work reaches it. No forty page brief, no system prompt going stale. The model sees only what is next.
  6. decision. One step. Three exits. A decision step reads the task's real fields and picks a path. One exit invokes a whole sub-workflow, runs it to the end, and returns.
  7. parallel. Three agents. One start. The fix, the tests and the docs become three child tasks with the same order, so they start together. Each gets its own agent on its own executor. The parent waits until all three are done.
  8. executor. Your machines. Your agents. Your rules. ConvOps governs the run. Your executors do the work: Claude Code on your machine, OpenCode on your runner, or an isolated run on Kubernetes.
  9. gate. It does not ship until you say so. A gate is structural. It lives in the workflow, not in wording a model can argue past. This one waits for the three child tasks, then for you.
  10. policy. Change the rule, not the rails. Policies are guidance assigned to workflows and injected into the active step. Edit one and every run in flight reads the new text on its next step.
  11. dispatch. Nobody starts it. That is the point. Give the workflow a schedule and it stops waiting for you. Each fire creates a task that carries the whole process. You govern it at the gates.
00describe● you

Say the process. That is the interface.

Describe how the work should go, in plain language, from the AI client you already use. ConvOps compiles it into steps, gates, decisions and branches.

your AI clientclaude · chatgpt · yours

Describe the process…

One message in. One durable process out.

{ } payload real engine shape
payload
workflow_template_create({
  "slug": "bug-fix",
  "steps": 7,
  "gates": 1,
  "decisions": 1,
  "child_tasks": 3
})
01route◆ engine

Every task gets the right workflow.

Define a process once. Each new task is matched to the workflow that owns it, by type, tags, project or plain language. Nobody wires anything per task.

incoming tasks1/3

New tasks, matched to the workflow that owns them

Payment webhook returns 500type: bug
next item
bug-fixapplies to type: bugthis run
idle
contentapplies to tag: content
idle
featureplain language match
idle

Three tasks arrive. Each lands on exactly one workflow.

{ } payload real engine shape
payload
{
  "applies_to": [{
    "type": "bug",
    "vertical": "development",
    "default": true
  }],
  "classification_examples": [
    "Checkout crashes on Safari",
    "Payment webhook returns 500"
  ]
}
02trigger● you

Create a task. That is your job.

Type it, or let your stack or a schedule create it. The workflow attaches itself and hands step one to an agent. No prompt written, nothing assigned.

event timeline · a91f24c8live

The task carries the workflow. Not the prompt.

{ } payload real engine shape
payload
{
  "id": "a91f24c8",
  "title": "Payment webhook returns 500",
  "type": "bug",
  "workflow": "bug-fix",
  "step": "1 of 7"
}
03memory● you

Recall first. Exactly where you choose.

Write "recall first" into a step and the agent gets memories, routes and related tasks in one query. Task notes hand state to whoever runs the next step.

  • context_query: memories, routes and related tasks in one call
  • Task notes: decisions, blockers and context for the next step
  • Auto-capture is three switches, off by default
context_query · step 1

"payment webhook 500"

memorieswhat past runs learned
routeswhere the code lives
related taskswork already done

Recall is a step you write. Capture is a switch you flip.

{ } payload real engine shape
payload
{
  "context_query": "payment webhook 500",
  "returns": {
    "memories": ["X-Sig header moved in v2"],
    "routes": ["api/payments/webhook.py"],
    "tasks": ["Retry storm on webhooks"]
  },
  "org_settings": {
    "brain.auto_memory_progress": true,
    "brain.auto_memory_decisions": false
  }
}
04step✦ agent

A step is not a prompt.

The workflow hands over one instruction when the work reaches it. No forty page brief, no system prompt going stale. The model sees only what is next.

  • Your rules live in the step: "notify me", "never touch prod"
  • Edit a step once and every future run inherits it
reproduce
failing testworking
unclear?
fix · tests · docs
approveapproval
release
verify
agent context · step 2 of 7implementer
in context now · failing-test

Write the test that reproduces the 500. Red first. Notify me when it goes green.

not handed over
reproduceunclear?fix · tests · docsapprovereleaseverify

Step 2 of 7. The other six stay out of context.

{ } payload real engine shape
payload
{
  "id": "failing-test",
  "name": "Failing Test",
  "agent": "implementer",
  "status": "in_progress",
  "instructions": "Write the test that
     reproduces the 500. Red first.
     Notify me when it goes green."
}
05decision◆ engine

One step. Three exits.

A decision step reads the task's real fields and picks a path. One exit invokes a whole sub-workflow, runs it to the end, and returns.

decision · step 31/3

unclear? Read the task, pick one exit.

Payment webhook returns 500reproduced · cause known
next item
godefault · on to the fixthis run
idle
deep-researchinvokes a sub-workflowinvoke
idle
closetag: cannot-reproduce
idle

Same task, same rules, every single run.

{ } payload real engine shape
payload
{
  "decision": true,
  "conditions": [
    { "id": "close",
      "when": { "task_field": "tags",
                "contains": "cannot-reproduce" } },
    { "id": "unclear",
      "invoke": "deep-research" },
    { "id": "go", "when": "default" }
  ]
}
06parallel✦ agents

Three agents. One start.

The fix, the tests and the docs become three child tasks with the same order, so they start together. Each gets its own agent on its own executor. The parent waits until all three are done.

3 child tasks · step 4

Fix, test and document the webhook

fixclaude code · local
testsopencode · runner
docsisolated run

The intelligence is replaceable. The process is not.

{ } payload real engine shape
payload
{
  "children": [
    { "title": "fix", "order": 1 },
    { "title": "tests", "order": 1,
      "executor": "build-runner" },
    { "title": "docs", "order": 1,
      "executor": "isolated-sonnet" }
  ],
  "parent_gate": { "wait_for_children": true }
}
07executor● you

Your machines. Your agents. Your rules.

ConvOps governs the run. Your executors do the work: Claude Code on your machine, OpenCode on your runner, or an isolated run on Kubernetes.

  • Agent-neutral by design: Codex, Kimi and others plug in the same way
  • The step setting wins, then the task, then the workspace default
checked top to bottomfirst set wins
01Step executorset on one workflow stepyour runner
02Task executorset on the tasknot set
03Workspace defaultworkspace settingsyour machine
runs on
checking layers

from Step executor 

The tests step pins your runner, on OpenCode. The step wins.

You own the execution layer. ConvOps owns the governance.

{ } payload real engine shape
payload
{
  "executors": [
    { "slug": "local", "backend": "local",
      "agent": "claude-code" },
    { "slug": "build-runner", "backend": "runner",
      "agent": "opencode" },
    { "slug": "isolated-sonnet",
      "backend": "isolated",
      "agent": "claude-code",
      "time_limit_s": 14400 }
  ],
  "precedence": "step > task > workspace default"
}
08gate● you⏸ waiting for you

It does not ship until you say so.

A gate is structural. It lives in the workflow, not in wording a model can argue past. This one waits for the three child tasks, then for you.

  • requires_approval: a person has to say go
  • wait_for_children: the child work lands first
ConvOps · approvalwaiting for you

Payment webhook returns 500

step 5 of 7 · approve · "Ship it?"

  • fix
  • tests
  • docs
  • children 3/3 landed
ApproveRequest changes

example · keep scrolling to approve

main
held for youWaiting: the work sits on its task branch.

Keep scrolling. You are the approval.

{ } payload real engine shape
payload
{
  "id": "approve",
  "gate": {
    "requires_approval": true,
    "wait_for_children": true,
    "prompt": "Ship it?"
  }
}
09policy● you

Change the rule, not the rails.

Policies are guidance assigned to workflows and injected into the active step. Edit one and every run in flight reads the new text on its next step.

policy · tests-firstv1
text · guidance for the agent

Add a test for every fix.

Add a regression test for every fix and link it in the task notes.

assigned tobug-fixfeature
run a91f24c8 · in flightlive

One edit. Every assigned workflow, from its next step.

{ } payload real engine shape
payload
{
  "slug": "tests-first",
  "text": "Add a regression test for every
     fix and link it in the task notes.",
  "enabled": true,
  "assigned": ["bug-fix", "feature"]
}
10dispatch◆ engine

Nobody starts it. That is the point.

Give the workflow a schedule and it stops waiting for you. Each fire creates a task that carries the whole process. You govern it at the gates.

  • Recurrence rules, e.g. every weekday 01:00 UTC
  • A manual trigger, or your app through the SDK
  • Runs dispatch follow-up tasks within a per-run limit
000306091215182101:0003:3005:00
22:30sun · UTCnight window
schedulesUTC
  • 01:00Bug sweepevery weekday 01:00not today
  • 03:30Dependency auditevery day 03:30in 5h 00m
  • 05:00Triage reportevery monday 05:00not today
next: Bug sweep in 2h 30m

You govern the workflow. The workflow governs the system.

{ } payload real engine shape
payload
schedule_create({
  "rrule": "FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR;BYHOUR=1",
  "timezone": "UTC",
  "creates": "task · workflow: bug-sweep",
  "supervision": "gates only"
})
11in the wild

Real processes already run on this.

Not mockups. The shapes of workflows in production today: content that publishes daily, plans that gate on sign-off, bug flows that branch on reality. Pick one.

6 steps1 gate0 decisionsstarts on schedule

A publishing pipeline that fires itself every morning and never fakes a green.

  1. 01

    Fires itself

    An RRULE schedule creates the day’s task. Nobody starts it.

  2. 02

    Recalls before acting

    Queries memory first: yesterday’s context, learned rules.

  3. 03

    Researches and drafts

    Agents source, check and write, one governed step at a time.

  4. 04

    Hard verification gate

    Claims cited, entities verified. A red files a bug task. The loop never fakes green.

  5. 05

    Publishes

    Content ships with its provenance attached.

  6. 06

    Sweeps and closes the loop

    Verifies its own output landed. Tomorrow it all runs again.

12pull

The loop pulls its work. Nothing pushes it.

A schedule wakes the agent. The agent asks a pool, a saved query resolved live. It answers with exactly one task, or nothing. A pool never starts a run.

pools · rotting-bugsexample
filtertype = bugstatus = todostale_days ≥ 3priority, then oldest edit
  • c03dAdd CSV export to reportstasktodoP26d
  • a91fPayment webhook returns 500bugtodoP14d
  • 7e2bCheckout crashes on Safaribugin progressP15d
  • 5b80Refund rounding off by a centbugtodoP29d
  • e4c1Typo on the pricing pagebugtodoP31d
  • 19faLogin link expires too earlybugtodoP23d

the schedule

Weekdays 01:00. The run starts.

the agent asks · call 1

pools_next("rotting-bugs")

…

one task, or nothing

the schedule starts the run · the pool only picks the work

A pool is a query, not a queue

Typed, validated filter leaves, never string-built. Resolved live on every call. Default sort: priority, then oldest edit.

payload
{
  "name": "rotting-bugs",
  "filter": {
    "op": "AND",
    "nodes": [
      { "field": "type", "eq": "bug" },
      { "field": "status", "eq": "todo" },
      { "field": "stale_days", "gte": 3 }
    ]
  },
  "sort": [
    { "field": "priority", "direction": "asc" },
    { "field": "updated_at", "direction": "asc" }
  ]
}
pools_manage · example spec

pools_next: one task, or null

LIMIT 1 in the pool's sort order. An empty pool returns null, not an error, so the workflow can branch on it.

payload
{
  "id": "a91f24c8",
  "title": "Payment webhook returns 500",
  "type": "bug",
  "priority": "P1",
  "stale_days": 4
}
pools_next · example result
13receipts

Autonomy that leaves receipts.

Every run is metered: tokens, cost, time. Every change to a task or a workflow instance is audited, with the agent and the verified human kept apart.

convops · runsexample
runs0
live0
tokens0
spend$0.00
done0/0
taskexecutorstatustokenscosttime
spend by model
opus $0.00 sonnet $0.00 kimi $0.00
audit · tasks and workflow instancesexample
agent · a label it declareshuman · from the verified credential
  • 09:41task · a91f24c8status todo → in_progressimplementerDana Reyes
  • 09:58workflow · bug-fixstep failing-test → fiximplementerDana Reyes
  • 10:12workflow · bug-fixstep fix → approveimplementerDana Reyes
  • 10:31task · a91f24c8status review → completedrelease-botSam Okafor
gate · approveexample
workflow_advance(bug-fix)
the run reaches the gate
only a person opens it

The engine evaluates the gate. Structure, not prose a model can talk past.

  • Field-level before and after on tasks and workflow instances
  • Every workspace behind Postgres row-level security, forced for the table owner too
  • Policies reach the agent inside the active step. Edit one, runs in flight pick it up

One audit row, two identities

actor is the label the agent declares. actor_user_* is derived on the server from the verified credential, never a parameter an agent could forge.

payload
{
  "actor": "implementer",
  "actor_user_name": "Dana Reyes",
  "action": "updated",
  "entity_type": "task",
  "changes": {
    "status": { "old": "review", "new": "completed" }
  }
}
audit row · example

A refused gate, verbatim

workflow_advance returns the unmet conditions. The step stays where it is until they are met.

payload
{
  "current_step": "approve",
  "unmet_conditions": [
    "Requires explicit user approval"
  ]
}
workflow_advance · example refusal
14the execution layer

You own the execution layer.

Run on our cloud, on your own runners, or self-host the whole system on your Kubernetes with one Helm chart. Every run gets its own isolated pod.

ConvOps cloud6 of 8
Engine
Brain
Audit
Web app
Runs
Secrets
MCP over HTTPSoutbound only
Your Kubernetes2 of 8
Models
Repos

Cloud We run the governance. Your AI tools, models and repositories stay yours and connect over MCP.

one run · example

namespaceconvops-runs
podrun-a91fpending
main
agentclaude-code
pushed
sidecar
github-mcpMCP server
task volumekept across stepskept
run secretthis run only
run-a91fsucceededpushedrun record kept
  • no service-account token
  • non-root
  • capabilities dropped
  • network policy
  • time limit 4h
15the record

A system of record behind it.

The engine you scrolled is the one the app renders: workflows from their stored definitions, a dashboard over the live task graph, agents scored by their actions.

Your workspace dashboardcapture
ConvOps dashboard with weekly done, new, in-progress, blocked and overdue counts, a needs-attention list of blocked tasks and stale goals, and recent agent runs with spend.ConvOps dashboard with weekly done, new, in-progress, blocked and overdue counts, a needs-attention list of blocked tasks and stale goals, and recent agent runs with spend.
See what needs you now, what agents are running and how work is moving.
Workflows with real gatescapture
Feature Delivery workflow template showing numbered steps, decision branches and an approval gate, with a details panel listing steps, gates, decisions and which task types it starts on.Feature Delivery workflow template showing numbered steps, decision branches and an approval gate, with a details panel listing steps, gates, decisions and which task types it starts on.
Every task follows a defined path of steps, decisions and approval gates.
Every agent run, trackedcapture
Executions page with running, failed, completed and seven-day spend tiles above a table of dispatched tasks showing executor, backend, run status, outcome, timing and cost.Executions page with running, failed, completed and seven-day spend tiles above a table of dispatched tasks showing executor, backend, run status, outcome, timing and cost.
One table for every dispatched task with executor, outcome, duration and cost.
Inside a single runcapture
Task run tab for "Add CSV export to invoices" showing the execution summary, cost, duration and tokens, a run timeline from dispatch to merge request, and task properties.Task run tab for "Add CSV export to invoices" showing the execution summary, cost, duration and tokens, a run timeline from dispatch to merge request, and task properties.
Open any task to see its executor, cost, tokens and a step-by-step run timeline.
Executors you controlcapture
Executors settings listing custom executor profiles with their runner, backend and model configuration and enabled status, followed by the built-in system executors.Executors settings listing custom executor profiles with their runner, backend and model configuration and enabled status, followed by the built-in system executors.
Named profiles decide which agent, model and runner each task is dispatched to.
Environments per projectcapture
Environments settings table listing environments with their repository count, the repository that receives the work and how many projects use each one as default.Environments settings table listing environments with their repository count, the repository that receives the work and how many projects use each one as default.
Choose what each agent run clones and which repository receives the work.
Pools that feed agentscapture
Pools page with Now, actionable, Next and Rotting horizon cards with trends, a needs-attention list, and a breakdown of which executors and agents pulled work this week.Pools page with Now, actionable, Next and Rotting horizon cards with trends, a needs-attention list, and a breakdown of which executors and agents pulled work this week.
Live queues show what is committed, what is rotting and who pulls the work.
The board by stagecapture
Kanban board with Backlog, To Do, Planning and Ready lanes holding task, bug and phase cards labelled with priority, horizon, project and age.Kanban board with Backlog, To Do, Planning and Ready lanes holding task, bug and phase cards labelled with priority, horizon, project and age.
Every work item across projects, grouped from backlog to ready.
workspaces

One workspace per system you automate.

Development, content, a client: each runs as its own workspace with its own workflows, executors, policies and memory. Recall searches every workspace you belong to in one query. Ownership stays isolated. Search does not.

Open the app
questions

What people ask about ConvOps.

Straight answers to the questions teams ask before they put their agents on a process.

What is ConvOps?

ConvOps is the operations layer for AI agents: an MCP server that holds your team's process as workflows, with approval gates, a shared memory and an audit trail. It runs no AI models. It works with Claude Code, Claude (desktop, web and Claude Cowork), OpenAI Codex, ChatGPT, Cursor and OpenCode, and with any other MCP client.

How do I make Claude Code follow a process?

Add ConvOps as an MCP server (claude mcp add --transport http convops https://mcp.convops.app/), then describe the process in plain words. ConvOps stores it as a workflow and hands Claude Code one step at a time. Gates on a step are checked by the engine, so Claude Code cannot move past an unmet approval. CLAUDE.md and hooks still help inside a session; the workflow holds the order of steps across sessions and people.

How do human approval gates for AI agents work in ConvOps?

A gate is a condition on a workflow step: explicit approval, finished child tasks, a task status or a context note. When the agent asks to advance, the engine checks the gate against real state. If it is unmet, the workflow stays on that step and the response lists every unmet condition. Approval is passed explicitly on the advance call, never read from chat text.

Does ConvOps run AI models?

No. ConvOps runs no AI models. You bring your AI client (Claude Code, Codex, Cursor, ChatGPT or another MCP client) and your model provider. ConvOps holds the process, the gates, the memory and the record.

Can steps in a ConvOps workflow run in parallel?

Steps inside one workflow run in order. Parallel work is modelled as child tasks that share an order: they start together, each can run on its own agent and executor, and the parent waits until all of them are done.

Can ConvOps run AI agents unattended?

Yes. Schedules use RRULE recurrence rules, work pools hand a run its next task, and executors decide where a run happens: your machine, your own runner, or one isolated pod per run on your Kubernetes. Approval gates hold on unattended runs too.

Is ConvOps an alternative to LangGraph, n8n or Temporal?

Mostly it sits beside them. LangGraph builds agents in code, n8n automates app-to-app flows on a visual canvas, and Temporal runs durable application code. ConvOps governs the process that existing agents such as Claude Code or Codex walk over MCP: steps, gates, memory and audit. The comparison pages cover each one.

Does ConvOps help with EU AI Act Article 14 human oversight?

It supports it. Article 14 asks that high-risk AI systems can be effectively overseen by natural persons while in use. Approval gates put a person at the decisions that matter, runs can be stopped, and the audit trail records each change with the agent label and the verified account. ConvOps is not a compliance certification on its own.

How much does ConvOps cost?

As of October 2026, ConvOps has four plans: Free at $0, Pro at $79 a month ($66 billed annually), Business at $299 a month ($249 billed annually) and Enterprise from $2,500 a month. Every process feature is on every plan, including Free; plans differ on scale. There are no per-seat or per-token charges.

Can I self-host ConvOps?

Yes, on the Enterprise plan. The whole system (engine, memory, audit and runs) installs on your own Kubernetes from one Helm chart, with your models and credentials, so nothing has to leave your cluster.

16 complete

You just scrolled an autonomous loop.

One message defined it. Work routed itself into it. Then it ran: it recalled what past runs learned, branched three ways, invoked a sub workflow with its own gates, started three child tasks together on clients you already run, waited for you at a gate, absorbed a policy mid run, and closed its own loop on a schedule. You wrote none of it as code.