Capture and manage decisions, commitments, ideas, sessions, and knowledge. The core data management skill for the secretary plugin.
Manages commitments, decisions, ideas, and knowledge by capturing and organizing them from conversation.
npx claudepluginhub mwguerra/claude-code-pluginsThis skill is limited to using the following tools:
Capture commitments, record decisions, track ideas, manage sessions, and maintain the full knowledge base.
# 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;
Look for these phrases in conversation:
Commitments:
-- 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;
Decisions:
architecture, process, technology, designproject-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;
| Type | Description |
|---|---|
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 |
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);
| Type | Description |
|---|---|
project | Software projects |
technology | Languages, frameworks, tools |
person | Team members, stakeholders |
concept | Architectural patterns, methodologies |
tool | Development tools, services |
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 - Project uses technologyknows - Person knows technologyowns - Person owns projectdepends_on - Project depends on anotherrelated_to - General relationshipManage sensitive data via the memory manager script:
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
Categories: 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');
# 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>;
When reporting captured items:
## 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
When operating via hooks (capture.sh), work silently:
/secretary:status or /secretary:briefing/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 processingCreating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.
Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.
Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.