Skip to content

feat: プリセット機能の導入 #77

Description

@ryota-murakami

概要

スキルの プリセット機能 を導入し、ユーザーがよく使うスキルの組み合わせを名前付きで保存して、複数のエージェントに一括適用できるようにする。

背景 / ユースケース

現状、ユーザーはスキルを エージェント単位で個別に install / symlink / copy する必要がある。用途別にスキルセットを束ねて管理できれば、以下のシナリオを高速化できる。

  • 新規エージェント追加時のセットアップ(テンプレ適用)
  • プロジェクト/ワークフロー別のスキル構成の切替
  • 複数エージェント間でスキル構成を揃えたいケース

例:

プリセット 含まれるスキル 対象エージェント
Frontend 開発 React, TypeScript, Tailwind 系 Claude Code, Cursor
ドキュメント執筆 blog-writing, editing, grammar Universal 全体
Code Review review, security-review, lint Claude Code のみ

想定する機能

  • プリセットの CRUD(作成 / 名前変更 / 削除)
  • プリセット内のスキルリスト編集(追加・削除)
  • 既存エージェントのスキル構成からプリセットを生成(逆引き / "Save current as preset")
  • プリセット適用 = Sync と同じ two-phase UX(preview → confirm → execute)
  • SyncResultDialog パターンを再利用し、スキル×エージェント単位で created / replaced / skipped / error を表示

UI 構成案

  • Sidebar: Bookmarks セクションの下に Presets セクションを追加
  • PresetDetailModal: クリックでモーダル表示。対象エージェントを multi-select → Apply
  • PresetEditorModal: プリセットの作成・編集(スキル選択は既存の skill list を流用)

参考にする既存パターン

既存機能 参考ポイント
Bookmarks (v0.7.0) Sidebar + DetailModal、Redux 永続化の型
Sync (v0.6.x〜) two-phase execution, conflict resolution, SyncResultDialog
Copy skill to agents multi-agent select modal、symlink vs local の差異ハンドリング

技術的メモ

  • データ構造候補: `Preset { id: PresetId (branded), name: string, skillNames: SkillName[], defaultAgents?: AgentId[] }`
  • 永続化: electron-store もしくは既存の bookmark と同じ localStorage + Redux 方式
  • IPC: `presets:apply` を追加、内部的に syncService のサブセットを利用
  • Discriminated union でエラー行を型強制(`action: 'created'|'replaced'|'skipped'|'error'`、`error: string`)

オープンクエスチョン

  • プリセット永続化の場所:electron-store(main process 管理)か localStorage(renderer 管理、bookmark と同じ)か
  • エクスポート / インポート機能は初版に含めるか(チーム共有用)
  • 公式プリセットバンドル(推奨スキルセット)を同梱するか
  • symlink されていない local スキルを含む場合の扱い(Copy 経路に落とす?)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions