secretary について
Secretary スキルは、コミットメント、決定、アイデアを記録し、目標、活動記録、ナレッジグラフを管理します。暗号化メモリやキュー、ワーカーの管理にも対応し、複数セッションにまたがる作業を扱う人向けです。
主な機能
- 01コミットメント・決定・アイデアの記録
- 02目標とマイルストーンの追跡
- 03ナレッジグラフの管理
- 04暗号化メモリ項目の管理
- 05キューとワーカー状態の確認
活用シーン
- 01会話からアクション項目を抽出
- 02理由を含む決定の記録
- 03セッションをまたいだ目標進捗の追跡
- 04機密メモリ項目の保存と検索
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mwguerra/ claude-code-plugins --skill secretaryインストール後、Claude Code で/secretaryを入力して読み込まれたか確認します。
詳細
Secretary スキル
コミットメントを記録し、決定事項を残し、アイデアを追跡し、セッションを管理して、ナレッジベース全体を維持します。
使用する場面
- 会話を分析して、コミットメント、決定事項、アイデアを特定するとき
- 新しいコミットメント、決定事項、アイデアを手動で記録するとき
- 追跡中の項目のステータスを更新するとき(完了、延期、キャンセル)
- キュー項目とワーカーの処理を管理するとき
- ナレッジグラフを更新するとき
- 目標とマイルストーンを管理するとき
- 暗号化されたメモリエントリにアクセス、または管理するとき
- ワーカーとキューのステータスを確認するとき
データベースの場所
# Main database
SECRETARY_DB_PATH="$HOME/.claude/secretary/secretary.db"
# Encrypted memory database
SECRETARY_MEMORY_DB_PATH="$HOME/.claude/secretary/memory.db"
# Configuration
SECRETARY_CONFIG_FILE="$HOME/.claude/secretary.json"
# Scripts
PLUGIN_ROOT="$HOME/.claude/plugins/secretary" # or wherever installed
コミットメントの管理
コミットメントの記録
-- Get next ID
SELECT 'C-' || printf('%04d', COALESCE(MAX(CAST(SUBSTR(id, 3) AS INTEGER)), 0) + 1) as next_id
FROM commitments;
-- Insert
INSERT INTO commitments (
id, title, description, source_type, source_session_id,
source_context, project, assignee, stakeholder,
due_date, due_type, priority, status
) VALUES (
:id, :title, :description, :source_type, :session_id,
:context, :project, :assignee, :stakeholder,
:due_date, :due_type, :priority, 'pending'
);
コミットメントの更新
-- Complete
UPDATE commitments SET
status = 'completed', completed_at = datetime('now'), updated_at = datetime('now')
WHERE id = :id;
-- Defer
UPDATE commitments SET
status = 'deferred', deferred_until = :date,
deferred_count = deferred_count + 1, updated_at = datetime('now')
WHERE id = :id;
-- Cancel
UPDATE commitments SET
status = 'canceled', updated_at = datetime('now')
WHERE id = :id;
-- Change priority
UPDATE commitments SET
priority = :new_priority, updated_at = datetime('now')
WHERE id = :id;
コミットメントの一覧表示
-- All pending (sorted by priority)
SELECT id, title, due_date, priority, project, status
FROM commitments
WHERE status IN ('pending', 'in_progress')
ORDER BY
CASE WHEN due_date < date('now') THEN 0 ELSE 1 END,
CASE priority WHEN 'critical' THEN 1 WHEN 'high' THEN 2 WHEN 'medium' THEN 3 ELSE 4 END,
due_date ASC;
-- By project
SELECT id, title, due_date, priority, status
FROM commitments
WHERE project = :project AND status IN ('pending', 'in_progress')
ORDER BY priority DESC;
-- Overdue only
SELECT id, title, due_date, priority, project
FROM commitments
WHERE status IN ('pending', 'in_progress') AND due_date < date('now')
ORDER BY due_date ASC;
検出パターン
会話の中で、次のような表現を探します。
コミットメント:
- 「I will...」「I'll...」「Let me...」
- 「We should...」「We need to...」
- 「TODO:」「FIXME:」「Follow up on...」
- 「Don't forget to...」「Make sure to...」
- 「Remind me to...」「Get back to...」
決定事項の記録
決定事項の記録
-- Get next ID
SELECT 'D-' || printf('%04d', COALESCE(MAX(CAST(SUBSTR(id, 3) AS INTEGER)), 0) + 1) as next_id
FROM decisions;
-- Insert
INSERT INTO decisions (
id, title, description, rationale, alternatives,
consequences, category, scope, project,
source_session_id, source_context, status, tags
) VALUES (
:id, :title, :description, :rationale, :alternatives_json,
:consequences, :category, :scope, :project,
:session_id, :context, 'active', :tags_json
);
決定事項の更新
-- Supersede
UPDATE decisions SET
status = 'superseded', superseded_by = :new_decision_id,
updated_at = datetime('now')
WHERE id = :old_id;
-- Reverse
UPDATE decisions SET
status = 'reversed', updated_at = datetime('now')
WHERE id = :id;
検出パターン
決定事項:
- 「Decided to...」「The decision is...」
- 「Let's go with...」「We'll use...」
- 「The approach is...」「The plan is...」
- 「From now on...」「Going forward...」
- 「Instead of...」「Rather than...」
抽出プロセス
- 決定を示す表現を特定します
- 決定された内容を抽出します
- 理由を探します(「because」「since」「due to」)
- 言及された代替案を特定します(「instead of」「rather than」)
- 分類します:
architecture、process、technology、design - 適用範囲を特定します:
project-wide、feature、component
アイデアの記録
アイデアの記録
-- Get next ID
SELECT 'I-' || printf('%04d', COALESCE(MAX(CAST(SUBSTR(id, 3) AS INTEGER)), 0) + 1) as next_id
FROM ideas;
-- Insert
INSERT INTO ideas (
id, title, description, idea_type, category,
project, source_session_id, source_context,
priority, effort, potential_impact, status, tags
) VALUES (
:id, :title, :description, :type, :category,
:project, :session_id, :context,
:priority, :effort, :impact, 'captured', :tags_json
);
アイデアの更新
-- Start exploring
UPDATE ideas SET status = 'exploring', updated_at = datetime('now') WHERE id = :id;
-- Park for later
UPDATE ideas SET status = 'parked', updated_at = datetime('now') WHERE id = :id;
-- Mark done
UPDATE ideas SET status = 'done', updated_at = datetime('now') WHERE id = :id;
-- Discard
UPDATE ideas SET status = 'discarded', updated_at = datetime('now') WHERE id = :id;
目標の管理
目標の作成
SELECT 'G-' || printf('%04d', COALESCE(MAX(CAST(SUBSTR(id, 3) AS INTEGER)), 0) + 1) as next_id
FROM goals;
INSERT INTO goals (
id, title, description, goal_type, timeframe,
parent_goal_id, project, target_value, target_unit,
target_date, status, milestones, related_commitments
) VALUES (
:id, :title, :description, :type, :timeframe,
:parent_id, :project, :target_value, :target_unit,
:target_date, 'active', :milestones_json, :related_json
);
目標の進捗状況の更新
UPDATE goals SET
current_value = :value,
progress_percentage = ROUND(100.0 * :value / NULLIF(target_value, 0), 1),
updated_at = datetime('now')
WHERE id = :id;
アクティビティのタイムライン
イベントの種類
| 種類 | 説明 |
|---|---|
session_start | 新しいセッションが開始されました |
session_end | セッションが完了しました |
commitment | コミットメントが抽出されました |
commitment_completed | コミットメントが完了としてマークされました |
decision | 決定事項が記録されました |
goal_progress | 目標が更新されました |
goal_completed | 目標が完了しました |
commit | Git コミットが作成されました |
external_change | 外部からの変更が検出されました |
アクティビティの記録
INSERT INTO activity_timeline (
activity_type, entity_type, entity_id,
project, title, details, session_id
) VALUES (:type, :entity_type, :entity_id, :project, :title, :details_json, :session_id);
ナレッジグラフ
ノードの種類
| 種類 | 説明 |
|---|---|
project | ソフトウェアプロジェクト |
technology | 言語、フレームワーク、ツール |
person | チームメンバー、関係者 |
concept | アーキテクチャパターン、方法論 |
tool | 開発ツール、サービス |
ノードの作成/更新
SELECT 'N-' || printf('%04d', COALESCE(MAX(CAST(SUBSTR(id, 3) AS INTEGER)), 0) + 1) as next_id
FROM knowledge_nodes;
INSERT INTO knowledge_nodes (id, name, node_type, description, properties, aliases)
VALUES (:id, :name, :type, :description, :properties_json, :aliases_json)
ON CONFLICT(id) DO UPDATE SET
description = COALESCE(:description, description),
interaction_count = interaction_count + 1,
last_interaction = datetime('now'),
updated_at = datetime('now');
エッジの作成/更新
SELECT 'E-' || printf('%04d', COALESCE(MAX(CAST(SUBSTR(id, 3) AS INTEGER)), 0) + 1) as next_id
FROM knowledge_edges;
INSERT INTO knowledge_edges (id, source_node_id, target_node_id, relationship, strength, properties)
VALUES (:id, :source, :target, :relationship, :strength, :properties_json)
ON CONFLICT(id) DO UPDATE SET
strength = MIN(strength + 0.1, 1.0),
updated_at = datetime('now');
関係の種類
uses- プロジェクトが技術を使用するknows- 人物が技術を知っているowns- 人物がプロジェクトを所有するdepends_on- プロジェクトが別のプロジェクトに依存するrelated_to- 一般的な関係
暗号化されたメモリ
メモリマネージャースクリプトを使って機密データを管理します。
SCRIPT="$PLUGIN_ROOT/scripts/memory-manager.sh"
# Add a memory entry
bash "$SCRIPT" add "AWS API Key" "AKIA..." api_key "my-project" "aws,production"
# Search memory
bash "$SCRIPT" search "API key"
# List by category
bash "$SCRIPT" list credential
bash "$SCRIPT" list api_key my-project
# View a specific entry
bash "$SCRIPT" show 1
# Delete an entry
bash "$SCRIPT" delete 1
# Check encryption status
bash "$SCRIPT" status
カテゴリ:credential、api_key、ip_address、phone、secret、note、general
キュー操作
キューのステータスを確認する
SELECT status, COUNT(*) as count
FROM queue
GROUP BY status;
キューを強制処理する
bash "$PLUGIN_ROOT/scripts/process-queue.sh" --limit 10
ワーカーの状態を確認する
SELECT last_run_at, last_success_at, last_error,
items_processed, total_runs,
last_vault_sync_at, last_github_refresh_at
FROM worker_state WHERE id = 1;
日次ノート
-- Create or update daily note
INSERT INTO daily_notes (id, date)
VALUES (date('now'), date('now'))
ON CONFLICT(id) DO NOTHING;
-- Update with session data
UPDATE daily_notes SET
sessions_count = sessions_count + 1,
last_activity_at = datetime('now'),
updated_at = datetime('now')
WHERE date = date('now');
ID の生成
# Pattern for all entity IDs
# C-0001 for commitments
# D-0001 for decisions
# I-0001 for ideas
# G-0001 for goals
# P-0001 for patterns
# N-0001 for knowledge nodes
# E-0001 for knowledge edges
# SQL pattern to get next ID:
SELECT '<PREFIX>-' || printf('%04d', COALESCE(MAX(CAST(SUBSTR(id, LENGTH('<PREFIX>') + 2) AS INTEGER)), 0) + 1)
FROM <table>;
出力ガイドライン
記録した項目を報告するとき:
## Captured
### Commitment
- **ID:** C-0025
- **Title:** Implement caching layer
- **Priority:** High
- **Due:** This week
- **Source:** Conversation
### Decision
- **ID:** D-0018
- **Title:** Use Redis for caching
- **Category:** Architecture
- **Rationale:** Better performance for distributed systems
### Idea
- **ID:** I-0015
- **Title:** GraphQL migration
- **Type:** Exploration
- **Impact:** High
サイレントモード
フック(capture.sh)経由で動作する場合は、何も出力せずに処理します。
- 明示的に要求されない限り、出力しないでください
- 後で確認できるよう、activity_timeline に記録してください
- 項目は
/secretary:statusまたは/secretary:briefingから確認できます
エラー処理
- 抽出時に、形式が不正または曖昧な項目はスキップします
- 抽出の失敗をデバッグログに記録します
- 個々の項目の処理に失敗しても、処理を続行します
- 失敗したキュー項目は最大 3 回再試行します
- 未処理のキュー項目は 24 時間後に期限切れにします
関連コマンド
/secretary:track- 約束事項を管理します(追加、完了、延期、一覧表示)/secretary:decide- 判断とその根拠を記録します/secretary:idea- アイデアを記録します/secretary:status- ダッシュボード全体を表示します/secretary:briefing- コンテキストのブリーフィングを生成します/secretary:memory- 暗号化されたメモリを管理します/secretary:worker- ワーカーの処理を確認/実行します
コメント
Markdown 対応