mirror of
https://github.com/storytold/craft-libs.git
synced 2026-11-14 14:32:14 +00:00
craft-flags keeps one per-user file, ArtCraft/flags.toml beside the AI layer's ArtCraft/ai, that the launcher and every app read; CRAFT_FLAGS overrides it for one run. Every flag is off by default. The first two: AI-MCP (AI agents through MCP) and AI-MODELS (AI models and services). Loading never fails: a missing or damaged file means defaults, with the reason in Flags::problems. set() changes one flag atomically and keeps everything else in the file, and never overwrites a file it can't read. In the browser every flag is at its default. Closes #1118 --------- Co-authored-by: David Mann <daaavid.mann@gmail.com>
Craft Flags
craft-flags lets a feature ship in every Craft app and the ArtCraft Launcher while it stays off
until a person turns it on. Every flag is off by default.
- One file for the suite:
ArtCraft/flags.tomlin the per-user local configuration folder (%LOCALAPPDATA%on Windows,~/Library/Application Supporton macOS,$XDG_CONFIG_HOMEon Linux), beside the AI layer'sArtCraft/ai.CRAFT_FLAGS_FILEnames another file. - One run:
CRAFT_FLAGS=AI-MCP,-AI-MODELSoverrides the file. - Never crashes: a missing or damaged file means every flag is at its default, with the
reason in
Flags::problems.setchanges one flag atomically and keeps everything else in the file; it refuses to touch a file it cannot read. - Browser: no file, no environment: every flag is at its default.
Flags
| Constant | Id | What it gates |
|---|---|---|
AI_MCP |
AI-MCP |
AI agents using the Craft apps through MCP: the launcher's AI agents settings, the craft-ai-mcp gateway, the apps' agent connection settings |
AI_MODELS |
AI-MODELS |
Choosing AI models and services for AI tools such as Generative Fill |
A new flag is a new constant here and a row in ALL, so the launcher can list it and every app
names it the same way.
Use
let flags = craft_flags::load();
if flags.enabled(&craft_flags::AI_MCP) {
// show the agent connection settings
}
The launcher turns a flag on with craft_flags::set(&path, craft_flags::AI_MCP.id, true), where
path is craft_flags::default_path(). Apps read the flags when they start; a flag changed
while an app runs takes effect at its next start, unless the app loads them again.