Control Contao with AI agents.
Open source · Contao 5.3 to 6.0
Contao gets a command layer — 140 commands for pages, articles, files, forms, layouts, users, settings and more, where there was neither a CLI nor an API before. Two ways to connect an AI agent build on it: over SSH or right in the back end. And every write leaves a version, an undo entry and a log line — exactly what a click in the back end leaves.
Other systems have both. Contao had neither.
The missing layer
Coming from WordPress or Drupal, you miss two things in Contao right away: a command line for content and an interface reachable from outside. vendor/bin/contao-console migrates, backs up and creates users — it cannot reach a page or a content element.
| System | Command line for content | Built-in interface |
|---|---|---|
| WordPress | WP-CLI · wp post create | REST API, since 4.7 (2016) |
| Drupal | Drush · entity:create | JSON:API, since 8.7 (2019) |
| Shopware 6 | none — bin/console is maintenance | Admin API |
| Contao 5 and 6.0 | none — 19 commands, none for content | none |
| Contao 6.1 (from 2027) | none | REST API and MCP, experimental |
| Contao with ConpAI | 140 commands, system-wide | JSON in, JSON out |
- contao:page:update
- contao:content:create
- contao:news:read
- contao:file:meta
- contao:form-field:create
- contao:version:restore
- and 117 more
38 areas — pages, articles, content elements, news, events, FAQ, files, layouts, themes, modules, forms, newsletters, members and permissions, image sizes, versions. 36 commands depend on the optional Contao bundles; without them, 104 are active.
And no language model involved
The ConpAI core is a pure command layer — usable from a shell script, a deployment or by hand. AI only comes in with the other two packages — and it keeps to Contao's rules too: the same checks as the back end, and in the back-end bundle the rights of the signed-in user.
Three packages, one execution layer
The family
The core executes, the CLI brings the agent in over SSH, the back-end bundle brings it into the back end. Use the core or the CLI on its own or both together — and get even more out of it with the back-end bundle.
contao-ai-cli
The SSH way
Python CLI that hands Contao's console commands to an AI agent over SSH — with no extra interface inside Contao.
contao-ai-cli
Install contao-ai-cli locally on your computer. It connects your agent to a Contao installation. All it needs is SSH access to the server. With both bundles you get the full feature set.
What makes it
- One named session per installation
- No REST interface, no extra endpoint
- Installed with pipx on your computer
- Requires Python 3.10 or newer
contao-ai-core-bundle
Execution layer
140 console commands for reading and writing — through Contao's model layer, not around it. Both ways build on it.
contao-ai-core-bundle
The command layer itself, without any language model. The commands use Contao's own models, so hooks and DCA callbacks run and serialized fields stay intact; writes invalidate the page cache themselves.
What makes it
- Hooks and DCA callbacks stay active
- Version, undo and system log on every write
- Contao 5.3 to 6.0, PHP 8.2 and up
contao-ai-backend-bundle
The browser way
Back-end module with an AI agent right inside Contao — for editors and admins without SSH access.
contao-ai-backend-bundle
The agent sits in the back end as a module and works with the same commands as the SSH way. Anyone who has never opened a command line won't notice a thing.
What makes it
- No SSH, no command line
- Built on symfony/ai
- Requires the core bundle
- Contao 5.7 to 6.0, PHP 8.2 and up
An agent that leaves a trail
The P in ConpAI
An agent working silently past the database takes away the traceability a CMS exists for. That is why every write here takes the same path as a click in the back end.
Raw SQL can do none of this. That is exactly why these packages exist.
tl_version
Every change is versioned — visible and restorable in the back end, with the user it ran as.
tl_undo
Deleted records go to the recycle bin instead of into nothing — just as with a click in the back end.
System log
One line per operation. Whoever later asks what happened here finds an answer instead of a gap.