Docs
Bring your own curriculum
Attach a folder of markdown files to a tracking.so plan. Your files stay the source of truth for content; tracking.so keeps the state, streaks, schedule, and coach accountability.
tracking.so plans are deliberately simple: a goal, activities, sessions, and the visuals around them. Complex self-built learning paths, like a 12-week deep learning curriculum or a robotics track with daily checklists, should not have to live inside one notes field.
Bring your own curriculum lets you attach markdown files from an Obsidian folder, git repo, or any local directory to a plan. The coach reads those files directly when it prepares your week, repairs a schedule gap, or discusses the plan in chat.
What gets attached
- Markdown files, up to 100 files per plan.
- Files can be up to 200 KB each.
- Relative paths are preserved, so
notes/rules.mdstaysnotes/rules.md. - Replacing the bundle removes files you removed locally.
Option A: setup prompt, recommended
Open Settings - Integrations and API Keys in the app, create an API key, and copy the generated setup prompt into your agent, such as Claude Code, Codex, or Cursor. The prompt is readable before you send it. Your agent then:
- Registers the MCP server at
https://api.tracking.so/mcpwith your key as a Bearer token. - Installs the tracking.so usage skill from
https://api.tracking.so/skill.md. - Verifies the connection with
get_user_state. - If your account has no plans yet, interviews you and creates your first plan.
- Asks whether you have a curriculum folder to attach.
Manual Claude Code MCP registration, if you prefer:
claude mcp add --scope user --transport http tracking-so https://api.tracking.so/mcp --header "Authorization: Bearer tsk_..."The MCP tools
| Tool | What it does |
|---|---|
| get_user_state | Profile, plans with schedule health, and recent logging - the current account snapshot. |
| list_plans | Active plans with ids, schedule state, and curriculum file counts. |
| create_plan | Create a plan with frequency habits or dated curriculum sessions. |
| list_curriculum_files | List markdown files attached to a plan. |
| read_curriculum_file | Read one attached markdown file. |
| replace_curriculum | Replace the full bundle and remove files not included. |
| upsert_curriculum_files | Add or update specific files while keeping the rest. |
A typical session: "Read my curriculum in ~/personal/learning, tighten week 3, and push it to my robotics plan on tracking.so."
Option B: REST API
Same operations, plain HTTP. Auth can be a session JWT or a tsk_ API key.
PUT /plans/:planId/curriculum { files: [{ path, content }] }
GET /plans/:planId/curriculum
GET /plans/:planId/curriculum/file?path=schedule.md
DELETE /plans/:planId/curriculumOption C: maintainer script
For self-hosters and development, upload directly from the backend package:
cd apps/backend-node
pnpm upload-curriculum --prod --username alex --plan-goal "robotics" --dir ~/personal/learning--plan-goal is a case-insensitive substring that must match exactly one active plan. Use --delete to remove the bundle.
How the coach uses it
Plans with curriculum files get context telling the coach that attached files exist and should override plan notes for curriculum content. The coach then lists and reads the attached files during weekly prep, session proposals, schedule-gap repairs, and plan-specific chat.
Roadmap
- Checkbox write-back, so logging a linked activity updates the matching markdown task.
- Folder sync through GitHub webhooks or an Obsidian plugin.
log_activityover MCP, so agent work sessions feed your streaks directly.
