VISOR

Turn engineering processes into workflows with guardrails for humans and AI. Define steps, validation, approvals, and fallbacks in YAML, then trace every run with OpenTelemetry.

View Examples Engineering Process Automation Read Docs
On-prem Any Model OpenTelemetry MCP Tools Open Source

Workflows Are Guardrails for Humans and AI

In real engineering teams, we use checklists, reviews, and approvals to reduce mistakes. Visor lets you encode those guardrails as workflows: explicit steps, validated outputs, bounded loops, and safe fallbacks.

Explicit steps

Map discovery, triage, review, and release into minimal, auditable stages.

Validated outputs

Schema checks keep AI output structured and reliable.

Human approvals

Require sign-off where it matters, automate the rest.

Safe fallbacks

Timeouts, retries, and failure routes are defined up front.

Controlled tools

Limit what agents can call and make every tool invocation auditable.

Observable runs

Trace every step so you can answer “what happened?” with evidence.

Predictable Agent Automation

Define once in YAML, run anywhere with full observability

workflow.yaml
Trigger
PR opened, Slack thread, webhook, schedule
Execute Steps
AI + MCP + GitHub + HTTP + shell
Schema validation + quality gates
Observable Output
Traced
Validated
Reproducible

Automations That Mirror Real Engineering Processes

PR Automation

Staged reviews with schema outputs, policy gates, and consistent comments/checks.

Issue Triage

Auto-classify Jira/Zendesk tickets, estimate severity, route to the right team, and draft a first response.

Slack Assistant

Support, PM, QA, and sales can query source-of-truth context and generate escalation packets.

Webhooks + Control Plane

Run release, deploy, and incident workflows from webhooks - not only GitHub events.

Cross-Repo Analysis

Fan out to multiple repos/services, run per-repo analysis, aggregate results, enforce policy gates.

Scheduled Audits

Nightly security audits and periodic health checks with consistent reporting and traceability.

Workflow Building Blocks

Once you define the guardrails, these primitives make them executable: explicit steps, schemas, routing, and safe failure handling.

Config-first workflows

One YAML defines steps, routing, schemas, templates, and outputs.

Graph execution

Dependencies, fan-out, fan-in, routing, and bounded loops are first-class.

Deterministic artifacts

Schemas + templates produce stable outputs for humans and machines.

Multi-provider steps

AI, GitHub, HTTP, shell, MCP tools, memory, and reusable sub-workflows.

Stateful runs

Built-in memory namespaces and isolated run state without external DBs.

Observability by default

OpenTelemetry traces + log correlation (trace_id/span_id).

Testable workflows

Validate behavior with fixtures/mocks before rolling workflows out.

AI is a step - not the system.

CI Is Great for Builds. Visor Is Built for Agent Workflows.

CI tools are optimized for building, testing, and deploying code. Visor is optimized for governed automation across teams and tools - where you need routing, human-in-loop, validated outputs, and auditable runs.

CI Pipelines

  • Optimized for build/test/deploy
  • Linear or matrix execution
  • Exit codes as signals
  • Logs for debugging

Visor Workflows

  • Control flow is explicit: routing and loops are defined and bounded
  • Outputs are guaranteed: schemas enforce structure
  • Frontends are first-class: GitHub, Slack, webhooks, schedules
  • Tool usage is auditable: tools are declared and traceable
  • Runs are reproducible: state is isolated, testable like code

A Single YAML That Demonstrates the Core Benefits

This example shows composition, observability, state, frontends, safe loops, MCP tools, GitHub automation, and more - all in one file.

pr-review.yaml
extends: [default, ./environments/prod.yaml]
telemetry: { enabled: true }
routing: { max_loops: 6 }
slack: { threads: required }
steps:
  pr-overview:
    type: ai
    on: [pr_opened, pr_updated]
    schema: overview
    prompt: Summarize the PR in 5 bullets.
  lint-fix:
    type: command
    exec: "npm run lint -- --fix"
    on_fail: { run: [lint-remediate] }
  lint-remediate:
    type: claude-code
    depends_on: [lint-fix]
    allowedTools: [Read, Edit]
    maxTurns: 3
    prompt: |
      Fix the lint errors below:
      {{ outputs['lint-fix'].stderr }}
  security-scan:
    type: mcp
    command: npx
    args: ["-y", "@semgrep/mcp"]
    method: scan
  trusted-note:
    type: github
    if: "hasMinPermission('MEMBER')"
    op: comment.create
  nightly-audit:
    type: ai
    schedule: "0 2 * * *"
    schema: code-review
1

Composition + environments

extends layers org defaults, team overrides, and env-specific config.

2

MCP tool integration

