feat(basecamp-project): rewrite SKILL.md with Discovery framework and all tools
This commit is contained in:
@@ -1,247 +1,307 @@
|
|||||||
---
|
---
|
||||||
name: basecamp-project
|
name: basecamp-project
|
||||||
description: |
|
description: |
|
||||||
Use when: (1) User wants to create a Basecamp project from an existing plan document,
|
Use when: (1) User wants to create a new Basecamp project,
|
||||||
(2) User wants to generate a project draft before confirming creation.
|
(2) User wants to generate a project draft from plan or Discovery,
|
||||||
Triggers: "create basecamp project from plan", "setup project in basecamp",
|
(3) User wants to duplicate a Basecamp template.
|
||||||
"basecamp draft", "plan to basecamp", "launch project", "initialize project in basecamp"
|
Triggers: "create basecamp project", "setup project in basecamp",
|
||||||
|
"basecamp draft", "plan to basecamp", "launch project",
|
||||||
|
"initialize project in basecamp", "new project"
|
||||||
compatibility: opencode
|
compatibility: opencode
|
||||||
---
|
---
|
||||||
|
|
||||||
|
# basecamp-project Skill
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
Creates a Basecamp project from a markdown plan document via a human-in-the-loop workflow:
|
Erstellt Basecamp-Projekte via strukturiertem Workflow: Discovery → Template → Draft → Review → Create.
|
||||||
draft first, review, then create. Extracts project structure from the plan, prompts for missing
|
Zwei Modi: Discovery-Mode (interaktive Fragen) oder Plan-Mode (aus Markdown-Datei).
|
||||||
information, generates a proposal, and creates the full project on confirmation.
|
|
||||||
|
|
||||||
## Prerequisites
|
## Workflow
|
||||||
|
|
||||||
- Basecamp CLI configured (`basecamp doctor` passes)
|
### 1. START: Modus wählen
|
||||||
- Plans stored as markdown files in `docs/plans/`
|
|
||||||
- Basecamp skill available for API calls
|
|
||||||
|
|
||||||
## Core Workflow
|
```
|
||||||
|
User: "Erstelle ein neues Projekt in Basecamp"
|
||||||
|
|
||||||
### Step 1: List Plans
|
→ Zeige Modus-Auswahl:
|
||||||
|
[1] 🧭 Discovery Mode (interaktive Fragen)
|
||||||
List all markdown files in `docs/plans/`:
|
[2] 📄 Plan Mode (aus Markdown-Datei)
|
||||||
|
[3] 📋 Basecamp Template duplizieren
|
||||||
```bash
|
|
||||||
ls -1 docs/plans/*.md
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Present as numbered list for easy selection.
|
### 2. DISCOVERY MODE
|
||||||
|
|
||||||
### Step 2: User Selects Plan
|
Führe durch die 8 Discovery-Phasen (siehe `references/discovery-questions.md`):
|
||||||
|
|
||||||
User picks a plan by number or filename. Validate the file exists before proceeding.
|
1. **Vision & Goals** - Projektziel definieren
|
||||||
|
2. **Success Criteria** - Woran erkennen wir Erfolg?
|
||||||
|
3. **Timeline & Milestones** - Zeitplan mit Meilensteinen
|
||||||
|
4. **Team & Roles** - Wer ist dabei?
|
||||||
|
5. **Communication Preferences** - Wie kommunizieren?
|
||||||
|
6. **Tools & Workflows** - Welche Basecamp-Tools?
|
||||||
|
7. **Risks & Dependencies** - Risiken und Abhängigkeiten
|
||||||
|
8. **Review** - Zusammenfassung bestätigen
|
||||||
|
|
||||||
### Step 3: Parse Plan
|
**Regeln:**
|
||||||
|
- Jede Phase ist überspringbar
|
||||||
|
- Multiple Choice mit "Anderes" Freitext-Option
|
||||||
|
- Vorherige Antworten als Vorschlag ("Vorlage von: ...")
|
||||||
|
- Natürliche Datumsangaben akzeptieren
|
||||||
|
|
||||||
Read the selected file and extract available fields:
|
### 3. TEMPLATE WAHL
|
||||||
|
|
||||||
| Field | Source | Required |
|
Zeige verfügbare Templates:
|
||||||
|-------|--------|----------|
|
```
|
||||||
| Project name | First heading (`# Title`) or frontmatter `title:` | Yes |
|
Verfügbare Vorlagen:
|
||||||
| Description | Frontmatter `description:` or second paragraph | Yes |
|
[1] Feature Launch - Neues Feature entwickeln
|
||||||
| Start date | Frontmatter `start:`, `starts:`, or natural mention | Yes |
|
[2] Workshop/Training - Schulung oder Workshop
|
||||||
| End date | Frontmatter `end:`, `due:`, `deadline:`, or natural mention | Yes |
|
[3] Retrospektive - Team-Retro
|
||||||
| Milestones | Sections with dates (e.g., "## Phase 1: Discovery") | Yes |
|
[4] Meeting Management - Wiederkehrende Meetings
|
||||||
| Tasks | Bulleted lists under milestones | Yes |
|
[5] Sprint/Iteration - Sprint planen
|
||||||
| Assignees | Task modifiers (`@person`, `--assignee`) or frontmatter `team:` | No |
|
[6] Research/MVP - Forschung oder Prototyp
|
||||||
| Documents | Links (`[ref](url)`) or frontmatter `attachments:` | No |
|
[7] Eigenes Design - Eigene Struktur
|
||||||
|
[8] Basecamp Template - Vorhandenes Template nutzen
|
||||||
|
```
|
||||||
|
|
||||||
If frontmatter uses a non-standard structure, parse body content and use natural language cues.
|
### 4. DRAFT GENERATION
|
||||||
|
|
||||||
### Step 4: Prompt for Missing Information
|
#### Plan Mode (aus Datei)
|
||||||
|
1. Liste Dateien in `docs/plans/`
|
||||||
|
2. User wählt Datei
|
||||||
|
3. Parse Plan (siehe unten)
|
||||||
|
4. Fehlende Daten via Discovery-Phasen ergänzen
|
||||||
|
|
||||||
Prompt one field at a time, in this order:
|
#### Discovery Mode (aus Fragen)
|
||||||
|
1. Generiere Draft basierend auf Discovery-Antworten
|
||||||
|
2. Verwende gewähltes Template als Grundstruktur
|
||||||
|
3. Fülle mit User-Daten
|
||||||
|
|
||||||
1. **Project name** — if not found
|
### 5. PARSE PLAN (für Plan Mode)
|
||||||
2. **Start date** — if not found (use "When should this project begin?")
|
|
||||||
3. **End date** — if not found (use "When should this project be completed?")
|
|
||||||
4. **Team members** — if not found:
|
|
||||||
- First, fetch Basecamp people: `basecamp people list --json`
|
|
||||||
- Present as picker with names
|
|
||||||
- Fall back to free text if not found
|
|
||||||
5. **Assignees** — map tasks to team members (one prompt per unassigned task group)
|
|
||||||
6. **Milestone dates** — if milestones lack dates, prompt for each
|
|
||||||
|
|
||||||
For date fields, accept natural language (`"next Monday"`, `"May 15"`, `"2025-06-01"`).
|
Extrahiere aus Markdown:
|
||||||
|
|
||||||
### Step 5: Generate Draft
|
**Project name:**
|
||||||
|
- Quelle: `# Title` oder frontmatter `title:`
|
||||||
|
- Required: Yes
|
||||||
|
|
||||||
Compose a structured proposal as markdown:
|
**Description:**
|
||||||
|
- Quelle: frontmatter `description:` oder erster Absatz
|
||||||
|
- Required: Yes
|
||||||
|
|
||||||
|
**Start date:**
|
||||||
|
- Quelle: frontmatter `start:`, `starts:`, oder natürliche Erwähnung
|
||||||
|
- Required: Yes
|
||||||
|
|
||||||
|
**End date:**
|
||||||
|
- Quelle: frontmatter `end:`, `due:`, `deadline:`, oder natürliche Erwähnung
|
||||||
|
- Required: Yes
|
||||||
|
|
||||||
|
**Milestones:**
|
||||||
|
- Quelle: Sections mit `##` Level
|
||||||
|
- Required: Yes
|
||||||
|
|
||||||
|
**Tasks:**
|
||||||
|
- Quelle: Listen unter Milestones
|
||||||
|
- Required: Yes
|
||||||
|
|
||||||
|
**Assignees:**
|
||||||
|
- Quelle: `@person` Modifier oder frontmatter `team:`
|
||||||
|
- Required: No
|
||||||
|
|
||||||
|
**Documents:**
|
||||||
|
- Quelle: Links `[ref](url)` oder frontmatter `attachments:`
|
||||||
|
- Required: No
|
||||||
|
|
||||||
|
### 6. PROMPT FÜR FEHLENDE DATEN
|
||||||
|
|
||||||
|
Reihenfolge:
|
||||||
|
1. Projektname (wenn fehlt)
|
||||||
|
2. Start-Datum (natürliche Sprache akzeptiert)
|
||||||
|
3. End-Datum
|
||||||
|
4. Team-Mitglieder (`basecamp people list --json`)
|
||||||
|
5. Assignees
|
||||||
|
6. Meilenstein-Daten
|
||||||
|
|
||||||
|
### 7. DRAFT PRESENTATION
|
||||||
|
|
||||||
|
Zeige strukturierten Draft (Basecamp-kompatibles Format, KEINE Tabellen):
|
||||||
|
|
||||||
```markdown
|
```markdown
|
||||||
# Project Proposal: {name}
|
# Projekt-Vorschlag: {name}
|
||||||
|
|
||||||
## Overview
|
## Übersicht
|
||||||
{description}
|
{description}
|
||||||
|
|
||||||
## Timeline
|
## Zeitplan
|
||||||
- **Start:** {start_date}
|
- **Start:** {start}
|
||||||
- **End:** {end_date}
|
- **Ende:** {end}
|
||||||
- **Duration:** {X weeks/days}
|
- **Dauer:** {X Wochen/ Tage}
|
||||||
|
|
||||||
## Milestones
|
## Meilensteine
|
||||||
|
|
||||||
### {Milestone 1}
|
### {Meilenstein 1}
|
||||||
- Date: {date}
|
- Datum: {datum}
|
||||||
- Tasks:
|
- Aufgaben:
|
||||||
- [ ] {task 1}
|
1. {aufgabe 1}
|
||||||
- [ ] {task 2}
|
2. {aufgabe 2}
|
||||||
- Assigned: @{assignee}
|
- Zugewiesen: @{person}
|
||||||
|
|
||||||
### {Milestone 2}
|
|
||||||
...
|
|
||||||
|
|
||||||
## Team
|
## Team
|
||||||
{list of members}
|
{liste}
|
||||||
|
|
||||||
## Basecamp Structure
|
## Basecamp-Struktur
|
||||||
| Tool | Content |
|
- Message Board: Kickoff + Entscheidungen
|
||||||
|------|---------|
|
- To-Dos: Nach Meilensteinen gruppiert
|
||||||
| Message Board | Kickoff message + decision posts |
|
- Schedule: Kalender-Einträge
|
||||||
| To-Dos | Tasks grouped by milestone |
|
- Chat: {falls aktiviert}
|
||||||
| Documents | Project spec and references |
|
- Check-ins: {falls aktiviert}
|
||||||
| Schedule | Milestone dates |
|
- Gauge: {falls aktiviert}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Step 6: Present Draft
|
**Optionen:**
|
||||||
|
```
|
||||||
|
[1] Draft speichern → `docs/drafts/{slug}-{timestamp}.md`
|
||||||
|
[2] Projekt erstellen
|
||||||
|
[3] Abbrechen
|
||||||
|
```
|
||||||
|
|
||||||
Show the draft and offer three options:
|
### 8. PROJECT CREATION
|
||||||
|
|
||||||
1. **Save to markdown** — write to `docs/drafts/{slug}-{timestamp}.md`
|
Führe in Reihenfolge aus:
|
||||||
2. **Confirm and create** — proceed to project creation
|
|
||||||
3. **Cancel** — discard and exit
|
|
||||||
|
|
||||||
Use inline confirmation: `"Save draft | Create project | Cancel"`
|
|
||||||
|
|
||||||
### Step 7: Create Project (on confirm)
|
|
||||||
|
|
||||||
Use basecamp skill primitives. Execute in order:
|
|
||||||
|
|
||||||
#### 7.1 Create Project
|
|
||||||
|
|
||||||
|
#### 8.1 Project erstellen
|
||||||
```bash
|
```bash
|
||||||
basecamp projects create "{name}" --json
|
basecamp projects create "{name}" --json
|
||||||
```
|
```
|
||||||
|
|
||||||
Extract `project_id` from response.
|
#### 8.2 Team hinzufügen
|
||||||
|
|
||||||
#### 7.2 Add Team Members
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Look up person IDs first
|
|
||||||
basecamp people list --jq '.data[] | select(.name == "Name") | .id'
|
basecamp people list --jq '.data[] | select(.name == "Name") | .id'
|
||||||
|
|
||||||
# Add to project
|
|
||||||
basecamp people add {person_id} --project {project_id}
|
basecamp people add {person_id} --project {project_id}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 7.3 Create Kickoff Message
|
#### 8.3 Kickoff-Message
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
basecamp message "Kickoff" "{description}" --in {project_id} --json
|
basecamp message "Kickoff" "{description}" --in {project_id}
|
||||||
|
# HTML content verwenden (markdown_to_trix.py)
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 7.4 Create To-Do Lists by Milestone
|
#### 8.4 Discovery Document (optional)
|
||||||
|
|
||||||
For each milestone:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Create todolist for milestone
|
basecamp files doc create "Project Brief" "{zusammenfassung}" --in {project_id}
|
||||||
basecamp todolists create "{Milestone Name}" --in {project_id} --json
|
|
||||||
|
|
||||||
# Extract todolist_id, then add tasks
|
|
||||||
basecamp todo "{task}" --in {project_id} --list {todolist_id} --due {date} --json
|
|
||||||
|
|
||||||
# Assign if known
|
|
||||||
basecamp assign {todo_id} --to {person_id} --in {project_id}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 7.5 Create Schedule Entries for Milestones
|
#### 8.5 To-Do Listen (nach Meilensteinen)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
basecamp schedule create "{Milestone Name}" \
|
basecamp todolists create "{Meilenstein}" --in {project_id}
|
||||||
|
# Dann To-Dos hinzufügen:
|
||||||
|
basecamp todo "{task}" --in {project_id} --list {list_id} --due {date}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 8.6 Schedule Entries
|
||||||
|
```bash
|
||||||
|
basecamp schedule create "{Meilenstein}" \
|
||||||
--starts-at "{date}T09:00:00Z" \
|
--starts-at "{date}T09:00:00Z" \
|
||||||
--all-day \
|
--all-day --in {project_id}
|
||||||
--in {project_id} --json
|
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 7.6 Create Documents (if referenced)
|
#### 8.7 Chat-Kanal (optional)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
basecamp files doc create "{doc title}" "{content}" --in {project_id} --json
|
basecamp chat post "Willkommen im Projekt!" --in {project_id}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 7.7 Pin Kickoff Message
|
#### 8.8 Check-ins (optional)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
basecamp messages pin {message_id} --in {project_id}
|
# Questionnaire erstellen
|
||||||
|
basecamp checkins question create "Was hast du diese Woche erreicht?" --frequency every_week
|
||||||
```
|
```
|
||||||
|
|
||||||
### Step 8: Report Success
|
#### 8.9 Cards/Kanban (optional)
|
||||||
|
```bash
|
||||||
|
basecamp cards list --in {project_id}
|
||||||
|
# Spalten erstellen wenn nicht vorhanden
|
||||||
|
```
|
||||||
|
|
||||||
Show summary with links:
|
#### 8.10 Gauge (optional)
|
||||||
|
```bash
|
||||||
|
basecamp gauges enable --in {project_id}
|
||||||
|
basecamp gauges create --position 0 --color green --description "Fortschritt" --in {project_id}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 9. SUCCESS REPORT
|
||||||
|
|
||||||
```
|
```
|
||||||
✅ Project created: {name}
|
✅ Projekt erstellt: {name}
|
||||||
🔗 https://3.basecamp.com/{account_id}/buckets/{project_id}
|
🔗 https://3.basecamp.com/{account_id}/buckets/{project_id}
|
||||||
|
|
||||||
Structure:
|
Struktur:
|
||||||
• Message Board: 1 message (kickoff)
|
• Message Board: 1 Nachricht (Kickoff)
|
||||||
• To-Dos: {N} todolists, {M} tasks
|
• Project Brief: 1 Dokument
|
||||||
• Schedule: {X} milestones
|
• To-Dos: {N} Listen, {M} Aufgaben
|
||||||
• Documents: {Y} docs
|
• Schedule: {X} Einträge
|
||||||
|
• Chat: {falls aktiviert}
|
||||||
|
• Check-ins: {falls aktiviert}
|
||||||
|
• Gauge: {falls aktiviert}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Integration with Basecamp Skill
|
## Integration mit anderen Skills
|
||||||
|
|
||||||
This skill delegates all Basecamp API calls to the basecamp skill. The basecamp skill
|
| Input | Next Skill | Trigger |
|
||||||
provides:
|
|-------|------------|---------|
|
||||||
|
| Discovery abgeschlossen | basecamp-project | Projekt erstellen |
|
||||||
- `basecamp projects create` — create project
|
| Plan nicht gefunden | brainstorming | "Ich brauche erst einen Plan" |
|
||||||
- `basecamp people list/add` — team management
|
| Meeting-Notizen | basecamp | "Notizen zu Basecamp hinzufügen" |
|
||||||
- `basecamp message` — message board posts
|
| Task verfolgen | basecamp | "Todo zu Projekt hinzufügen" |
|
||||||
- `basecamp todolists create` — milestone grouping
|
|
||||||
- `basecamp todo` — individual tasks
|
|
||||||
- `basecamp schedule create` — milestone scheduling
|
|
||||||
- `basecamp files doc create` — documents
|
|
||||||
|
|
||||||
Always use `--json` flag for structured output and `--jq` for filtering.
|
|
||||||
|
|
||||||
## Project Structure Mapping
|
|
||||||
|
|
||||||
| Plan Element | Basecamp Tool | Notes |
|
|
||||||
|--------------|---------------|-------|
|
|
||||||
| Overview/description | Message Board | First message pinned as kickoff |
|
|
||||||
| Milestones/phases | To-Do Lists | One todolist per milestone |
|
|
||||||
| Tasks | To-Dos | Under appropriate todolist |
|
|
||||||
| Task assignees | Todo assignment | Map from plan or prompt |
|
|
||||||
| Task due dates | Todo due date | Relative to milestone or absolute |
|
|
||||||
| Milestone dates | Schedule | All-day entries |
|
|
||||||
| References/docs | Documents | Links or inline content |
|
|
||||||
| Team | Project members | Add via `people add` |
|
|
||||||
|
|
||||||
## Error Handling
|
## Error Handling
|
||||||
|
|
||||||
| Scenario | Action |
|
| Scenario | Action |
|
||||||
|----------|--------|
|
|----------|--------|
|
||||||
| Plan file not found | Show error, re-list plans for selection |
|
| Plan nicht gefunden | Fehler zeigen, Pläne neu listen |
|
||||||
| Basecamp auth failure | Prompt to run `basecamp auth login` |
|
| Basecamp Auth-Fehler | `basecamp auth login` vorschlagen |
|
||||||
| Project creation fails | Show error, suggest checking Basecamp limits |
|
| Projekt-Erstellung fehlgeschlagen | Fehler + Basecamp-Limits prüfen |
|
||||||
| Person not found | Offer free text entry for name |
|
| Person nicht gefunden | Freitext-Eingabe als Fallback |
|
||||||
| Rate limit (429) | Wait and retry with backoff |
|
| Rate limit (429) | Warten + Retry mit Backoff |
|
||||||
| Invalid date input | Reprompt with format hint |
|
| Ungültige Datums-Eingabe | Mit Format-Hinweis erneut fragen |
|
||||||
|
|
||||||
## Handoff to Other Skills
|
## Markdown→Basecamp Konvertierung
|
||||||
|
|
||||||
| Output | Next Skill | Trigger |
|
Siehe `references/formatting-rules.md`
|
||||||
|--------|------------|---------|
|
|
||||||
| Draft saved | — | User chose save option |
|
Kurzfassung:
|
||||||
| Project created | — | User confirmed |
|
- ✅ Überschriften, bold, italic, Listen, Code, Links
|
||||||
| Plan not found | brainstorming | "I need to plan this first" |
|
- ❌ Tabellen → Als strukturierte Listen
|
||||||
| Task tracking | basecamp | "Add a todo to this project" |
|
- ❌ Checkboxen in Messages → Als nummerierte Listen oder echte To-Dos
|
||||||
| Team changes | basecamp | "Add someone to the project" |
|
- ❌ Horizontal Rules → Entfernen
|
||||||
|
|
||||||
|
Verwende `scripts/markdown_to_trix.py` für Konvertierung.
|
||||||
|
|
||||||
|
## Discovery Questions Reference
|
||||||
|
|
||||||
|
Siehe `references/discovery-questions.md`
|
||||||
|
|
||||||
|
## Templates
|
||||||
|
|
||||||
|
Siehe `templates/` Verzeichnis.
|
||||||
|
|
||||||
|
## Dateien
|
||||||
|
|
||||||
|
```
|
||||||
|
basecamp-project/
|
||||||
|
├── SKILL.md # Diese Datei
|
||||||
|
├── scripts/
|
||||||
|
│ ├── markdown_to_trix.py # Markdown→HTML Konverter
|
||||||
|
│ └── requirements.txt # Python dependencies
|
||||||
|
├── templates/
|
||||||
|
│ ├── feature-launch.md
|
||||||
|
│ ├── workshop.md
|
||||||
|
│ ├── retrospective.md
|
||||||
|
│ ├── meeting.md
|
||||||
|
│ ├── sprint.md
|
||||||
|
│ ├── research-mvp.md
|
||||||
|
│ └── blank.md
|
||||||
|
└── references/
|
||||||
|
├── formatting-rules.md # Basecamp-Formatierung
|
||||||
|
└── discovery-questions.md # Fragen-Katalog
|
||||||
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user