Productivity tracker based on Oliver Burkeman's 3-3-3 technique
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
tools
-
batch_log_work
Atomically record multiple work log entries in one call — useful for backfilling historical work; all entries are validated before any writes
-
complete_task
Mark a task as completed by ID
-
create_task
Create a single task with a title, category (deep_work, short_task, maintenance), optional description, and tags
-
delete_task
Delete a task by ID
-
get_analytics
Get productivity analytics for the past N days
-
get_daily_plan
Get all tasks for a given date (defaults to today)
-
get_project_defaults
Get the default tags configured for a project (or list all projects with defaults)
-
get_recurring_days_off
Get the configured recurring off weekdays (e.g. Saturday, Sunday)
-
get_work_logs
Retrieve work logs for a date range (defaults to last 7 days), optionally filtered by type (commit, pr, review, research)
-
is_day_off
Check if a date is a day off — via recurring weekday config or an explicit day-off record
-
list_days_off
List all days marked as off, newest first
-
log_work
Record work done on a project — project name, description, optional tags, optional date (defaults to today), and optional type (commit, pr, review, research)
-
mark_day_off
Mark a day as off with a reason (sick_day, vacation, holiday, personal_day, weekend) and optional note
-
notify
Push a notification to the Oliver UI (source + message, visible as a toast popup and in the bell inbox)
-
set_daily_plan
Replace the full task list for a date with a new set of tasks
-
set_day_metadata
Record weather condition, temperature, and moon phase for a day
-
set_project_default_tags
Set default tags automatically applied when logging work for a project; replaces existing defaults, pass [] to clear
-
set_recurring_days_off
Set which weekdays are always treated as off days
-
unmark_day_off
Remove the off-day designation for a date
-
update_task
Update a task's title, description, status, or tags by ID
analyzed commit 962190e · analyzer v17 · 1d ago
skills & prompt files 1
- agent-rulescolindickson-oliver-962190e/CLAUDE.md
database 88
- db colindickson-oliver-962190e/backend/alembic/env.py :9
from sqlalchemy.ext.asyncio import AsyncEngine, create_async_engine - db colindickson-oliver-962190e/backend/alembic/versions/05e245953ef6_add_mcp_logs.py :12
import sqlalchemy as sa - db colindickson-oliver-962190e/backend/alembic/versions/2ba492a38cff_add_template_schedules.py :13
import sqlalchemy as sa - db colindickson-oliver-962190e/backend/alembic/versions/6893952f5742_add_project_defaults.py :13
import sqlalchemy as sa - db colindickson-oliver-962190e/backend/alembic/versions/7bd81dfc9cbf_add_work_logs.py :13
import sqlalchemy as sa - db colindickson-oliver-962190e/backend/alembic/versions/8108a2a45bc3_add_task_templates.py :13
import sqlalchemy as sa - db colindickson-oliver-962190e/backend/alembic/versions/847ac691d267_add_constraints_and_indexes.py :13
import sqlalchemy as sa - db colindickson-oliver-962190e/backend/alembic/versions/997abbf9cd55_initial_schema.py :13
import sqlalchemy as sa - db colindickson-oliver-962190e/backend/alembic/versions/9e4799353a2b_add_parent_goal_id_to_goals.py :13
import sqlalchemy as sa - db colindickson-oliver-962190e/backend/alembic/versions/a1b2c3d4e5f6_add_tags.py :13
import sqlalchemy as sa - db colindickson-oliver-962190e/backend/alembic/versions/a2b3c4d5e6f7_add_goals.py :13
import sqlalchemy as sa - db colindickson-oliver-962190e/backend/alembic/versions/a3b4c5d6e7f8_add_rolled_from_task_id_to_tasks.py :12
import sqlalchemy as sa - db colindickson-oliver-962190e/backend/alembic/versions/a4b5c6d7e8f9_add_archived_at_to_goals.py :13
import sqlalchemy as sa - db colindickson-oliver-962190e/backend/alembic/versions/af8fbba5b772_add_version_column_to_settings.py :13
import sqlalchemy as sa - db colindickson-oliver-962190e/backend/alembic/versions/b1c2d3e4f5a6_add_daily_notes_roadblocks_day_ratings.py :12
import sqlalchemy as sa - db colindickson-oliver-962190e/backend/alembic/versions/b5e44acfc9a9_add_notification_model.py :12
import sqlalchemy as sa - db colindickson-oliver-962190e/backend/alembic/versions/c1d2e3f4a5b6_add_day_offs.py :12
import sqlalchemy as sa - db colindickson-oliver-962190e/backend/alembic/versions/cc4d1e2f3a5b_pol7_hardening.py :12
import sqlalchemy as sa - db colindickson-oliver-962190e/backend/alembic/versions/d7e8f9a0b1c2_add_index_on_tasks_status_remove_redundant_days_date_index.py :12
import sqlalchemy as sa - db colindickson-oliver-962190e/backend/alembic/versions/dc68ad4bbc2b_make_day_id_and_category_nullable_for_.py :13
import sqlalchemy as sa - db colindickson-oliver-962190e/backend/alembic/versions/e1f2a3b4c5d6_add_log_type_to_work_logs.py :11
import sqlalchemy as sa - db colindickson-oliver-962190e/backend/alembic/versions/fa8bb402873f_auto.py :12
import sqlalchemy as sa - db colindickson-oliver-962190e/backend/alembic/versions/fdd13b9cc096_add_day_metadata.py :13
import sqlalchemy as sa - db colindickson-oliver-962190e/backend/app/api/analytics.py :6
from sqlalchemy.ext.asyncio import AsyncSession - db colindickson-oliver-962190e/backend/app/api/backlog.py :10
from sqlalchemy import select - db colindickson-oliver-962190e/backend/app/api/days.py :12
from sqlalchemy import select - db colindickson-oliver-962190e/backend/app/api/goals.py :6
from sqlalchemy.ext.asyncio import AsyncSession - db colindickson-oliver-962190e/backend/app/api/mcp_logs.py :6
from sqlalchemy.ext.asyncio import AsyncSession - db colindickson-oliver-962190e/backend/app/api/notifications.py :11
from sqlalchemy.ext.asyncio import AsyncSession - db colindickson-oliver-962190e/backend/app/api/project_defaults.py :4
from sqlalchemy.ext.asyncio import AsyncSession - db colindickson-oliver-962190e/backend/app/api/reminders.py :11
from sqlalchemy.ext.asyncio import AsyncSession - db colindickson-oliver-962190e/backend/app/api/settings.py :6
from sqlalchemy import select - db colindickson-oliver-962190e/backend/app/api/tags.py :6
from sqlalchemy.ext.asyncio import AsyncSession - db colindickson-oliver-962190e/backend/app/api/tasks.py :13
from sqlalchemy import select - db colindickson-oliver-962190e/backend/app/api/templates.py :6
from sqlalchemy.ext.asyncio import AsyncSession - db colindickson-oliver-962190e/backend/app/api/timer.py :11
from sqlalchemy.ext.asyncio import AsyncSession - db colindickson-oliver-962190e/backend/app/api/work_logs.py :12
from sqlalchemy import select - db colindickson-oliver-962190e/backend/app/database.py :12
from sqlalchemy.ext.asyncio import ( - db colindickson-oliver-962190e/backend/app/main.py :13
from sqlalchemy.exc import IntegrityError - db colindickson-oliver-962190e/backend/app/models/daily_note.py :8
from sqlalchemy import DateTime, ForeignKey, Text - db colindickson-oliver-962190e/backend/app/models/day.py :8
from sqlalchemy import Date, DateTime - db colindickson-oliver-962190e/backend/app/models/day_metadata.py :7
from sqlalchemy import Float, ForeignKey, String - db colindickson-oliver-962190e/backend/app/models/day_off.py :7
from sqlalchemy import ForeignKey, String, Text - db colindickson-oliver-962190e/backend/app/models/day_rating.py :7
from sqlalchemy import CheckConstraint, ForeignKey, Integer - db colindickson-oliver-962190e/backend/app/models/goal.py :8
from sqlalchemy import ( - db colindickson-oliver-962190e/backend/app/models/mcp_log.py :7
from sqlalchemy import Boolean, DateTime, Index, String, Text - db colindickson-oliver-962190e/backend/app/models/notification.py :7
from sqlalchemy import Boolean, DateTime, Index, String - db colindickson-oliver-962190e/backend/app/models/project_default.py :3
from sqlalchemy import String - db colindickson-oliver-962190e/backend/app/models/reminder.py :8
from sqlalchemy import Boolean, DateTime, ForeignKey, Index, Integer, String - db colindickson-oliver-962190e/backend/app/models/roadblock.py :8
from sqlalchemy import DateTime, ForeignKey, Text - db colindickson-oliver-962190e/backend/app/models/setting.py :5
from sqlalchemy import Integer, String - db colindickson-oliver-962190e/backend/app/models/tag.py :5
from sqlalchemy import Column, ForeignKey, Index, Integer, String, Table, UniqueConstraint - db colindickson-oliver-962190e/backend/app/models/task.py :8
from sqlalchemy import CheckConstraint, DateTime, ForeignKey, Index, Integer, String - db colindickson-oliver-962190e/backend/app/models/task_template.py :7
from sqlalchemy import Column, Date, DateTime, ForeignKey, Integer, String, Table - db colindickson-oliver-962190e/backend/app/models/timer_session.py :8
from sqlalchemy import CheckConstraint, DateTime, ForeignKey, Integer - db colindickson-oliver-962190e/backend/app/models/work_log.py :8
from sqlalchemy import Column, DateTime, Enum, ForeignKey, Index, Integer, String, Table, Text - db colindickson-oliver-962190e/backend/app/services/analytics_service.py :12
from sqlalchemy import func, or_, select, Integer - db colindickson-oliver-962190e/backend/app/services/day_service.py :13
from sqlalchemy import func, select - db colindickson-oliver-962190e/backend/app/services/goal_service.py :7
from sqlalchemy import func, select - db colindickson-oliver-962190e/backend/app/services/mcp_log_service.py :9
from sqlalchemy import delete, select - db colindickson-oliver-962190e/backend/app/services/notification_service.py :9
from sqlalchemy import select - db colindickson-oliver-962190e/backend/app/services/project_default_service.py :3
from sqlalchemy import select - db colindickson-oliver-962190e/backend/app/services/reminder_service.py :11
from sqlalchemy import select - db colindickson-oliver-962190e/backend/app/services/settings_service.py :12
from sqlalchemy import select - db colindickson-oliver-962190e/backend/app/services/tag_service.py :5
from sqlalchemy import func, select - db colindickson-oliver-962190e/backend/app/services/task_service.py :7
from sqlalchemy import select - db colindickson-oliver-962190e/backend/app/services/template_service.py :8
from sqlalchemy import func, select - db colindickson-oliver-962190e/backend/app/services/timer_service.py :16
from sqlalchemy import select - db colindickson-oliver-962190e/backend/app/services/work_log_service.py :7
from sqlalchemy import select - db colindickson-oliver-962190e/mcp-server/db.py :3
from sqlalchemy import create_engine - db colindickson-oliver-962190e/mcp-server/models/base.py :1
from sqlalchemy.orm import declarative_base - db colindickson-oliver-962190e/mcp-server/models/daily_note.py :3
from sqlalchemy import Column, DateTime, ForeignKey, Integer, Text - db colindickson-oliver-962190e/mcp-server/models/day.py :3
from sqlalchemy import Column, Date, DateTime, Integer - db colindickson-oliver-962190e/mcp-server/models/day_metadata.py :1
from sqlalchemy import Column, Float, ForeignKey, Integer, String - db colindickson-oliver-962190e/mcp-server/models/day_off.py :1
from sqlalchemy import Column, ForeignKey, Integer, String, Text - db colindickson-oliver-962190e/mcp-server/models/day_rating.py :1
from sqlalchemy import Column, ForeignKey, Integer - db colindickson-oliver-962190e/mcp-server/models/goal.py :3
from sqlalchemy import Column, Date, DateTime, ForeignKey, Integer, String, Table - db colindickson-oliver-962190e/mcp-server/models/mcp_log.py :5
from sqlalchemy import Boolean, DateTime, String, Text - db colindickson-oliver-962190e/mcp-server/models/notification.py :3
from sqlalchemy import Boolean, DateTime, String - db colindickson-oliver-962190e/mcp-server/models/project_default.py :1
from sqlalchemy import Column, Integer, String, UniqueConstraint - db colindickson-oliver-962190e/mcp-server/models/roadblock.py :3
from sqlalchemy import Column, DateTime, ForeignKey, Integer, Text - db colindickson-oliver-962190e/mcp-server/models/setting.py :1
from sqlalchemy import Column, String - db colindickson-oliver-962190e/mcp-server/models/tag.py :3
from sqlalchemy import Column, ForeignKey, Integer, String, Table - db colindickson-oliver-962190e/mcp-server/models/task.py :1
from sqlalchemy import Column, DateTime, ForeignKey, Integer, String - db colindickson-oliver-962190e/mcp-server/models/task_template.py :3
from sqlalchemy import Column, DateTime, ForeignKey, Integer, String, Table - db colindickson-oliver-962190e/mcp-server/models/timer_session.py :1
from sqlalchemy import Column, DateTime, ForeignKey, Integer - db colindickson-oliver-962190e/mcp-server/models/work_log.py :3
from sqlalchemy import Column, DateTime, Enum, ForeignKey, Integer, String, Table, Text - db colindickson-oliver-962190e/mcp-server/tools/analytics.py :6
from sqlalchemy import func, select
tool registrations 21
- get_daily_plan_tool colindickson-oliver-962190e/mcp-server/server.py :32
- set_daily_plan_tool colindickson-oliver-962190e/mcp-server/server.py :38
- create_task_tool colindickson-oliver-962190e/mcp-server/server.py :44
- update_task_tool colindickson-oliver-962190e/mcp-server/server.py :57
- delete_task_tool colindickson-oliver-962190e/mcp-server/server.py :70
- complete_task_tool colindickson-oliver-962190e/mcp-server/server.py :76
- add_task_to_backlog colindickson-oliver-962190e/mcp-server/server.py :82
- get_analytics_tool colindickson-oliver-962190e/mcp-server/server.py :98
- set_day_metadata_tool colindickson-oliver-962190e/mcp-server/server.py :104
- mark_day_off_tool colindickson-oliver-962190e/mcp-server/server.py :120
- unmark_day_off_tool colindickson-oliver-962190e/mcp-server/server.py :130
- list_days_off_tool colindickson-oliver-962190e/mcp-server/server.py :136
- get_recurring_days_off_tool colindickson-oliver-962190e/mcp-server/server.py :142
- set_recurring_days_off_tool colindickson-oliver-962190e/mcp-server/server.py :148
- is_day_off_tool colindickson-oliver-962190e/mcp-server/server.py :157
- notify_tool colindickson-oliver-962190e/mcp-server/server.py :163
- log_work_tool colindickson-oliver-962190e/mcp-server/server.py :169
- batch_log_work_tool colindickson-oliver-962190e/mcp-server/server.py :189
- get_work_logs_tool colindickson-oliver-962190e/mcp-server/server.py :209
- get_project_defaults_tool colindickson-oliver-962190e/mcp-server/server.py :225
- set_project_default_tags_tool colindickson-oliver-962190e/mcp-server/server.py :232
declared dependencies 10
- fastapi@==0.115.0
- uvicorn@[standard]==0.30.6
- sqlalchemy@[asyncio]==2.0.36
- alembic@==1.13.3
- pydantic@==2.9.2
- aiosqlite@==0.20.0
- asyncpg@==0.30.0
- httpx@==0.27.2
- pytest@==8.3.3
- pytest-asyncio@==0.24.0