diff --git a/README.md b/README.md index 40153ad..8b20f88 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,175 @@ # cowork-project -CoWork skill that manages the full coordination lifecycle for MPM CoWork skills and plugins — concept interviews, folder creation, README writing, Wiki V2 docs, .skill packaging, and registry updates. \ No newline at end of file +CoWork skill that manages the full coordination lifecycle for MPM CoWork skills and plugins. + +**Version:** 1.0 +**Author:** Message Point Media +**Repo:** https://git.alwisp.com/jason/cowork-project +**CoWork Project:** CW-002 — CoWork Project Coordination + +--- + +## Overview + +This skill automates every coordination step that must happen when a new CoWork skill, plugin, or tool is created or updated at MPM. It handles two distinct lifecycle modes: capturing a concept that doesn't exist yet (Mode 1), and documenting a fully-built or recently-updated project (Mode 2). It connects directly to the MPM CoWork coordination system in Google Drive (folder structure, Google Docs Wiki V2, and Google Sheets project registry) and to the MPM Gitea instance for repo creation and README pushes. All Drive operations use the Google Workspace MCP exclusively — the local FUSE mount path is never used due to OSError Errno 35 deadlock issues. + +--- + +## Skills + +| Skill | What It Does | +|---|---| +| `cowork-project` | Manages the full CoWork project coordination lifecycle. Triggers on: "new skill idea", "I want to build a plugin for X", "let's capture this concept", "add a new project to the registry", "create the entry for this", "document this plugin", "update the wiki", "add to the coordination folder", "set up the project folder", "package the plugin", "we just finished building", "update the registry for". Runs Mode 1 (concept interview) or Mode 2 (document existing build) depending on context. | + +--- + +## Tools Reference + +This is a skill-only plugin — no MCP server. It orchestrates existing connected tools: + +| Tool Group | Tools Used | +|---|---| +| **Google Drive** | `create_drive_folder`, `create_drive_file`, `update_drive_file` | +| **Google Docs** | `create_doc`, `batch_update_doc` | +| **Google Sheets** | `read_sheet_values`, `modify_sheet_values` | +| **Gitea** | `create_repo`, `create_or_update_file`, `get_file_contents` | + +--- + +## System Constants + +| Item | Value | +|---|---| +| Coordination folder (Drive ID) | `1W-FNW--P2R9jVvoowUXFmSe-sAZoY0GS` | +| Project Registry (Sheet ID) | `1xN3l3CjhkpXQBo6hS85Qii86fC-yILg6qbxd33cChMA` | +| Registry sheet name | `Project Registry` | +| Wiki Template V2 (Doc ID) | `1QySFc6lycK9AOIaiuQFkv9pGiRlm7S9_wgFsrXM4Alo` | +| Git org base URL | `https://git.alwisp.com/` | + +--- + +## Mode 1 — Concept + +Runs a structured interview to capture a new skill/plugin/tool concept before any code exists. + +**Interview covers:** +1. CW-ID (user-specified or auto-assigned) +2. Project name +3. Type (Plugin / Skill / Tool / Feature) +4. Concept description (2–4 sentences) +5. Capabilities to expose +6. Owner and contributors +7. Priority (Critical / High / Medium / Low) +8. Dependencies +9. Git repo (existing URL or offer to create one) + +**Outputs (in order):** +1. Assign CW-ID — always ask user first; if auto-assigning, read all column A values, parse as integers, take max+1 +2. Create Drive folder `CW-XXX — [Project Name]` in Coordination folder +3. Create Git repo via Gitea MCP if requested +4. Write `CW-XXX_Concept.md` to Drive folder via `create_drive_file` (never local FUSE path) +5. Add registry row at correct numeric position (shift rows down for backfill) +6. Confirm: CW-ID, folder link, Concept.md link, registry row + +The Concept.md is designed to be read at the start of the build session to orient Claude on the agreed scope and design intent. + +--- + +## Mode 2 — Document Existing Build + +Full 10-step process for creating or refreshing all coordination artifacts for a built or updated project. + +**Steps:** +1. **Gather source** — repo URL, plugin file (if any), CW-ID (ask user first for designated ID) +2. **Extract metadata** — download repo archive; read plugin.json, SKILL.md, references/, assets/, existing README +3. **Determine CW-ID and registry state** — read existing row if one exists; only update changed fields +4. **Create Drive folder** — `CW-XXX — [Project Name]` in Coordination folder (or use existing) +5. **Write README.md** — thorough; if SKILL.md lists 12 tools, README lists all 12; push to Drive folder AND Git repo +6. **Package .skill file** — skill-only: zip `.claude-plugin/plugin.json` + `skills/`; with server: include `server/` and `.mcp.json`; upload to Drive folder +7. **Create or update Wiki Doc** — V2 5-section format; use `create_doc` → `update_drive_file add_parents` → `batch_update_doc`; if updating, prepend changelog row only +8. **Verify all 3 artifacts** in Drive folder before registry write +9. **Update registry** — correct-order insertion; update Version, Drive Folder, Wiki Doc, Last Updated, Notes +10. **Confirm to user** — all artifact links + any manual follow-up flags + +**Critical rules:** +- Never write files to the FUSE-mounted Google Drive path — Drive API tools only +- Thin README is worse than no README — pull every tool, every trigger phrase +- For backfill CW-IDs, read all column A values and shift rows at insertion point downward +- Confirm version number before writing any artifacts +- Wiki Concept section: 3–5 sentences minimum; all trigger phrases in Skills Exposed + +--- + +## Wiki V2 Format + +Every project wiki uses the 5-section V2 format: + +| Section | Content | +|---|---| +| **Header block** | `CW-XXX \| Status \| Owner \| Contributors \| Last Updated` | +| **1. Concept** | 3–5 sentences: problem solved, how, who uses it, systems connected | +| **2. Skills Exposed** | One row per skill; include all trigger phrases and key tools | +| **3. Setup Instructions** | Complete inline steps; don't just say "see README" | +| **4. Feature Requests & Planning** | Table with #, Request, Requested By, Status | +| **5. Changelog** | Reverse chronological; add row per version; never delete old entries | + +--- + +## Registry Column Map + +| Col | Field | Col | Field | +|---|---|---|---| +| A | ID (CW-XXX) | J | Purpose | +| B | Project Name | K | Repo (Git) | +| C | Type | L | Drive Folder | +| D | Status | M | Chat Space | +| E | Priority | N | Wiki Doc | +| F | Version | O | Odoo Module | +| G | Owner | P | Dependencies | +| H | Contributors | Q | Last Updated | +| I | Description | R | Notes | + +--- + +## Setup Instructions + +This is a skill-only plugin — no server installation required. + +**Prerequisites:** +- Google Workspace MCP connected (provides Drive, Docs, Sheets tools) +- Gitea MCP connected to `https://git.alwisp.com` (provides repo tools) + +**Install:** +1. Install from the `.skill` file: Claude Desktop → Settings → Plugins → Add Plugin → select `cowork-project-v1.0.skill` +2. Restart Claude Desktop +3. Verify: ask Claude "what's the cowork-project skill for?" — it should describe the coordination workflow + +### Setup Checklist + +- [ ] Google Workspace MCP connected and authenticated +- [ ] Gitea MCP connected to git.alwisp.com +- [ ] .skill file installed +- [ ] Claude Desktop restarted +- [ ] Skill responding to trigger phrases + +--- + +## Requirements + +- Claude Desktop (Cowork mode) +- Google Workspace MCP (Drive, Docs, Sheets access) +- Gitea MCP (repo creation and file push) +- Write access to the MPM Coordination Google Drive folder +- Write access to the Project Registry Google Sheet + +--- + +## Troubleshooting + +| Symptom | Fix | +|---|---| +| OSError Errno 35 when writing files | Never use local FUSE path — use `create_drive_file` or `create_doc` via Drive API | +| CW-ID collision (duplicate assigned) | Read ALL column A values; parse as integers; take max+1; ask user first for designated IDs | +| Wiki doc fails to appear in Shared Drive folder | Use `create_doc` (lands in My Drive) then `update_drive_file` with `add_parents` to move | +| .skill packaging fails | Use `zip -r /tmp/plugin-name.skill .claude-plugin/ skills/` from repo root; copy to outputs dir before Drive upload | +| Registry row out of order | Read all rows; shift from insertion point downward one row at a time; write new row at correct position |