| name | project-mgr |
|---|---|
| description | Builds an active Obsidian project note from a one-line goal under Projects/Doing/ — success criteria, workstreams, |
| user-invocable | true |
Turns a one-line goal into a durable Obsidian project under Projects/Doing/, following the vault's GTD split (agent work → Obsidian; solo errands → Microsoft To Do). Writes success criteria, workstreams, opt-in #task next actions, open questions, and related links — then announces the project in today's daily journal.
- User gives a goal that needs multi-step agent collaboration ("publish X", "renew Y", "resolve Z")
- User says "build a project", "start a project",
/project-mgr, or "project for <goal>" - A backlog item has grown big enough to leave
Dashboard/Backlog.mdand become its own folder
Do not use for: one-shot errands, shopping lists, calendar reminders (those stay in Microsoft To Do), or software delivery that belongs in GitHub Issues / CCPM.
| Rule | Why |
|---|---|
| Privacy first — never invent or copy SSNs, account numbers, medical IDs, school IDs, passwords, full street addresses, or card numbers into the project note | Project notes are often linked and searched; minimize sensitive surface |
When linking people: confirm the profile note exists, then append a Related [[wikilink]] only — do not open or copy profile body fields (DOB, IDs, school, medical, employers, balances) |
Keeps PII in one place; cross-link ≠ scrape |
Prefer [[wikilinks]] to people/entities over restating private profile fields |
Avoids duplicating PII into every project |
A checkbox is tracked only with #task (or if it lives in Dashboard/Backlog.md) |
Bare - [ ] is plain markdown — not a todo |
Put outcome → next action on #task lines; add 📅 YYYY-MM-DD only for real deadlines |
Undated tasks live in the next-actions pool |
| Do not fabricate deadlines, owners, costs, or facts | Unknowns stay as — or open questions |
| Re-read any vault file immediately before editing | iCloud / Obsidian linter rewrites files between read and write |
Log via the log-to-journal skill (or its scripts/journal_insert.py) — do not reimplement journal insert logic here |
One insert path; handles linter race + Unicode |
VAULT="${VAULT_DIR:-$PWD}"
YEAR=$(date "+%Y")
YY=$(date "+%y")
NOW=$(date "+%Y-%m-%dT%H:%M")Confirm $VAULT has Projects/Doing/ and Journals/. If not, ask the user for the vault path.
Capture from the user (or the current message):
- Goal — one sentence outcome
- Optional — display names for
[[wikilinks]], hard deadline, out-of-scope notes, related existing notes
Optional "people involved" means display names for wikilinks only — not a prompt to open or scrape profile notes.
If the goal is clearly a solo errand ("buy milk", "pay bill"), stop and say it belongs in Microsoft To Do — do not create a project.
Search before creating:
rg -il "<goal keywords>" "$VAULT/Projects/" "$VAULT/Dashboard/" 2>/dev/null | head -20- If an active project already covers this goal → update it (refresh next actions / open questions) instead of duplicating; report the existing path.
- If next actions or other user-visible content changed → also log a short journal bullet ("refreshed project …").
- If nothing material changed → skip the journal.
- If a Done project exists and the user wants a sequel → create a new folder; link the old one under Related.
Pattern: Projects/Doing/<YY>_<Slug>/
YY= two-digit year (date "+%y")Slug= short Title_Case or snake topic, no spaces (e.g.26_Example_Comic,26_Appliance_Replacement)
SLUG="<YY>_<Topic_Slug>"
PROJ_DIR="$VAULT/Projects/Doing/$SLUG"
PROJ_NOTE="$PROJ_DIR/$SLUG.md"
mkdir -p "$PROJ_DIR"If $PROJ_NOTE already exists, treat as update mode (Step 1).
Create $PROJ_NOTE with this skeleton. Fill from the goal; leave unknowns as —.
---
created: <NOW>
updated: <NOW>
tags:
- project
status: doing
goal: <one-line goal>
---
# <Emoji> <Title>
> [!abstract] Goal
> **<goal>** — one sentence. Link people with [[wikilinks]] only; do not paste private profile fields.
## 🎯 Success criteria
| Criterion | How we know it's done | Status |
|---|---|---|
| <criterion> | <check> | next |
**Out of scope (for v1):** <bullets, or "—">
## 🗺️ Workstreams
| ID | What | Owner | Status | Depends |
|---|---|---|---|---|
| 1 | <phase> | [[Person]] or — | next | — |
## ✅ Next actions
- [ ] <outcome> → <concrete next action> #task [[<SLUG>]]
- Done when: <one-line done criterion>
## ❓ Open questions
- <question>
## 📌 Decisions
| When | Decision | Why |
|---|---|---|
| — | — | — |
## 🕰️ Timeline
- **<YYYY-MM-DD>** — Project created; goal set
## 🔗 Related
- [[People or notes]]Status pills in tables: done / in progress / next / blocked / ⚠ caveat.
Privacy when filling:
- Link
[[Person]]instead of embedding DOB, IDs, emails, phones, schools, employers, or balances - If a fact is required to act (e.g. a case/receipt number the user already stated for this project), keep it — but do not scrape unrelated fields from profiles
- Sample / illustrative text in chat replies must stay fictional; never paste real vault PII into the skills repo or public docs
Seed 2–4 #task next actions that unblock progress. Prefer clarifying questions as open questions when the format/owner/deadline is unknown — do not invent them.
For each person or entity central to the goal:
- Confirm their profile note exists (path / wikilink resolve only — do not read the note body for fields to copy)
- Append a Related bullet pointing at the project (wikilink with display text)
- Bump that note's frontmatter
updated: - Stubs via
[[Name]]are fine when no profile exists yet
Invoke the log-to-journal skill (preferred). Pass a two-line entry; let that skill resolve the journal path, reverse-chron slot, linter race, and Unicode-safe insert. Do not reimplement those steps here.
Entry shape (log-to-journal rules):
- Headline =
HH:MM 📁 <short title>only — no→or wikilink on the headline - Details in tab-indented nested sub-bullets, e.g.
Created [[Projects/Doing/<SLUG>/<SLUG>|<Title>]] — goal: <one line>; next: <top next action> - Section:
## 🏠 Life(default) or## 💼 Workif work-related - If today's journal file is missing, stop and ask — do not invent a daily note unless the user confirms
Reply with:
- Project path (wikilink)
- Goal + success criteria count
- The
#tasknext actions seeded - Open questions still blocking a fuller plan
- Anything skipped for privacy (e.g. "linked profile only; did not copy IDs")
/project-mgr publish Alex's first comic book
/project-mgr plan a backyard compost bin
/project-mgr close out the ExampleCo warranty claim for a dishwasher
Projects/Doing/<YY>_<Slug>/<YY>_<Slug>.md— active project note- Optional updates to related profile notes (Related links only)
- One daily-journal bullet announcing the project (creation always; updates only when content changed)
- Obsidian vault with
Projects/Doing/,Journals/YYYY/YYYY-WXX/, and the#task/Dashboard/Tasks.mdconvention datewith%y/%Vsupport- log-to-journal skill available (or its
scripts/journal_insert.py) for reliable journal inserts
project-mgr/
├── SKILL.md
└── README.md