From goalflow
个人目标与日程管理系统。当用户提到任务安排、目标管理、日程规划、每日计划、TODO、待办事项、复盘、完成率时自动触发。支持自然语言添加任务、查看日程、智能规划。Use when user mentions tasks, goals, schedule, daily plan, TODO, review, or productivity tracking.
How this skill is triggered — by the user, by Claude, or both
Slash command
/goalflow:goalflowThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are an AI assistant integrated with GoalFlow, a personal productivity system. Use this knowledge to help the user manage goals, projects, tasks, and daily schedules.
You are an AI assistant integrated with GoalFlow, a personal productivity system. Use this knowledge to help the user manage goals, projects, tasks, and daily schedules.
Goal (top-level objective)
└── Project (a workstream within a goal)
└── Task (an actionable item within a project)
id, name, description, priority (1=highest), status (active/archived/completed), color (hex)id, goal_id, name, description, statusid, project_id, title, description, type (one-time/recurring), recurrence_rule (cron), priority (P0/P1/P2/P3), status (pending/in_progress/done/skipped), scheduled_date, scheduled_time_start, scheduled_time_end, estimated_minutes, actual_minutes, completed_atdate, review_notes, mood_score (1-5), energy_level (low/medium/high)daily_plan_id, task_id, start_time, end_time, status~/.goalflow/goalflow.db (SQLite with WAL mode)
All scripts are located at ${CLAUDE_PLUGIN_ROOT}/scripts/. Execute them via Bash.
| Script | Purpose | Args |
|---|---|---|
gf-list-today.sh | List today's scheduled time blocks and unscheduled pending tasks | (none) |
gf-add-task.sh | Create a task and optionally schedule it | project_id title [scheduled_date] [start_time] [end_time] [estimated_minutes] [priority] [type] [recurrence_rule] |
gf-done.sh | Mark a task as done | task_id |
gf-start.sh | Start working on a task (set in_progress) | task_id |
gf-goals.sh | Manage goals (list/add/archive) | [action] [args...] — list; add name description [color]; archive id |
gf-projects.sh | Manage projects (list/add/archive) | [action] [args...] — list; add goal_id name [description]; archive id |
gf-schedule.sh | Schedule a task to a time block | task_id date start_time end_time |
gf-stats.sh | Show completion stats for this week | (none) |
gf-edit-task.sh | Update a task field | task_id field value — fields: title, description, priority, scheduled_date, scheduled_time_start, scheduled_time_end, estimated_minutes, status, project_id |
gf-delete-task.sh | Delete a task and associated time_blocks/completion_logs | task_id |
gf-search.sh | Search tasks by keyword (LIKE match on title) | keyword |
gf-generate-recurring.sh | Auto-schedule today's recurring tasks based on cron rules | (none) — run daily via launchd |
init-db.mjs | Initialize database and seed with example data | (none) |
db.mjs | Node.js module exporting initDB(), query(), runSQL(), insert(), update() | (library, not CLI) |
When no dedicated script exists, use sqlite3 directly:
sqlite3 ~/.goalflow/goalflow.db "PRAGMA foreign_keys=ON; <SQL HERE>"
For JSON output: sqlite3 -json ~/.goalflow/goalflow.db "..."
Initialize DB (if not exists):
node -e "import('${CLAUDE_PLUGIN_ROOT}/scripts/db.mjs').then(m => m.initDB())"
Add a goal:
INSERT INTO goals (name, description, priority, color) VALUES ('...', '...', 1, '#4A90D9');
Add a project:
INSERT INTO projects (goal_id, name, description) VALUES (<goal_id>, '...', '...');
Add a task:
INSERT INTO tasks (project_id, title, priority, scheduled_date, scheduled_time_start, scheduled_time_end, estimated_minutes)
VALUES (<project_id>, '...', 'P1', '2026-03-10', '09:00', '10:30', 90);
Mark task done:
UPDATE tasks SET status='done', completed_at=CURRENT_TIMESTAMP, actual_minutes=<N> WHERE id=<task_id>;
Start a task:
UPDATE tasks SET status='in_progress' WHERE id=<task_id>;
Create daily plan:
INSERT OR IGNORE INTO daily_plans (date) VALUES (date('now', 'localtime'));
Add time block:
INSERT INTO time_blocks (daily_plan_id, task_id, start_time, end_time)
VALUES (<plan_id>, <task_id>, '09:00', '10:30');
List all active goals with project counts:
SELECT g.id, g.name, g.priority, g.color, COUNT(p.id) AS projects
FROM goals g LEFT JOIN projects p ON p.goal_id = g.id AND p.status = 'active'
WHERE g.status = 'active' GROUP BY g.id ORDER BY g.priority;
List active projects under a goal:
SELECT p.id, p.name, g.name AS goal FROM projects p
JOIN goals g ON p.goal_id = g.id WHERE p.status = 'active' ORDER BY g.priority, p.name;
Completion stats for today:
SELECT
COUNT(*) AS total,
SUM(CASE WHEN t.status = 'done' THEN 1 ELSE 0 END) AS done,
SUM(CASE WHEN t.status = 'in_progress' THEN 1 ELSE 0 END) AS in_progress,
SUM(CASE WHEN t.status = 'pending' THEN 1 ELSE 0 END) AS pending
FROM time_blocks tb
JOIN daily_plans dp ON tb.daily_plan_id = dp.id
JOIN tasks t ON tb.task_id = t.id
WHERE dp.date = date('now', 'localtime');
When the user provides a task in natural language, extract:
When matching user input to existing goals/projects:
Use these time blocks as defaults when planning:
| Block | Time | Type |
|---|---|---|
| Morning Health | 07:00-08:00 | Exercise, health routines |
| Morning Work | 08:00-12:00 | Deep work, high-priority tasks |
| Lunch Break | 12:00-13:30 | Rest, no scheduling |
| Afternoon Work | 13:30-18:00 | Meetings, collaboration, medium tasks |
| Dinner | 18:00-19:00 | Rest, no scheduling |
| Evening Creative | 19:00-22:00 | Learning, side projects, creative work |
Do NOT schedule tasks during: 12:00-13:30 (lunch) and 18:00-19:00 (dinner).
When generating a daily plan (/gf plan):
[P0] [P1] [P2] [P3][ ] pending, [>] in progress, [x] done, [-] skippedCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub cyl19970726/goal-flow