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_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) |