secretary

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Secretary Skill

Secretary 技能

Capture commitments, record decisions, track ideas, manage sessions, and maintain the full knowledge base.
捕获承诺、记录决策、追踪想法、管理会话,并维护完整的知识库。

When to Use

使用场景

  • Analyzing conversation for commitments, decisions, or ideas
  • Recording a new commitment, decision, or idea manually
  • Updating the status of a tracked item (complete, defer, cancel)
  • Managing queue items and worker processing
  • Updating the knowledge graph
  • Managing goals and milestones
  • Accessing or managing encrypted memory entries
  • Checking worker and queue status
  • 分析对话中的承诺、决策或想法
  • 手动记录新的承诺、决策或想法
  • 更新追踪项的状态(完成、延期、取消)
  • 管理队列项和工作进程
  • 更新知识图谱
  • 管理目标和里程碑
  • 访问或管理加密存储条目
  • 检查工作进程和队列状态

Database Locations

数据库位置

bash
undefined
bash
undefined

Main database

Main database

SECRETARY_DB_PATH="$HOME/.claude/secretary/secretary.db"
SECRETARY_DB_PATH="$HOME/.claude/secretary/secretary.db"

Encrypted memory database

Encrypted memory database

SECRETARY_MEMORY_DB_PATH="$HOME/.claude/secretary/memory.db"
SECRETARY_MEMORY_DB_PATH="$HOME/.claude/secretary/memory.db"

Configuration

Configuration

SECRETARY_CONFIG_FILE="$HOME/.claude/secretary.json"
SECRETARY_CONFIG_FILE="$HOME/.claude/secretary.json"

Scripts

Scripts

PLUGIN_ROOT="$HOME/.claude/plugins/secretary" # or wherever installed
undefined
PLUGIN_ROOT="$HOME/.claude/plugins/secretary" # or wherever installed
undefined

Commitment Management

承诺管理

Recording a Commitment

记录承诺

sql
-- 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'
);
sql
-- 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'
);

Updating Commitments

更新承诺

sql
-- 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;
sql
-- 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;

Listing Commitments

列出承诺

sql
-- 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;
sql
-- 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;

Detection Patterns

检测模式

Look for these phrases in conversation:
Commitments:
  • "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..."
在对话中寻找以下表述:
承诺相关表述:
  • "我将...", "我会...", "让我..."
  • "我们应该...", "我们需要..."
  • "TODO:", "FIXME:", "跟进..."
  • "别忘了...", "确保..."
  • "提醒我...", "回复..."

Decision Recording

决策记录

Recording a Decision

记录决策

sql
-- 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
);
sql
-- 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
);

Updating Decisions

更新决策

sql
-- 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;
sql
-- 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;

Detection Patterns

检测模式

Decisions:
  • "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..."
决策相关表述:
  • "决定...", "决策是..."
  • "我们选择...", "我们将使用..."
  • "方法是...", "计划是..."
  • "从现在起...", "今后..."
  • "代替...", "而不是..."

Extraction Process

提取流程

  1. Identify decision phrase
  2. Extract what was decided
  3. Look for rationale ("because", "since", "due to")
  4. Identify alternatives mentioned ("instead of", "rather than")
  5. Categorize:
    architecture
    ,
    process
    ,
    technology
    ,
    design
  6. Determine scope:
    project-wide
    ,
    feature
    ,
    component
  1. 识别决策表述
  2. 提取决策内容
  3. 寻找理由("因为"、"由于"、"鉴于")
  4. 识别提及的替代方案("代替"、"而不是")
  5. 分类:
    architecture
    (架构)、
    process
    (流程)、
    technology
    (技术)、
    design
    (设计)
  6. 确定范围:
    project-wide
    (项目级)、
    feature
    (功能)、
    component
    (组件)

Idea Capture

想法捕获

Recording an Idea

记录想法

sql
-- 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
);
sql
-- 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
);

Updating Ideas

更新想法

sql
-- 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;
sql
-- 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;

Goal Management

