Agent Skillsmarcus/sidecar › feature-flags

feature-flags

GitHub

管理功能开关的注册、检查及配置覆盖,支持代码集成、配置文件与CLI参数设置,确保实验性功能的安全灰度发布与回滚。

.claude/skills/feature-flags/SKILL.md marcus/sidecar

Trigger Scenarios

添加新功能开关 配置功能开关优先级 通过代码或配置启用/禁用特性

Install

npx skills add marcus/sidecar --skill feature-flags -g -y
More Options

Non-standard path

npx skills add https://github.com/marcus/sidecar/tree/main/.claude/skills/feature-flags -g -y

Use without installing

npx skills use marcus/sidecar@feature-flags

指定 Agent (Claude Code)

npx skills add marcus/sidecar --skill feature-flags -a claude-code -g -y

安装 repo 全部 skill

npx skills add marcus/sidecar --all -g -y

预览 repo 内 skill

npx skills add marcus/sidecar --list

SKILL.md

Frontmatter
{
    "name": "feature-flags",
    "description": "Creating and using feature flags in sidecar for gating experimental functionality. Covers flag registration, checking flags in code, config file and CLI overrides, and priority resolution. Use when adding feature flags, toggling features, or gating new functionality behind flags.",
    "user-invocable": false
}

Feature Flags

Feature flags gate experimental functionality behind user-configurable settings, enabling safe rollout (default off), user opt-in, and easy rollback.

Checking Feature State

import "github.com/marcus/sidecar/internal/features"

if features.IsEnabled("tmux_interactive_input") {
    // Feature-gated code
}

Adding a New Feature Flag

  1. Define the feature in internal/features/features.go:
var MyNewFeature = Feature{
    Name:        "my_new_feature",
    Default:     false,
    Description: "Description of what this enables",
}
  1. Add to the allFeatures slice:
var allFeatures = []Feature{
    TmuxInteractiveInput,
    MyNewFeature, // Add here
}
  1. Use the feature check in your code:
if features.IsEnabled("my_new_feature") {
    // New functionality
}

That is all a flag needs to be reachable. Configuration → System → Feature Flags derives its list from features.ListAll(), so registering a feature puts a working switch on the page with the registry's own Name as the label and Description as the help text. There is no second list to remember.

Giving a flag better copy (optional)

previewCopy in internal/configui/page_flags.go overrides the registry's wording per flag. Only fill in what you want to change:

features.MyNewFeature.Name: {
    label:   "Human-readable name",
    help:    "One sentence on what turning this on does.",
    restart: true, // only if a consumer reads it once at startup
    note:    "An honest scope line for a flag that applies live but not retroactively.",
},

restart must be checked against what actually consumes the flag, never added as blanket caution — a flag read at the point of use applies immediately and must not claim otherwise. Both restart and note render when both are set.

A flag that another page already owns as a first-class setting sets owner and ownerControl instead. It is then listed read-only with a jump to the control that owns it, because two switches over one value is how surfaces start disagreeing. If the owning page's control means more than the raw flag — Panels' Conversations switch is the flag and the plugin's own enabled key — also set reads so the row reports the owner's answer rather than the flag's.

Keep the page shorter than a small terminal. The Configuration detail pane truncates rather than scrolling, and the row cursor still walks onto rows that were cut. Rows are one line each with the explanation shown only under the focused row for that reason; TestFlagsPageFitsAnOrdinaryTerminal guards it.

User Configuration

Config file (~/.config/sidecar/config.json)

{
  "features": {
    "flags": {
      "tmux_interactive_input": true
    }
  }
}

CLI override (takes precedence over config)

sidecar --enable-feature=tmux_interactive_input
sidecar --disable-feature=tmux_interactive_input
sidecar --enable-feature=feature1,feature2   # Multiple features

Unknown feature names in CLI flags produce a warning but do not prevent startup.

Priority Order

Feature state resolves in this order (first match wins):

  1. CLI override (--enable-feature, --disable-feature)
  2. Config file (features.flags in config.json)
  3. Default value (defined in code)

Available Features

Feature Default Description
tmux_interactive_input true Write support for tmux panes
tmux_full_attach false Suspend Sidecar and tmux attach-session
tmux_inline_edit true Inline file editing via tmux in files plugin
notes_plugin true Project Notes while the td panel is enabled
tasks_plugin false Embedded Tasks plugin tab
conversations_plugin false Conversations multi-agent history tab (off = no adapters / session I/O)
workspace_terminal_panel true Workspace Ctrl+T / Alt+T split terminal panel

API Reference

features.IsEnabled(name string) bool           // Check if enabled
features.List() map[string]bool                 // All features with current state
features.ListAll() []Feature                    // All features with metadata
features.SetEnabled(name string, enabled bool) error  // Persist to config
features.SetOverride(name string, enabled bool) // Runtime override (not persisted)
features.IsKnownFeature(name string) bool       // Check if registered

Best Practices

  • Use snake_case for feature names (e.g., my_new_feature)
  • New experimental features should default to false
  • Provide clear descriptions for each feature
  • Document features in docs/guides/deprecated/feature-flags.md when adding them
  • Remove feature flags once features are stable

Version History

  • 10eb061 Current 2026-08-28 11:29

    优化功能开关UI页面布局,修复行高截断导致的光标错位问题;调整重启提示与所有者控制逻辑,解决多表面状态不一致及重复索引搜索错误。

  • b3ba2b5 2026-08-20 01:12
  • 0ddc6b7 2026-07-25 07:17

Same Skill Collection

.claude/skills/create-adapter/SKILL.md
.claude/skills/create-modal/SKILL.md
.claude/skills/create-plugin/SKILL.md
.claude/skills/create-prompt/SKILL.md
.claude/skills/create-theme/SKILL.md
.claude/skills/drag-pane/SKILL.md
.claude/skills/inline-editor/SKILL.md
.claude/skills/keyboard-shortcuts/SKILL.md
.claude/skills/merge-strategy/SKILL.md
.claude/skills/profile-memory/SKILL.md
.claude/skills/project-switching/SKILL.md
.claude/skills/release-sidecar/SKILL.md
.claude/skills/shell-integration/SKILL.md
.claude/skills/sidecar-website/SKILL.md
.claude/skills/ui-features/SKILL.md
.claude/skills/worktree-switching/SKILL.md

Metadata

Files
0
Version
10eb061
Hash
ce0b6051
Indexed
2026-07-25 07:17

trang chủ - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-09-01 06:30
浙ICP备14020137号-1 $bản đồ khách truy cập$