agentleFS
jramsahaijramsahai/obsidian-mcp-brain/project-tracking/SKILL.md

project-tracking

Skill0 starsChanged 2 months agoMITView on GitHub

Track work projects in the Obsidian vault: create/update project notes, status, key decisions, blockers, meeting notes, docs, and stakeholder links. Use for project state and project conversations. NOT for: individual tasks (task-tracking), pre-project ideas (idea-pipeline), or evergreen reference (knowledge-base).

3 other projects use a version of this.

Adopted by

Most recently taken up by

The file

Show its rules and text

We split this skill into the rules it gives an agent

20 rules. 0 are common, 9 are distinctive, and 11 are very specific to this project.

  • 0

    Common

    Most of the 3 edited versions we read keep these.

  • 9

    Distinctive

    This author's own choices. Worth a look.

  • 11

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    When creating a project:

    line 80
  2. Very specific:

    If the user also gives actionable work, route to task-tracking to add tasks to Tasks.md.

    line 86
  3. Distinctive:

    When updating a project:

    line 88
  4. Distinctive:

    Read the existing project note.

    line 90
  5. Distinctive:

    Add dates using the local timezone.

    line 105
  6. Very specific:

    If task state changes are implied but not explicit, mention the possible task update instead of changing Tasks.md silently.

    line 108
  7. Distinctive:

    Treat the project note as the source of project state.

    line 112
  8. Very specific:

    Treat Tasks.md as the source of task state.

    line 113
  9. Very specific:

    Use ## Related Tasks in the project note to reference important tasks by exact task text.

    line 115
  10. Very specific:

    Do not duplicate full task lists inside project files.

    line 116
  11. Very specific:

    When a project is marked Done, do not automatically complete all related tasks unless the user explicitly asks.

    line 117
  12. Very specific:

    When all related tasks are done, do not automatically mark the project Done unless the user explicitly asks.

    line 118
  13. Distinctive:

    If project status and task status conflict, preserve both and call out the inconsistency.

    line 119
  14. Very specific:

    Add a brief entry to the project note's ## Conversation Log pointing to the meeting note with a wikilink.

    line 128
  15. Distinctive:

    Add a concise docs note to the project note when useful.

    line 135
  16. Very specific:

    Add blockers and external dependencies to ## Waiting On with what, who (wikilinked), and since date.

    line 141
  17. Very specific:

    If a waiting item should be tracked as work, route to task-tracking and use Waiting On Others.

    line 142
  18. Distinctive:

    Do not invent project metadata.

    line 148
  19. Distinctive:

    Do not create tasks without clear actionable wording.

    line 149
  20. Very specific:

    Do not create a project from a vague idea unless the user asks to track it as a project.

    line 150

“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Project Tracking

Manage project records in the user's Obsidian second brain. Use second-brain for shared vault conventions and task-tracking when task state must be created or changed.

Data Source

  • Vault config (path, timezone): see second-brain -> Vault.
  • Project note: Projects/[Project Name]/[Project Name].md — named after the project so [[Project Name]] wikilinks resolve to it. Created with obsidian__note_create type="project"; the path is derived, never hand-constructed.
  • Central task file: Tasks.md, written through obsidian__task_add and obsidian__task_update.
  • Adding a table row or a line under a heading is obsidian__section_append, which targets the named section rather than the end of the file.
  • A dated entry in the running ## Activity Log is obsidian__log_append, which writes the ### YYYY-MM-DD heading itself and keeps the newest day at the top. That section is not a obsidian__section_append target.

Project Note Template

---
type: project
status: Active
created: YYYY-MM-DD
started: YYYY-MM-DD
people: []
topics: []
---

# [Project Name]

**Description:** One-line description

## Stakeholders

- [[First Last]] — Role
- Org or team name — Role (plain text for orgs; wikilinks for people)

## Key Decisions

| Date | Decision | Reasoning |
|------|----------|-----------|

## Conversation Log

| Date | Who | Summary |
|------|-----|---------|

## Waiting On

| What | Who | Since |
|------|-----|-------|

## Related Tasks

- Task text (see [[Tasks]])

## Activity Log

### YYYY-MM-DD

- What happened, newest date first

## Related

- [[Knowledge note or other related note]] — why it is related

Status values: Active, On Hold, Blocked, Done, Archived. Status lives in frontmatter (status:), not in the body, so Bases and queries can read it. Archived is set by resurfacing, never inferred by this skill — see second-brain -> Frontmatter Standards.

people: holds quoted wikilinks to person notes: people: ["[[First Last]]"]. topics: holds plain topic strings: topics: [video, playback].

Workflow