目标管理

Creating a Goal

创建目标

sql
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
);
sql
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
);

Updating Goal Progress

更新目标进度

sql
UPDATE goals SET
    current_value = :value,
    progress_percentage = ROUND(100.0 * :value / NULLIF(target_value, 0), 1),
    updated_at = datetime('now')
WHERE id = :id;
sql
UPDATE goals SET
    current_value = :value,
    progress_percentage = ROUND(100.0 * :value / NULLIF(target_value, 0), 1),
    updated_at = datetime('now')
WHERE id = :id;

Activity Timeline

活动时间线

Event Types

事件类型

TypeDescription
session_start
New session began
session_end
Session completed
commitment
Commitment extracted
commitment_completed
Commitment marked done
decision
Decision recorded
goal_progress
Goal updated
goal_completed
Goal finished
commit
Git commit made
external_change
Change detected from outside
类型描述
session_start
新会话开始
session_end
会话结束
commitment
提取承诺
commitment_completed
标记承诺完成
decision
记录决策
goal_progress
更新目标
goal_completed
完成目标
commit
执行Git提交
external_change
检测到外部变更

Recording Activity

记录活动

sql
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);
sql
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);

Knowledge Graph

知识图谱

Node Types

节点类型

TypeDescription
project
Software projects
technology
Languages, frameworks, tools
person
Team members, stakeholders
concept
Architectural patterns, methodologies
tool
Development tools, services
类型描述
project
软件项目
technology
语言、框架、工具
person
团队成员、利益相关者
concept
架构模式、方法论
tool
开发工具、服务

Creating/Updating Nodes

创建/更新节点

sql
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');
sql
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');

Creating/Updating Edges

创建/更新边

sql
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');
sql
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');

Relationship Types

关系类型

  • uses
    - Project uses technology
  • knows
    - Person knows technology
  • owns
    - Person owns project
  • depends_on
    - Project depends on another
  • related_to
    - General relationship
  • uses
    - 项目使用技术
  • knows
    - 人员掌握技术
  • owns
    - 人员负责项目
  • depends_on
    - 项目依赖其他项目
  • related_to
    - 通用关系

Encrypted Memory

加密存储

Manage sensitive data via the memory manager script:
bash
SCRIPT="$PLUGIN_ROOT/scripts/memory-manager.sh"
通过存储管理脚本管理敏感数据:
bash
SCRIPT="$PLUGIN_ROOT/scripts/memory-manager.sh"

Add a memory entry

Add a memory entry

bash "$SCRIPT" add "AWS API Key" "AKIA..." api_key "my-project" "aws,production"
bash "$SCRIPT" add "AWS API Key" "AKIA..." api_key "my-project" "aws,production"

Search memory

Search memory

bash "$SCRIPT" search "API key"
bash "$SCRIPT" search "API key"

List by category

List by category

bash "$SCRIPT" list credential bash "$SCRIPT" list api_key my-project
bash "$SCRIPT" list credential bash "$SCRIPT" list api_key my-project

View a specific entry

View a specific entry

bash "$SCRIPT" show 1
bash "$SCRIPT" show 1

Delete an entry

Delete an entry

bash "$SCRIPT" delete 1
bash "$SCRIPT" delete 1

Check encryption status

Check encryption status

bash "$SCRIPT" status

Categories: `credential`, `api_key`, `ip_address`, `phone`, `secret`, `note`, `general`
bash "$SCRIPT" status

分类:`credential`(凭证)、`api_key`(API密钥)、`ip_address`(IP地址)、`phone`(电话)、`secret`(机密)、`note`(笔记)、`general`(通用)

Queue Operations

队列操作

Check Queue Status

检查队列状态

sql
SELECT status, COUNT(*) as count
FROM queue
GROUP BY status;
sql
SELECT status, COUNT(*) as count
FROM queue
GROUP BY status;

Force Process Queue

强制处理队列

bash
bash "$PLUGIN_ROOT/scripts/process-queue.sh" --limit 10
bash
bash "$PLUGIN_ROOT/scripts/process-queue.sh" --limit 10

