Skip to content

Configuration file

Every key of config/griglia.php — publish it with php artisan vendor:publish --tag=griglia-config. Decided by whoever installs the package; the run-time options live in Settings.

Key Environment variable Default What it is
route_prefix GRIGLIA_ROUTE_PREFIX '' URL prefix of the package pages ('' = site root: /, /settings, /dashboard)
table_prefix GRIGLIA_TABLE_PREFIX 'griglia_' Prefix of the database tables owned by the package (checklists, todos, ingredients, attachments, questions, context_groups, context_blocks): keeps them together and out of the way of the host app's own tables. '' = the historical unprefixed names. Changing it on a live database means renaming the tables yourself. The tables of third-party libraries (settings, notifications, push_subscriptions) are never prefixed.
agent_name GRIGLIA_AGENT_NAME 'Agent' How the UI calls the coding agent (Claude, Codex, Gemini, …): labels like «Claude's answer», «Claude's skills»
agents GRIGLIA_AGENTS — Several agents at once (key => label), e.g. GRIGLIA_AGENTS="claude:Claude Code,codex:Codex CLI". A list (project) chooses its default agent, a task may override it. Empty = a single agent named agent_name.
agent_models GRIGLIA_AGENT_MODELS — Models the board may pick for a task, per agent: GRIGLIA_AGENT_MODELS="claude:opus,sonnet;codex:gpt-5" (a bare list «opus,sonnet» offers the same models to every agent; «alias=Label» renames one in the UI). Empty = no model picker: the agent CLI keeps its own default.
agent_efforts GRIGLIA_AGENT_EFFORTS — Reasoning efforts, same shape as agent_models, e.g. GRIGLIA_AGENT_EFFORTS="claude:low,medium,high,xhigh,max". Empty = no effort picker.
agent_default_model GRIGLIA_AGENT_DEFAULT_MODEL — Which model the agent CLI (or the worker: GRIGLIA_WORKER_MODEL) already starts with, same shape as agent_models: GRIGLIA_AGENT_DEFAULT_MODEL="claude:opus;codex:gpt-5", or a bare «opus» for every agent. The board only NAMES it, so that a list or a task that chose nothing reads «Default (opus)» instead of a bare «CLI default»; it never sends it, so each worker keeps its own default.
agent_default_effort GRIGLIA_AGENT_DEFAULT_EFFORT — Reasoning effort the agent CLI already starts with (GRIGLIA_WORKER_EFFORT), same shape and same use: named in the pickers, never sent, e.g. GRIGLIA_AGENT_DEFAULT_EFFORT="claude:high;codex:medium".
agent_key GRIGLIA_AGENT_KEY — Which of those agents is running here: the key griglia:check assumes when --agent=<key> is omitted, so that this installation sees only its own tasks. Empty = the agent must pass --agent= itself.
mode GRIGLIA_MODE 'server' Mode: 'server' (default) = authenticated users with their own lists; 'local' = no authentication, one global set of lists (a board on your own machine). Overridable from /settings (AppSettings mode).
access_gate GRIGLIA_ACCESS_GATE — Server mode: who may open the board. If the user model has canAccessGriglia(): bool it decides; otherwise this Gate ability (e.g. 'access-griglia') if set; otherwise every authenticated user.
admin_gate GRIGLIA_ADMIN_GATE — Server mode: Gate ability deciding who may ADMINISTER the board (settings, agent context, theme packs). It is consulted after canManageGriglia(): bool on the user model and before admins.
admins GRIGLIA_ADMINS — Server mode: the administrators themselves, as ids or e-mails (GRIGLIA_ADMINS="1,alice@example.com"). Used when neither canManageGriglia() nor admin_gate decides. Empty = the first registered user only.
allow_local_from_ui GRIGLIA_ALLOW_LOCAL_FROM_UI false Allow switching the board to local mode (no authentication) from /settings. Off by default: the override is accepted from the UI only when the app runs in the local environment.
middleware — array Middleware of the package routes. Authentication is enforced by the package itself according to the mode (Alle80\Griglia\Http\Middleware\GrigliaAccess), so 'auth' is not needed here (and is ignored).
local_channel — 'griglia.local' Public broadcast channel used for live updates in local mode
register_routes — true Register the package routes at all (set false to define your own routes with the components)
home_route — true Register a home route (route_prefix + '/') showing the theme selected in /settings
dashboard_route GRIGLIA_DASHBOARD_ROUTE '/dashboard' Legacy dashboard path: it redirects to the board, which is full width on every route. Set to null/false to drop it. Without a home route it serves the board itself, and the slide-out board tab then points here — otherwise the tab always frames the home route, never this bare path.
inject_tab_except — array Paths where the board tab must NOT be injected (globs, Request::is style, matched on the path and on the route name). The tab is injected in every HTML page of the host application by default; the package pages are excluded anyway (their layout already prints it), as are AJAX/JSON responses, redirects, downloads and partial updates. Switch the tab off everywhere from /settings instead.
default_theme — 'slate' Generic theme used by the home route and as fallback
themes — array Extra generic themes (slug => definition, same keys as Alle80\Griglia\Themes::builtin(); a built-in slug is overridden key by key)
user_model GRIGLIA_USER_MODEL 'App\\Models\\User' User model owning the lists
attachments_disk GRIGLIA_ATTACHMENTS_DISK 'local' Filesystem disk for image attachments. The private local disk is the secure default.
attachments_via_controller GRIGLIA_ATTACHMENTS_VIA_CONTROLLER true Serve attachments through the authorised, owner-scoped controller. Keep enabled for private disks; disable only when attachments_disk deliberately points to a publicly accessible disk.
agent_list GRIGLIA_AGENT_LIST 'dev' Name of the list used as request channel between the user and the coding agent (griglia:check)
default_list_name GRIGLIA_DEFAULT_LIST_NAME '' Name of the first list created for a new user. Empty = the translated name (griglia::t.default_list)
broadcast_channel — 'App.Models.User.{id}' Private broadcast channel per user for live updates ({id} = user id); requires a broadcaster
push_allowed_hosts — array Web Push: hosts a browser subscription endpoint may point to (https only). Wildcards allowed. Empty = any https host.
rate_limits — array Rate limits (Laravel throttle definitions) of the expensive endpoints
agent_status_file GRIGLIA_AGENT_STATUS_FILE storage_path('app/griglia/agent-status.json') Agents status snapshot (plan + usage windows), written by griglia:agent-status-import; shown in /agents
skills_file GRIGLIA_SKILLS_FILE storage_path('app/griglia/skills.json') Catalogue of the agent's skills (JSON written by griglia:skills-import; shown in the task modal)
speech_prompt GRIGLIA_SPEECH_PROMPT null Vocabulary hint sent with the audio of the speech to text (helps with names and jargon: «l'agente» instead of «la gente»). null = use the translated default, '' = no hint at all.
speech_max_seconds GRIGLIA_SPEECH_MAX_SECONDS 300 Hard limit of a single dictation, in seconds (0 = no limit): when it is reached the recording is closed and transcribed, instead of growing until the upload or the provider refuses it.
assets GRIGLIA_ASSETS 'precompiled' Front-end assets: 'precompiled' (default) = the CSS/JS built by the package, published in public/vendor/griglia/build — nothing to build in the host app; 'vite' = the host app bundles resources/css/griglia.css + resources/js/griglia.js in its own Vite build (entries below)
vite_entries — array With assets = 'vite': the entry points of the host app passed to @vite() on the package pages.
assets_url — '/vendor/griglia/build' With assets = 'precompiled': public URL where the published build is served from.
echo — array Runtime configuration of the Echo client (live updates). Empty key = no WebSocket at all.
fonts_url GRIGLIA_FONTS_URL 'https://fonts.bunny.net/css?family=' Web fonts of the themes: URL prefix that receives the theme's fonts string (bunny.net by default, Google-compatible); '' disables external fonts (self-host them in your CSS instead)
Griglia v0.95.0