When creating a project:

  1. Normalize the project name to Title Case unless the user gives exact casing.
  2. obsidian__note_create type="project" name="[Project Name]" — the server creates the folder, the note, the frontmatter, and the standard sections. Pass known values through fields, e.g. fields={"status":"Active","people":"Jane Doe, Sam Lee","description":"One line"}; people becomes quoted wikilinks.
  3. If the user supplied a written brief — a spec, a plan, hardware or API details, a phased roadmap, anything with its own headings — the brief is the deliverable, not raw material for a summary. Create obsidian__note_create type="doc" name="technical-brief" project="[Project Name]" body="<the full text>" first, before filling any section, and wikilink it from ## Related. A doc note gets no section skeleton precisely so it can hold a document whole. Demote the brief's headings one level so the note keeps a single H1.
  4. Fill the project note's sections with obsidian__section_append. Use [[First Last]] wikilinks for every person named. The sections summarize and point at the doc; they never replace it.
  5. If the user also gives actionable work, route to task-tracking to add tasks to Tasks.md.

When updating a project:

  1. Read the existing project note.
  2. Append to the relevant section with obsidian__section_append, and keep the status, people, and topics properties in sync with obsidian__note_set_field note="[Project Name]" field="status" value="On Hold". Stale frontmatter is not cosmetic: standup lists active projects with obsidian__vault_list type="project" status="Active", so a project left Active after it stops is reported as live work every weekday until someone notices.
  3. Log what happened in the ## Activity Log:

    obsidian__log_append note="[Project Name]" section="Activity Log" content="Proposal sent; awaiting response"

    Pass the entry text only — no date prefix and no bullet marker. Never use obsidian__section_append on that section: it drops a bare line above every dated block, which is where the CLI-written entries of 2026-08-01 ended up.

    A project note written before the template carried ## Activity Log will not have one, and the call fails naming the sections it does have. Add create_section=true to that call and the heading is created in template position.

    If the call is refused as too similar to an entry already in that day's block, you already logged this — the error quotes the entry it collides with. Do not reword and retry; that is exactly how one turn wrote the same board purchase into a log three times. allow_similar=true is for a genuinely separate event that happens to read alike, not for getting past the message.

    To undo an entry this system wrote by mistake, use obsidian__log_remove note="[Project Name]" section="Activity Log" date="YYYY-MM-DD" match="<text from the entry>". It is the only tool here that deletes, it touches one dated block, and it exists so that fixing a bad entry never means editing the file directly. Do not use it on entries the user wrote — if something is merely out of date, log a new entry saying so.

  4. Add dates using the local timezone.
  5. Preserve existing tables and user wording where possible.
  6. Wikilink people in the Who columns of Conversation Log and Waiting On.
  7. If task state changes are implied but not explicit, mention the possible task update instead of changing Tasks.md silently.

Project-Task Relationship

  • Treat the project note as the source of project state.
  • Treat Tasks.md as the source of task state.
  • Tasks link to the project with a [[Project Name]] wikilink that exactly matches the project note name.
  • Use ## Related Tasks in the project note to reference important tasks by exact task text.
  • Do not duplicate full task lists inside project files; keep task state centralized in Tasks.md.
  • When a project is marked Done, do not automatically complete all related tasks unless the user explicitly asks.
  • When all related tasks are done, do not automatically mark the project Done unless the user explicitly asks.
  • If project status and task status conflict, preserve both and call out the inconsistency.

Meeting Notes and Docs

Both are created with obsidian__note_create, which derives the folder from the type and the project and writes the frontmatter. Never place these files by hand.

Meeting notes — obsidian__note_create type="meeting" name="YYYY-MM-DD BriefDescription" project="Project Name":

  • Include attendees (as [[First Last]] wikilinks), discussion points, decisions, and action items when available.
  • Add a brief entry to the project note's ## Conversation Log pointing to the meeting note with a wikilink.
  • Route action items to task-tracking when they are concrete tasks.

Docs — obsidian__note_create type="doc" name="vendor-comparison" project="Project Name" — for drafts, research, and references:

  • Name files descriptively: draft-proposal, vendor-comparison. Generic names are refused, which is why the older Docs/INDEX.md files could never be linked to.
  • A doc gets no section skeleton; its shape is yours. Pass the opening prose as body and fill the rest with obsidian__section_append.
  • Add a concise docs note to the project note when useful.

Conversations and Waiting Items

  • Log project conversations in ## Conversation Log with date, who (wikilinked), and summary.
  • For person-specific relationship context, also route to people-notes.
  • Add blockers and external dependencies to ## Waiting On with what, who (wikilinked), and since date.
  • If a waiting item should be tracked as work, route to task-tracking and use Waiting On Others.

Safety

  • Never compress supplied material to make it fit a section. The project template has no section shaped like a spec, so a brief pushed into ## Key Decisions arrives as a table row with the wrong number of cells and the server rejects it. That rejection means the content has no home yet — create the doc note. It does not mean write one summary line and drop the rest. On 2026-08-02 a full ESP32 hardware and API brief became a single decision row this way, and nothing else survived.
  • Detail is lost silently. A section that is merely thin looks the same as one the user never filled in, so there is no later signal that anything went missing — the check has to happen while the material is still in front of you.
  • Do not invent project metadata.
  • Do not create tasks without clear actionable wording.
  • Do not create a project from a vague idea unless the user asks to track it as a project; otherwise capture it to Inbox.md or use the idea pipeline if appropriate.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.