AI-Powered
Content Generation

Generate entire layouts from your custom blocks, refine text with inline suggestions, or let AI complete your thoughts as you type.

Generate Content for
Multiple Panel Fields

Demonstration of generating many fields at once in the Kirby Panel: paused

Bring Context to Your Prompt Party

Inline Suggestions
Ghost text appears after a brief pause. Press Tab to accept.
Multi-Field Generation
Select fields in the prompt dialog and generate their content from a single prompt. It just works™.
Structure-Aware Generation
Generate entire layouts from a single prompt, based on your project's unique block definitions.
In-Context Editing
Use the Copilot button in writer/textarea fields to refine text with AI assistance. Works perfectly with selected text.
Prompt Templates
Tailor AI responses with user instructions. Save frequently used prompts as templates for quick access.
Rich Context
Go beyond text. Use other fields, images, and even PDF documents as context for more accurate and relevant AI responses.

AI Text Editing with
Templates & Suggestions

Applying prompt templates to fix grammar and make text concise, followed by inline suggestions in a writer field: paused

Generate Kirby Layouts
From Custom Blocks

Demonstration of generating layouts directly in the Kirby Panel: paused

Drive Copilot
From PHP

Call AI providers from CLI commands, hooks, or custom workflows. The same Client that powers the Panel is available to your code.
  • Hooks & CLI
    Generate content on save or in batch from the command line
  • Two Output Modes
    Plain text or structured objects validated against a JSON schema
use JohannSchopplich\Copilot\AI\Client;
use Kirby\CLI\CLI;

return [
    'description' => 'Generate missing meta descriptions for blog posts',
    'command' => static function (CLI $cli): void {
        $client = Client::instance();

        foreach (page('blog')->children() as $post) {
            if ($post->meta_description()->isNotEmpty()) {
                continue;
            }

            $description = $client->generateText([
                ['role' => 'system', 'content' => 'Write a 155-character SEO description.'],
                ['role' => 'user', 'content' => $post->text()->kirbytext()],
            ]);

            $post->update(['meta_description' => $description]);
            $cli->out('✓ ' . $post->title());
        }

        $cli->success('Done');
    }
];

Do Not Take
Our Word for It

Install the plugin and try Copilot in the Panel yourself.