commit d20825cdd93aaf83ca03482bbde05397a6904503 Author: Chase Setters Date: Wed May 13 14:13:53 2026 -0500 Initial commit: WilloW-PMTools marketplace with willow-pmtools plugin Marketplace with one plugin (willow-pmtools) that wires the projecttodos MCP server (mcp.willowbrook.work) into Cowork and ships a /todos morning briefing slash command. diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json new file mode 100644 index 0000000..149ba54 --- /dev/null +++ b/.claude-plugin/marketplace.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://json.schemastore.org/claude-code-plugin-marketplace.json", + "name": "willow-pm-marketplace", + "displayName": "Willowbrook PM Tools", + "description": "Internal Willowbrook plugins for project management — todos, lists, and other PM workflows wired up to the company's 4D backend.", + "owner": { + "name": "Willowbrook", + "url": "https://willowbrook.build" + }, + "plugins": [ + { + "name": "willow-pmtools", + "source": "./plugins/willow-pmtools" + } + ] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..9409ba1 --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +# Willowbrook PM Tools — Cowork Plugin Marketplace + +Private plugin marketplace for Willowbrook team members. Sync this repo into Cowork to give everyone access to internal PM tools. + +## Plugins in this marketplace + +| Plugin | Purpose | +|---|---| +| [willow-pmtools](./plugins/willow-pmtools/) | Todo + list management wired to the company's 4D backend, plus a `/todos` morning briefing command. | + +More plugins will be added here over time (Fieldwire, knowledge base, etc.). + +## How Cowork admins install this + +1. Claude Desktop → Organization settings → Plugins → Add plugin → GitHub → `/` +2. The Claude GitHub App must be installed on this repo (private repo, github.com only — not GHE). +3. Pick install preference per plugin: *Installed by default*, *Required*, *Available for install*, or *Not available*. +4. Updates auto-sync on every merged PR (up to ~30 min); team members pick up changes on the next session. + +## Repo layout + +``` +.claude-plugin/ + marketplace.json ← catalog (REQUIRED at this exact path) +plugins/ + willow-pmtools/ + .claude-plugin/ + plugin.json ← plugin manifest + .mcp.json ← MCP server config + commands/ + todos.md ← /todos slash command + README.md +``` + +The `marketplace.json` location is **not** optional — Cowork rejects manifests anywhere else. diff --git a/plugins/willow-pmtools/.claude-plugin/plugin.json b/plugins/willow-pmtools/.claude-plugin/plugin.json new file mode 100644 index 0000000..189e333 --- /dev/null +++ b/plugins/willow-pmtools/.claude-plugin/plugin.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://json.schemastore.org/claude-code-plugin.json", + "name": "willow-pmtools", + "displayName": "WilloW-PMTools", + "version": "1.0.0", + "description": "Project management tools for Willowbrook — chat with the company's todo system, browse lists, and create or complete tasks from any Cowork conversation.", + "author": { + "name": "Willowbrook", + "url": "https://willowbrook.build" + }, + "keywords": ["willowbrook", "todos", "project-management", "construction"] +} diff --git a/plugins/willow-pmtools/.mcp.json b/plugins/willow-pmtools/.mcp.json new file mode 100644 index 0000000..0ad2e30 --- /dev/null +++ b/plugins/willow-pmtools/.mcp.json @@ -0,0 +1,8 @@ +{ + "mcpServers": { + "projecttodos": { + "type": "http", + "url": "https://mcp.willowbrook.work/mcp" + } + } +} diff --git a/plugins/willow-pmtools/README.md b/plugins/willow-pmtools/README.md new file mode 100644 index 0000000..2a51539 --- /dev/null +++ b/plugins/willow-pmtools/README.md @@ -0,0 +1,33 @@ +# WilloW-PMTools + +Project management tools for Willowbrook, available in any Cowork conversation. + +## What you get + +**MCP tools** (via `projecttodos` server at `mcp.willowbrook.work`): + +- `get_lists` — your todo lists with open counts +- `get_list_todos` — open todos in a specific list +- `create_list` / `update_list` — manage lists +- `create_todo` / `update_todo` / `complete_todo` — manage individual todos +- `get_users` — staff directory (for picking assignees) +- `get_notes` / `save_notes` — your personal notepad +- `ai_suggest_todos` — generate todo suggestions from a prompt + +Completed and deleted items are filtered out — Claude only sees open work. + +**Slash commands:** + +- `/todos` — Morning briefing. Pulls every open todo across your lists and presents them grouped by overdue / due today / due this week / high priority / by list. + +## First-time setup + +The first time you use any of these tools in a Cowork conversation, you'll see a one-time prompt asking for your **name and work email**. That identity is what shows up as the Assigner on todos you create and is how the backend decides which lists you can see. + +## Authentication + +OAuth happens automatically on first use — no credentials to manage. + +## Support + +Questions or issues: Chase diff --git a/plugins/willow-pmtools/commands/todos.md b/plugins/willow-pmtools/commands/todos.md new file mode 100644 index 0000000..fa8a7fa --- /dev/null +++ b/plugins/willow-pmtools/commands/todos.md @@ -0,0 +1,33 @@ +--- +description: Morning todo briefing — open work across all your lists, overdue first +--- + +Pull the user's open todos and give them a focused morning briefing. + +## What to do + +1. Call `get_lists` to discover every list the user can see (owned, assigned, or project-visible). +2. For each list with `openCount > 0`, call `get_list_todos` with that `listId`. +3. Combine all returned todos into a single picture. + +## How to present the briefing + +Group todos into these sections **in this order** — skip any section that has no items: + +- **🔴 Overdue** — `dueDate` is set and is before today. +- **📅 Due today** — `dueDate` matches today. +- **📆 Due this week** — `dueDate` is within the next 7 days. +- **🟠 High priority (no date)** — `priority === "High"` and no `dueDate` (or `dueDate` is further out). +- **Everything else** — group the remaining open todos by their list name. + +For each todo, show: +- The description +- The list it belongs to (in parentheses, dimmed) +- Due date if set (formatted as `MMM D`, e.g. `May 13`) +- Other assignees if the todo is shared (skip if the user is the only assignee) + +## Tone + +Keep it tight and scannable — no preamble, no closing summary. The user wants to see their work, not read prose about it. + +If there are zero open todos across all lists, just say so in one short sentence.