Skip to main content
Liza integrates with coding agent providers by wrapping their own CLIs directly. You authenticate with each provider CLI separately using that provider’s own mechanism — Liza does not store or manage API keys. When you run a Liza agent, Liza invokes the underlying CLI with the correct arguments, contract files, and workspace permissions it needs to operate autonomously.

How Provider Integration Works

Each provider CLI handles authentication, model selection, and execution independently. Liza’s role is to:
  1. Install behavioral contracts and skills that the CLI reads at session start (liza setup)
  2. Configure project-level permissions, hooks, and settings so agents can operate headlessly (liza init)
  3. Invoke the CLI with the right arguments for pairing or multi-agent mode (liza agent)
This architecture means you can switch providers per-task or per-role without changing your workflow. Reviewers can use a different provider than coders, enabling adversarial diversity in your pipeline.

Supported Provider CLIs

The --cli flag on liza agent accepts any of these values:

Provider Compatibility Matrix

Running Claude and Codex as adversarial pairs — Claude as coder and Codex as reviewer, or vice versa — increases review diversity and catches a wider class of errors than same-provider pairing. This is especially useful for high-stakes pipelines.

Per-Provider Setup

Claude Code is the reference provider and the default when no config.default_cli is set.Setup:
What liza init --claude manages:
  • .claude/settings.json — written from Liza’s embedded template; includes defaultMode: acceptEdits (required for headless operation), enableAllProjectMcpServers, all Bash(liza:*) permissions, skill references, and permissions.additionalDirectories granting access to ~/.liza and /tmp
  • .claude/hooks/ — session initialization, project context injection, Git usage guards, and wrong-worktree path detection
  • .claudeignore — created when absent
Two-layer permission model:Claude Code unions permissions from two files:The project layer is portable and team-shareable. The global layer is machine-specific. Both layers are required — neither alone is sufficient.
Do not hand-craft a subset of .claude/settings.json. Liza’s embedded template includes the complete set of permissions agents need. A missing permission will silently block an agent mid-task.

Environment Variables

Setting Provider Defaults

Set default CLIs at init time rather than passing --cli on every liza agent call:
Or add them to .liza/state.yaml directly: