/developing-with-prism
Guide for developing with Prism PHP package - a Laravel package for integrating LLMs. Activate or use when working with Prism features including text generation, structured output, embeddings, image generation, audio processing, streaming, tools/function calling, or any LLM
$ npx -y skills add prism-php/prism --skill developing-with-prism --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/developing-with-prism
Context preview
The summary Claude sees to decide when to auto-load this skill.
Guide for developing with Prism PHP package - a Laravel package for integrating LLMs. Activate or use when working with Prism features including text generation, structured output, embeddings, image generation, audio processing, streaming, tools/function calling, or any LLM
SKILL.md
developing-with-prism.SKILL.mdname: developing-with-prism
description: Guide for developing with Prism PHP package - a Laravel package for integrating LLMs. Activate or use when working with Prism features including text generation, structured output, embeddings, image generation, audio processing, streaming, tools/function calling, or any LLM provider integration (OpenAI, Anthropic, Gemini, Mistral, Groq, XAI, DeepSeek, OpenRouter, Ollama, VoyageAI, ElevenLabs). Activate for any Prism-related development tasks.
Developing with Prism
Prism is a Laravel package for integrating Large Language Models (LLMs) into applications with a fluent, expressive and eloquent API.
Basic Usage Examples
Text Generation
use Prism\Prism\Facades\Prism;
use Prism\Prism\Enums\Provider;
$response = Prism::text()
->using(Provider::Anthropic, 'claude-3-5-sonnet-20241022')
->withSystemPrompt('You are an expert mathematician.')
->withPrompt('Explain the Pythagorean theorem.')
->asText();
echo $response->text;Structured Output
use Prism\Prism\Facades\Prism;
use Prism\Prism\Enums\Provider;
use Prism\Prism\Schema\ObjectSchema;
use Prism\Prism\Schema\StringSchema;
$schema = new ObjectSchema(
name: 'movie_review',
description: 'A structured movie review',
properties: [
new StringSchema('title', 'The movie title'),
new StringSchema('rating', 'Rating out of 5 stars'),
new StringSchema('summary', 'Brief review summary')
],
requiredFields: ['title', 'rating', 'summary']
);
$response = Prism::structured()
->using(Provider::OpenAI, 'gpt-4o')
->withSchema($schema)
->withPrompt('Review the movie Inception')
->asStructured();
$review = $response->structured;
echo $review['title'];Streaming (Server-Sent Events)
Route::get('/chat', function () {
return Prism::text()
->using('anthropic', 'claude-3-7-sonnet')
->withPrompt(request('message'))
->asEventStreamResponse();
});Tools / Function Calling
use Prism\Prism\Facades\Prism;
use Prism\Prism\Tool;
$weatherTool = Tool::as('get_weather')
->for('Get current weather for a location')
->withStringParameter('location', 'The city and state')
->using(fn (string $location): string =>
"Weather in {$location}: 72F, sunny"
);
$response = Prism::text()
->using('anthropic', 'claude-3-5-sonnet-latest')
->withTools([$weatherTool])
->withMaxSteps(3)
->withPrompt('What is the weather in San Francisco?')
->asText();Multi-Modal (Images/Documents)
use Prism\Prism\ValueObjects\Media\Image;
use Prism\Prism\ValueObjects\Media\Document;
$response = Prism::text()
->using(Provider::Anthropic, 'claude-3-5-sonnet-20241022')
->withPrompt(
'What objects do you see in this image?',
[Image::fromLocalPath('/path/to/image.jpg')]
)
->asText();Prism Documentation
**IMPORTANT:** Always search the docs before implementing Prism features.
How to Search
1. **Read a specific doc file directly:**
read vendor/prism-php/prism/docs/core-concepts/text-generation.md
read vendor/prism-php/prism/docs/providers/openai.md
2. **Search for a topic across docs:**
grep "streaming" vendor/prism-php/prism/docs/
grep "withProviderOptions" vendor/prism-php/prism/docs/providers/
3. **Find all doc files:**
glob "vendor/prism-php/prism/docs/**/*.md"
Documentation Paths
| Need | Read This File | |------|----------------| | Text generation | `docs/core-concepts/text-generation.md` | | Streaming responses | `docs/core-concepts/streaming-output.md` | | Tools / function calling | `docs/core-concepts/tools-function-calling.md` | | Structured JSON output | `docs/core-concepts/structured-output.md` | | Embeddings | `docs/core-concepts/embeddings.md` | | Image generation | `docs/core-concepts/image-generation.md` | | Audio (TTS/STT) | `docs/core-concepts/audio.md` | | Schema definitions | `docs/core-concepts/schemas.md` | | Testing | `docs/core-concepts/testing.md` | | Image input | `docs/input-modalities/images.md` | | Document input (PDF) | `docs/input-modalities/documents.md` | | OpenAI options | `docs/providers/openai.md` | | Anthropic options | `docs/providers/anthropic.md` | | Other providers | `docs/providers/{provider}.md` | | Error handling | `docs/advanced/error-handling.md` |
Source Code Reference
For implementation details:
glob "src/**/*.php"
grep "class Tool" src/
Key Patterns
- Use `Prism\Prism\Facades\Prism` facade or `prism()` helper
- Core methods: `Prism::text()`, `Prism::structured()`, `Prism::embeddings()`, `Prism::image()`, `Prism::audio()`
- Chain `->using(Provider::Name, 'model-id')` to specify provider/model
- Finalize with: `->asText()`, `->asStructured()`, `->asStream()`, `->asEventStreamResponse()`, `->asDataStreamResponse()`
Provider-Specific Options
Use `->withProviderOptions([...])` to pass provider-specific features:
$response = Prism::text()
->using('anthropic', 'claude-3-7-sonnet-latest')
->withPrompt('Your prompt')
->withProviderOptions(['thinking' => ['enabled' => true]]) // Anthropic-specific
->asText();**Always search the provider docs first** to find available options for each provider:
- `docs/providers/openai.md` - strict mode, reasoning, image generation options
- `docs/providers/anthropic.md` - thinking mode, prompt caching, citations
- `docs/providers/gemini.md`, `docs/providers/mistral.md`, etc.
Common Pitfalls
Wrong Package Name
**NEVER use the old package:** `echolabsdev/prism` is deprecated.
**ALWAYS use:** `prism-php/prism`
# Correct
composer require prism-php/prism
# Wrong - do not use
composer require echolabsdev/prism
Wrong Namespace
**ALWAYS use the `Prism\Prism` namespace** for all Prism classes:
// Correct
use Prism\Prism\Facades\Prism;
use Prism\Prism\Enums\Provider;
use Pr
Read more
name: developing-with-prism description: Guide for developing with Prism PHP package - a Laravel package for integrating LLMs. Activate or use when working with Prism features including text generation, structured output, embeddings, image generation, audio processing, streaming, tools/function calling, or any LLM provider integration (OpenAI, Anthropic, Gemini, Mistral, Groq, XAI, DeepSeek, OpenRouter, Ollama, VoyageAI, ElevenLabs). Activate for any Prism-related development tasks.
Developing with Prism
Prism is a Laravel package for integrating Large Language Models (LLMs) into applications with a fluent, expressive and eloquent API.
Basic Usage Examples
Text Generation
use Prism\Prism\Facades\Prism;
use Prism\Prism\Enums\Provider;
$response = Prism::text()
->using(Provider::Anthropic, 'claude-3-5-sonnet-20241022')
->withSystemPrompt('You are an expert mathematician.')
->withPrompt('Explain the Pythagorean theorem.')
->asText();
echo $response->text;Structured Output
use Prism\Prism\Facades\Prism;
use Prism\Prism\Enums\Provider;
use Prism\Prism\Schema\ObjectSchema;
use Prism\Prism\Schema\StringSchema;
$schema = new ObjectSchema(
name: 'movie_review',
description: 'A structured movie review',
properties: [
new StringSchema('title', 'The movie title'),
new StringSchema('rating', 'Rating out of 5 stars'),
new StringSchema('summary', 'Brief review summary')
],
requiredFields: ['title', 'rating', 'summary']
);
$response = Prism::structured()
->using(Provider::OpenAI, 'gpt-4o')
->withSchema($schema)
->withPrompt('Review the movie Inception')
->asStructured();
$review = $response->structured;
echo $review['title'];Streaming (Server-Sent Events)
Route::get('/chat', function () {
return Prism::text()
->using('anthropic', 'claude-3-7-sonnet')
->withPrompt(request('message'))
->asEventStreamResponse();
});Tools / Function Calling
use Prism\Prism\Facades\Prism;
use Prism\Prism\Tool;
$weatherTool = Tool::as('get_weather')
->for('Get current weather for a location')
->withStringParameter('location', 'The city and state')
->using(fn (string $location): string =>
"Weather in {$location}: 72F, sunny"
);
$response = Prism::text()
->using('anthropic', 'claude-3-5-sonnet-latest')
->withTools([$weatherTool])
->withMaxSteps(3)
->withPrompt('What is the weather in San Francisco?')
->asText();Multi-Modal (Images/Documents)
use Prism\Prism\ValueObjects\Media\Image;
use Prism\Prism\ValueObjects\Media\Document;
$response = Prism::text()
->using(Provider::Anthropic, 'claude-3-5-sonnet-20241022')
->withPrompt(
'What objects do you see in this image?',
[Image::fromLocalPath('/path/to/image.jpg')]
)
->asText();Prism Documentation
**IMPORTANT:** Always search the docs before implementing Prism features.
How to Search
1. **Read a specific doc file directly:**
read vendor/prism-php/prism/docs/core-concepts/text-generation.md read vendor/prism-php/prism/docs/providers/openai.md
2. **Search for a topic across docs:**
grep "streaming" vendor/prism-php/prism/docs/ grep "withProviderOptions" vendor/prism-php/prism/docs/providers/
3. **Find all doc files:**
glob "vendor/prism-php/prism/docs/**/*.md"
Documentation Paths
| Need | Read This File | |------|----------------| | Text generation | `docs/core-concepts/text-generation.md` | | Streaming responses | `docs/core-concepts/streaming-output.md` | | Tools / function calling | `docs/core-concepts/tools-function-calling.md` | | Structured JSON output | `docs/core-concepts/structured-output.md` | | Embeddings | `docs/core-concepts/embeddings.md` | | Image generation | `docs/core-concepts/image-generation.md` | | Audio (TTS/STT) | `docs/core-concepts/audio.md` | | Schema definitions | `docs/core-concepts/schemas.md` | | Testing | `docs/core-concepts/testing.md` | | Image input | `docs/input-modalities/images.md` | | Document input (PDF) | `docs/input-modalities/documents.md` | | OpenAI options | `docs/providers/openai.md` | | Anthropic options | `docs/providers/anthropic.md` | | Other providers | `docs/providers/{provider}.md` | | Error handling | `docs/advanced/error-handling.md` |
Source Code Reference
For implementation details:
glob "src/**/*.php" grep "class Tool" src/
Key Patterns
- Use `Prism\Prism\Facades\Prism` facade or `prism()` helper
- Core methods: `Prism::text()`, `Prism::structured()`, `Prism::embeddings()`, `Prism::image()`, `Prism::audio()`
- Chain `->using(Provider::Name, 'model-id')` to specify provider/model
- Finalize with: `->asText()`, `->asStructured()`, `->asStream()`, `->asEventStreamResponse()`, `->asDataStreamResponse()`
Provider-Specific Options
Use `->withProviderOptions([...])` to pass provider-specific features:
$response = Prism::text()
->using('anthropic', 'claude-3-7-sonnet-latest')
->withPrompt('Your prompt')
->withProviderOptions(['thinking' => ['enabled' => true]]) // Anthropic-specific
->asText();**Always search the provider docs first** to find available options for each provider:
- `docs/providers/openai.md` - strict mode, reasoning, image generation options
- `docs/providers/anthropic.md` - thinking mode, prompt caching, citations
- `docs/providers/gemini.md`, `docs/providers/mistral.md`, etc.
Common Pitfalls
Wrong Package Name
**NEVER use the old package:** `echolabsdev/prism` is deprecated.
**ALWAYS use:** `prism-php/prism`
# Correct composer require prism-php/prism # Wrong - do not use composer require echolabsdev/prism
Wrong Namespace
**ALWAYS use the `Prism\Prism` namespace** for all Prism classes:
// Correct use Prism\Prism\Facades\Prism; use Prism\Prism\Enums\Provider; use Pr
Prism is a powerful Laravel package for integrating Large Language Models (LLMs) into your applications. It provides a fluent interface for generating text, handling multi-step conversations, and utilizing tools with various AI providers.

