> ## Documentation Index
> Fetch the complete documentation index at: https://docs.obversa.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Compare agent workflows

> Compare how Obversa, Conductor, Raven, LangGraph, Mastra, CrewAI, eve, Claude Code subagents and Temporal organise work, reviews and decisions.

Choose how you want to organise the work: through an app, inside an agent,
or in a workflow you write and run.

Obversa puts the process in a TypeScript file. Use the agent CLIs you
already have signed in. Send failed tests and review notes back to the
writer. Let a judge decide whether another round helps, and ask a person
where the work needs their decision. The run keeps its record in a plain
file, with no server to deploy.

The table links to each product's documentation. It describes the paths
those docs show; it is not a list of everything each tool can do.

## How the work gets done

Scroll across to compare the tools. The first column stays in view.

<div className="comparison-table">
  | The work | Obversa | Conductor | Raven | LangGraph | Mastra | CrewAI | eve | Claude Code subagents | Temporal |
  | - | - | - | - | - | - | - | - | - | - |
  | **What you write** | A [TypeScript workflow](/concepts/workflows): roles, steps, reviews and decisions. | [Prompts in workspace chats](https://www.conductor.build/docs/concepts/workflow). | A request to a [host that plans and delegates the work](https://github.com/EverMind-AI/Raven). | A [graph of node functions](https://docs.langchain.com/oss/javascript/langgraph/workflows-agents), in TypeScript or Python. | [TypeScript steps](https://mastra.ai/docs/workflows/control-flow), with branches, parallel work and repeated steps. | [Python tasks and agents](https://docs.crewai.com/en/concepts/tasks), with task configuration in JSONC. | An [agent folder](https://github.com/vercel/eve) with instructions and TypeScript tools and configuration. | [Markdown instructions and settings](https://code.claude.com/docs/en/sub-agents) for each subagent. | [Workflow and activity code](https://docs.temporal.io/temporal); TypeScript is one supported language. |
  | **The workers** | [Claude Code, Codex, Grok and OpenCode](/packages), plus SDK and API engines. Each role names its engine. | [Claude Code, Codex, Cursor and OpenCode](https://www.conductor.build/docs/reference/harnesses), one harness and model per chat. | [Research, Code, Design and Oncall agents](https://github.com/EverMind-AI/Raven), plus third-party agents through a CLI, an agent protocol or a compatible API. | [Your node functions](https://docs.langchain.com/oss/javascript/langgraph/workflows-agents), calling models and tools. | [Agents and tools](https://mastra.ai/docs/workflows/agents-and-tools) called by workflow steps. | [Agents with configured models](https://docs.crewai.com/en/concepts/tasks), assigned to tasks. | [Configured agents and subagents](https://github.com/vercel/eve), with their tools and models. | [Claude models](https://code.claude.com/docs/en/sub-agents) working within a Claude Code session. | [Worker processes running your activities](https://docs.temporal.io/temporal), which can call models or other services. |
  | **Send a failed test or review back** | Name the step that gets the [findings or command output](/concepts/feedback-loops). It runs again with that feedback. | [Agent reviews and inline diff comments](https://www.conductor.build/docs/concepts/workflow); send comments back to the agent in chat. | The experimental [Curator](https://github.com/EverMind-AI/Raven#curator) sends failed checks back while revising an agent's setup. It is a repository feature, separate from the installed package. | The [evaluator-optimizer example](https://docs.langchain.com/oss/javascript/langgraph/workflows-agents#evaluator-optimizer) returns a model's feedback to the generator; you write the route. | Pass feedback through [repeated workflow steps](https://mastra.ai/docs/workflows/control-flow); you write the condition for another pass. | A failed [task guardrail](https://docs.crewai.com/en/concepts/tasks) returns its error to the agent for another attempt. | Call a [reviewer agent from a workflow](https://github.com/vercel/eve/blob/main/docs/tools/workflows.mdx); your code decides what to do with the findings. | A [review subagent](https://code.claude.com/docs/en/sub-agents) returns findings to the main conversation. | Write the [revision loop in workflow code](https://docs.temporal.io/temporal). Activity retries handle execution failures separately. |
  | **Decide whether another round helps** | A [judge](/patterns/judge-stops-the-loop) weighs the findings and revision history, within a hard cap. Blocking findings go back within that cap. | [You steer further work in chat](https://www.conductor.build/docs/concepts/workflow). | The experimental [Curator](https://github.com/EverMind-AI/Raven#curator) stops when you are satisfied, when it finds nothing worth changing or when it hits its round limit. It revises how the agent is set up. | A [model returns a grade](https://docs.langchain.com/oss/javascript/langgraph/workflows-agents#evaluator-optimizer); your route decides whether to repeat. | [Your loop condition](https://mastra.ai/docs/workflows/control-flow) decides; a step can get its input from an agent. | A [model or code check](https://docs.crewai.com/en/concepts/tasks) passes, or the retry cap ends the attempts. | [Model evaluations](https://github.com/vercel/eve/blob/main/docs/guides/evaluate.md) answer typed questions; your code uses the answer. | [Instructions steer the review](https://code.claude.com/docs/en/sub-agents). A turn cap ends work with a partial result. | [Your workflow code](https://docs.temporal.io/temporal) decides, using an activity's result. |
  | **Ask a person** | A [person's decision is a step](/patterns/approval). No answer pauses; a refusal can return notes to the writer. | [Review the diff, comment and merge](https://www.conductor.build/docs/concepts/workflow) in the app. | [Oncall involves a person](https://github.com/EverMind-AI/Raven) when the task needs human judgement. | [Interrupt a node](https://docs.langchain.com/oss/javascript/langgraph/interrupts), then resume with the person's answer. | [Suspend and resume](https://mastra.ai/docs/workflows/human-in-the-loop) with the person's input. | Enable [human review of a task's answer](https://docs.crewai.com/en/concepts/tasks). | [Ask inside a workflow](https://github.com/vercel/eve/blob/main/docs/tools/workflows.mdx); the run waits for the answer. | [Tool permission prompts](https://code.claude.com/docs/en/sub-agents), governed by the subagent's permission mode. | Wait for a [signal or update](https://docs.temporal.io/develop/typescript/workflows/message-passing) carrying the decision. |
  | **Pick up unfinished work** | [Resume a recorded `workflow()` without repeating finished stages](/concepts/record). Uncertain work can require a person's decision before retrying. | [Restore workspace chats](https://www.conductor.build/docs/concepts/workflow). Cloud agents can [keep working when you close the laptop](https://www.conductor.build/docs/cloud). | [EverOS keeps memory across sessions](https://github.com/EverMind-AI/Raven). The linked page does not describe continuing a run without repeating finished steps. | [Persistent checkpoints](https://docs.langchain.com/oss/javascript/langgraph/persistence) save graph state. An [interrupted node restarts from its beginning](https://docs.langchain.com/oss/javascript/langgraph/interrupts). | Restore a [suspended run from its stored snapshot](https://mastra.ai/docs/workflows/suspend-and-resume) after an application restart. | Enable [checkpointing](https://docs.crewai.com/en/concepts/checkpointing); restoring a saved checkpoint skips completed tasks. | [Durable sessions](https://github.com/vercel/eve/blob/main/docs/concepts/execution-model-and-durability.mdx) checkpoint steps and survive process restarts. | [Resume a subagent with its conversation history](https://code.claude.com/docs/en/sub-agents). | [Replay event history](https://docs.temporal.io/temporal) to restore workflow state and continue on a worker. |
  | **Where it runs** | A [library call](/concepts/where-a-workflow-lives), from a TypeScript file or a service you already run. No database required. | A [Mac app with local or cloud workspaces](https://www.conductor.build/docs/cloud). | [Local CLI or browser UI](https://github.com/EverMind-AI/Raven), with installers and a Docker option. | A [library with a checkpointer](https://docs.langchain.com/oss/javascript/langgraph/persistence), or the hosted Agent Server. | [Your application or a Mastra server](https://mastra.ai/docs/deployment/overview), on your infrastructure or a hosted platform. | A [Python application](https://docs.crewai.com/en/concepts/tasks). | A [Node service you host](https://github.com/vercel/eve/blob/main/docs/guides/deployment/self-hosting.md), or Vercel. | Inside [Claude Code](https://code.claude.com/docs/en/sub-agents). | [Your workers plus Temporal Service](https://docs.temporal.io/temporal), self-hosted or Temporal Cloud. |
  | **Use their agent in an Obversa role** | Choose an [engine](/packages) for each role. | No engine for this. | No engine for this. | [LangGraph engine design](/packages/engine-langgraph). There is no package to install. | [Mastra engine design](/packages/engine-mastra). There is no package to install. | No engine for this. | [eve engine design](/packages/engine-eve). There is no package to install. | [Claude Code is an engine](/packages/engine-claude-cli); individual subagents are not separate Obversa engines. | No engine for this. |
</div>

## Put the patterns together

Start with [a second opinion](/patterns/writer-and-reviewer), [a judge
that weighs another revision](/patterns/judge-stops-the-loop), or [a
person's decision](/patterns/approval). The [complete workflows](/workflows)
combine those patterns for editorial work, research, support and software
delivery.
