secretary

Capture commitments, record decisions, track ideas, manage sessions, and maintain the full knowledge base.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "secretary" with this command: npx skills add mwguerra/claude-code-plugins/mwguerra-claude-code-plugins-secretary

Secretary Skill

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

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

Commitment Management

Recording a Commitment

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

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

-- 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..."

Decision Recording

Recording a Decision

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

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

  • Identify decision phrase

  • Extract what was decided

  • Look for rationale ("because", "since", "due to")

  • Identify alternatives mentioned ("instead of", "rather than")

  • Categorize: architecture , process , technology , design

  • Determine scope: project-wide , feature , component

Idea Capture

Recording an Idea

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

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

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

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

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

Recording Activity

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

Type Description

project

Software projects

technology

Languages, frameworks, tools

person

Team members, stakeholders

concept

Architectural patterns, methodologies

tool

Development tools, services

Creating/Updating Nodes

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

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

Encrypted Memory

Manage 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

Queue Operations

Check Queue Status

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

Force Process Queue

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

Check Worker State

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

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

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

Output Guidelines

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

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

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

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

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

filament-resource

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

resource

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

forms

No summary provided by upstream source.

Repository SourceNeeds Review