Native Semgrep, custom tools, and any MCP server - declared and auditable.

3

Permission gating

hasMinPermission('MEMBER') restricts steps to trusted contributors.

4

Scheduled + event-driven

PR events, Slack threads, webhooks, and cron schedules in one workflow.

5

Schema-validated AI

AI steps return structured JSON that validates against schema: overview.

6

Safe remediation loops

on_fail triggers Claude Code with linter output - bounded tools, max turns, traceable.

Teams Own Workflows. Leadership Owns Predictability.

Visor is designed for organizations where different teams own different services - and still need to execute as one system.

Org-wide standards via composition

Keep defaults in one place; override per team/env via extends.

Policy gates for critical workflows

Fail fast on violations (fail_if), route failures deterministically, require human approval when needed.

Permission-aware automation

Gate actions (hasMinPermission('MEMBER')) so workflows stay safe.

Bounded control plane

Retries and loops are capped; "self-healing" is deterministic and observable.

This is how you scale automation without centralizing every decision.

Every Run Is Traceable

Visor emits OpenTelemetry traces and correlates logs for every step. You can answer "what happened?" with evidence, not guesswork.

Run Trace run_id: abc-123-def
pr-review.checkout 1.2s ok
pr-review.analyze 3.4s ok
pr-review.review 8.7s ok
pr-review.validate 0.3s retry
pr-review.validate (retry) 0.2s ok
pr-review.post 0.8s ok

Built-in Test Framework - Tests Live With Your Workflows

Visor includes an integration test framework. Write tests in the same YAML as your workflows, run them in CI, and catch regressions before they hit production.

pr-review.test.yaml
tests:
  pr-overview-returns-schema:
    trigger:
      event: pr_opened
      fixture: ./fixtures/small-pr.json
    mock:
      ai: ./mocks/overview-response.json
    assert:
      - "outputs['pr-overview'].bullets.length === 5"
      - "outputs['pr-overview'].risk != null"
  lint-fix-retries-on-fail:
    trigger:
      event: pr_opened
    mock:
      command: { exitCode: 1, then: 0 }
    assert:
      - "steps['lint-fix'].retries === 1"
      - "steps['lint-fix'].status === 'ok'"

Fixtures + mocks

Simulate PR payloads, AI responses, and command outputs without calling real services.

Assertions on outputs

Verify schema shapes, step statuses, retry counts, and routing decisions.

Run in CI

visor test ./workflows/ runs all tests and fails the build on regressions.

Replay production runs

Capture real inputs, replay them in tests, and assert the same outputs.

Mix Providers in One Workflow

In your YAML you're already combining multiple "providers" (step types) in a single run.

AI ai Schema outputs, session reuse
CC claude-code Tool-scoped reasoning
MCP mcp Semgrep, internal servers
GH github Labels, comments, PR ops
HTTP http Webhooks + polling
CMD command Deterministic shell steps
GIT git-checkout Isolated repo checkouts
HI human-input Supervised flows via Slack/CLI
MEM memory State without external DB
WF workflow Import and reuse workflows

You can keep AI steps narrow and predictable - most reliability comes from the workflow design.

Try Visor Locally, Then Deploy the Same YAML

1

Run the example YAML

Clone the repo and run examples/pr-review.yaml locally.

2

Turn on GitHub automation

Enable issues + PR workflows with a GitHub App.

3

Run a Slack bot locally

Same pipeline, easier debugging.

Common Questions

Is Visor "deterministic AI"?

No. Visor makes the workflow behavior deterministic: explicit steps, constrained tools, validated outputs, bounded loops, and traceability. AI is a controlled step inside that system.

Does this replace CI?

Not necessarily. CI is still great for builds/tests/deploys. Visor complements CI when you need routing, human-in-loop, multi-provider automation, schema outputs, and observable agent workflows.

How do you prevent "one mega-agent with 100 tools"?

Workflows declare tools and MCP servers explicitly. AI steps can disable tools entirely or run with allowlists. Tool usage is auditable.

How do teams customize without breaking standards?

Use extends and imports: org defaults live centrally, teams override per environment or repo. Policy gates enforce what must remain true.

Can we run this on-prem and use our preferred model?

Yes - Visor is designed to run on your infrastructure and to support provider/model choice (the workflow defines what you use).

How do we observe and debug runs?

OpenTelemetry tracing + log correlation are built-in (telemetry.enabled). You can inspect step timings, retries, loop iterations, and validation outcomes.

Build Workflows You Can Trust - and Prove

If you're moving toward agent-first development, Visor gives you the control plane: explicit steps, schemas, bounded loops, and full observability - so automation scales without chaos.