用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/block/berd --skill experimental-features命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
基于 SOC 职业分类
| name | experimental-features |
| description | Use when adding, reviewing, configuring, graduating, or removing Berd experiments. |
Use experiments for opt-in, user-local in-progress Berd UI or workflow behavior. Do not use experiments for secrets, credentials, backend authority, packaged policy, or app state that should survive graduation as a normal preference.
distro.jsonUse distro.json for packaged build policy and startup defaults, especially
when the Tauri shell or sidecar needs bundled resources/config.
Good distro fits include providerAllowlist, kgoose,
featureToggles.costTracking, bundled config.yaml, bin/, skills/, and
agents/.
Do not use distro.json for normal app state, user preferences, dynamic runtime
switches, ACP-backed data, or per-user experiments.
Add experiments only in
src/features/experiments/experimentDefinitions.ts.
Each definition needs:
id: stable kebab-case stringtitleKey and descriptionKey: settings i18n keysconfig: optional typed controlsExperiments without a manual per-experiment override follow the global
autoEnable preference. That preference defaults on in dev builds and off in
production builds. Users can force an experiment on/off or reset it back to auto
from settings.
Config entries under an experiment are settings for that experiment, not nested experiments or independent feature flags. Keep them stored with the parent experiment and gate their runtime effect on the parent experiment being enabled.
Supported config controls:
boolean: switch with a boolean defaultselect: fixed string options with a defaultnumber: default plus optional min/max/steptext: default plus optional placeholder; never for secretsUse getExperiment(id) or useExperiment(id) for callers. When an experiment is
disabled, keep config stored but gate behavior as disabled.
Experiment preferences live in localStorage under
goose:experimental-features:
{
"version": 2,
"autoEnable": false,
"experiments": {
"experiment-id": {
"enabled": false,
"config": {}
}
}
}
version as real schema state. On newer stored versions, abort writes
instead of overwriting; on older versions, migrate explicitly or discard.autoEnable as the global default provider. Store enabled only for
explicit per-experiment overrides; clearing enabled returns that experiment
to auto behavior and must preserve config.config under the parent experiment. Do not migrate config keys into
separate experiment ids or apply auto-enable behavior to individual settings.boolean; callers must surface failed writes to users.useSyncExternalStore for React subscriptions. Memoize only the current
raw storage value per registry/id; do not retain historical snapshot keys.Do not add Rust commands, capabilities, or permissions unless the experiment
needs backend authority. If backend access is required, add the smallest typed
command possible, validate all IPC input, return Result, and use async for
heavy work so the UI does not freeze.
When adding commands, update capabilities with least privilege. If backend state is needed, use Tauri managed state deliberately and protect shared mutable state correctly.
Cover:
Run focused Vitest tests and just check for frontend changes.
When graduating or removing an experiment, remove the registry entry, i18n keys, settings UI tests, storage assumptions, and all gated code paths. Keep migrations small and explicit if the final feature needs a real user preference.