Check Worker State

检查工作进程状态

sql
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;
sql
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;

Daily Notes

每日笔记

sql
-- 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');
sql
-- 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 Generation

ID生成

bash
undefined
bash
undefined

Pattern for all entity IDs

所有实体ID的格式

C-0001 for commitments

C-0001 用于承诺

D-0001 for decisions

D-0001 用于决策

I-0001 for ideas

I-0001 用于想法

G-0001 for goals

G-0001 用于目标

P-0001 for patterns

P-0001 用于模式

N-0001 for knowledge nodes

N-0001 用于知识节点

E-0001 for knowledge edges

E-0001 用于知识边

SQL pattern to get next ID:

获取下一个ID的SQL格式:

SELECT '<PREFIX>-' || printf('%04d', COALESCE(MAX(CAST(SUBSTR(id, LENGTH('<PREFIX>') + 2) AS INTEGER)), 0) + 1) FROM <table>;
undefined
SELECT '<PREFIX>-' || printf('%04d', COALESCE(MAX(CAST(SUBSTR(id, LENGTH('<PREFIX>') + 2) AS INTEGER)), 0) + 1) FROM <table>;
undefined

Output Guidelines

输出规范

When reporting captured items:
markdown
undefined
报告捕获的内容时:
markdown
undefined

Captured

已捕获内容

Commitment

承诺

  • ID: C-0025
  • Title: Implement caching layer
  • Priority: High
  • Due: This week
  • Source: Conversation
  • ID: C-0025
  • 标题: 实现缓存层
  • 优先级:
  • 截止时间: 本周
  • 来源: 对话

Decision

决策

  • ID: D-0018
  • Title: Use Redis for caching
  • Category: Architecture
  • Rationale: Better performance for distributed systems
  • ID: D-0018
  • 标题: 使用Redis进行缓存
  • 分类: 架构
  • 理由: 提升分布式系统的性能

Idea

想法

  • ID: I-0015
  • Title: GraphQL migration
  • Type: Exploration
  • Impact: High
undefined
  • ID: I-0015
  • 标题: GraphQL迁移
  • 类型: 探索
  • 影响:
undefined

Silence Mode

静默模式

When operating via hooks (capture.sh), work silently:
  • Do not output unless explicitly requested
  • Log to activity_timeline for later review
  • Items are reviewed via
    /secretary:status
    or
    /secretary:briefing
通过钩子(capture.sh)运行时,静默工作:
  • 除非明确要求,否则不输出内容
  • 将日志记录到activity_timeline供后续查看
  • 通过
    /secretary:status
    /secretary:briefing
    查看内容

Error Handling

错误处理

  • Skip malformed or ambiguous items during extraction
  • Log extraction failures to debug log
  • Continue processing on individual item failures
  • Retry failed queue items up to 3 times
  • Expire unprocessed queue items after 24 hours
  • 提取过程中跳过格式错误或模糊的内容
  • 将提取失败记录到调试日志
  • 单个内容处理失败时继续处理其他内容
  • 失败的队列项最多重试3次
  • 未处理的队列项24小时后过期

Related Commands

相关命令

  • /secretary:track
    - Manage commitments (add, complete, defer, list)
  • /secretary:decide
    - Record decisions with rationale
  • /secretary:idea
    - Capture ideas
  • /secretary:status
    - Show full dashboard
  • /secretary:briefing
    - Generate context briefing
  • /secretary:memory
    - Manage encrypted memory
  • /secretary:worker
    - Check/trigger worker processing
  • /secretary:track
    - 管理承诺(添加、完成、延期、列出)
  • /secretary:decide
    - 记录带理由的决策
  • /secretary:idea
    - 捕获想法
  • /secretary:status
    - 显示完整仪表盘
  • /secretary:briefing
    - 生成上下文简报
  • /secretary:memory
    - 管理加密存储
  • /secretary:worker
    - 检查/触发工作进程处理