diff --git a/skills/basecamp-project/SKILL.md b/skills/basecamp-project/SKILL.md index 3255a23..043bd9a 100644 --- a/skills/basecamp-project/SKILL.md +++ b/skills/basecamp-project/SKILL.md @@ -1,307 +1,71 @@ --- name: basecamp-project -description: | - Use when: (1) User wants to create a new Basecamp project, - (2) User wants to generate a project draft from plan or Discovery, - (3) User wants to duplicate a Basecamp template. - Triggers: "create basecamp project", "setup project in basecamp", - "basecamp draft", "plan to basecamp", "launch project", - "initialize project in basecamp", "new project" +description: "Use when: (1) setting up a new Basecamp project, (2) turning an idea or plan into a reviewed project launch package, (3) creating Basecamp task lists, kickoff messages, project briefs, check-ins, or launch structure, (4) stress-testing project scope, timeline, roles, risks, and feasibility before Basecamp launch. Triggers: create Basecamp project, setup project in Basecamp, project kickoff, project plan to Basecamp, launch project." compatibility: opencode --- -# basecamp-project Skill +# Basecamp Project ## Overview -Erstellt Basecamp-Projekte via strukturiertem Workflow: Discovery → Template → Draft → Review → Create. -Zwei Modi: Discovery-Mode (interaktive Fragen) oder Plan-Mode (aus Markdown-Datei). +Turn an idea or plan into a reviewed Project Launch Package and, after explicit approval, create a new Basecamp project or adapt an existing one. -## Workflow +## Non-Negotiable Rules -### 1. START: Modus wählen +- **Self-contained subagent rule:** Do not rely on named personal agents. Use the prompts in `references/subagent-prompts/`; if a subagent tool is unavailable, emulate the roles sequentially in the main session. +- **Approval gate rule:** Do not create, adapt, publish, notify, or otherwise change Basecamp content until the relevant approval gate has explicit user approval. +- **Organization template recommendation rule:** For new projects, recommend starting from the organization template before offering other approaches. +- **Blank project fallback rule:** If the organization template is unavailable or rejected, offer a blank project fallback and explain what must be recreated manually. +- **Language rule:** Ask for and preserve the project language across briefs, task lists, kickoff writing, check-ins, and user-facing Basecamp content. +- **Missing `Vorlagen` rule:** If `Docs & Files → Vorlagen` is missing, report it and ask the user to choose exactly one path before proceeding: stop and fix the template or project structure, use a generic fallback communication template suitable for the project type and target language, or use a template supplied directly by the user. +- **External visibility rule:** Confirm what clients, partners, or other external people can see before drafting or applying content. +- **Tiered review rule:** Run review in tiers: feasibility first, plan and structure second, launch content and execution readiness last. +- **Hybrid assignment rule:** For hybrid teams, make task ownership explicit across internal and external assignees and avoid unclear shared responsibility. +- **Hybrid due-date rule:** For hybrid teams, use due dates that reflect dependency handoffs, external review windows, and timezone or availability constraints. +- **Notification rule:** Treat notifications as a separate launch decision; state who will be notified, when, and why before sending or triggering updates. +- **Cautious execution rule:** Execute Basecamp changes in small verified batches, stop on ambiguity or API/tool errors, and preserve a recoverable creation log. +- **Existing project inspection rule:** In Existing Project Mode, inspect the current project structure and content before proposing or applying changes. -``` -User: "Erstelle ein neues Projekt in Basecamp" +## Workflow Spine -→ Zeige Modus-Auswahl: - [1] 🧭 Discovery Mode (interaktive Fragen) - [2] 📄 Plan Mode (aus Markdown-Datei) - [3] 📋 Basecamp Template duplizieren -``` +1. Select mode: Discovery Mode, Plan Mode, or Existing Project Mode. +2. Ask project language. +3. Ask external/client visibility questions. +4. Run Discovery Coach. +5. Run Scope Realist. +6. Resolve Red feasibility trade-offs before final planning. +7. Run Project Planner. +8. Run Task Architect. +9. Ask whether to save a local Project Launch Package. +10. Approval Gate 1: project creation/adaptation. +11. For new projects, recommend organization template; allow blank fallback. +12. If using template, construct project with `basecamp templates construct`. +13. Inspect created/existing project. +14. If `Docs & Files → Vorlagen` exists, run Template Librarian. +15. Run Kickoff Writer using project language and template findings. +16. Run Project Reviewer. +17. Approval Gate 2: apply launch content and notification plan. +18. Execute Basecamp changes in verified batches. +19. Report links, creation log, warnings, and resume instructions if needed. -### 2. DISCOVERY MODE +## Reference Loading Map -Führe durch die 8 Discovery-Phasen (siehe `references/discovery-questions.md`): - -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 - -**Regeln:** -- Jede Phase ist überspringbar -- Multiple Choice mit "Anderes" Freitext-Option -- Vorherige Antworten als Vorschlag ("Vorlage von: ...") -- Natürliche Datumsangaben akzeptieren - -### 3. TEMPLATE WAHL - -Zeige verfügbare Templates: -``` -Verfügbare Vorlagen: - [1] Feature Launch - Neues Feature entwickeln - [2] Workshop/Training - Schulung oder Workshop - [3] Retrospektive - Team-Retro - [4] Meeting Management - Wiederkehrende Meetings - [5] Sprint/Iteration - Sprint planen - [6] Research/MVP - Forschung oder Prototyp - [7] Eigenes Design - Eigene Struktur - [8] Basecamp Template - Vorhandenes Template nutzen -``` - -### 4. DRAFT GENERATION - -#### 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 - -#### Discovery Mode (aus Fragen) -1. Generiere Draft basierend auf Discovery-Antworten -2. Verwende gewähltes Template als Grundstruktur -3. Fülle mit User-Daten - -### 5. PARSE PLAN (für Plan Mode) - -Extrahiere aus Markdown: - -**Project name:** -- Quelle: `# Title` oder frontmatter `title:` -- Required: Yes - -**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 -# Projekt-Vorschlag: {name} - -## Übersicht -{description} - -## Zeitplan -- **Start:** {start} -- **Ende:** {end} -- **Dauer:** {X Wochen/ Tage} - -## Meilensteine - -### {Meilenstein 1} -- Datum: {datum} -- Aufgaben: - 1. {aufgabe 1} - 2. {aufgabe 2} - - Zugewiesen: @{person} - -## Team -{liste} - -## Basecamp-Struktur -- Message Board: Kickoff + Entscheidungen -- To-Dos: Nach Meilensteinen gruppiert -- Schedule: Kalender-Einträge -- Chat: {falls aktiviert} -- Check-ins: {falls aktiviert} -- Gauge: {falls aktiviert} -``` - -**Optionen:** -``` -[1] Draft speichern → `docs/drafts/{slug}-{timestamp}.md` -[2] Projekt erstellen -[3] Abbrechen -``` - -### 8. PROJECT CREATION - -Führe in Reihenfolge aus: - -#### 8.1 Project erstellen -```bash -basecamp projects create "{name}" --json -``` - -#### 8.2 Team hinzufügen -```bash -basecamp people list --jq '.data[] | select(.name == "Name") | .id' -basecamp people add {person_id} --project {project_id} -``` - -#### 8.3 Kickoff-Message -```bash -basecamp message "Kickoff" "{description}" --in {project_id} -# HTML content verwenden (markdown_to_trix.py) -``` - -#### 8.4 Discovery Document (optional) -```bash -basecamp files doc create "Project Brief" "{zusammenfassung}" --in {project_id} -``` - -#### 8.5 To-Do Listen (nach Meilensteinen) -```bash -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" \ - --all-day --in {project_id} -``` - -#### 8.7 Chat-Kanal (optional) -```bash -basecamp chat post "Willkommen im Projekt!" --in {project_id} -``` - -#### 8.8 Check-ins (optional) -```bash -# Questionnaire erstellen -basecamp checkins question create "Was hast du diese Woche erreicht?" --frequency every_week -``` - -#### 8.9 Cards/Kanban (optional) -```bash -basecamp cards list --in {project_id} -# Spalten erstellen wenn nicht vorhanden -``` - -#### 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 - -``` -✅ Projekt erstellt: {name} -🔗 https://3.basecamp.com/{account_id}/buckets/{project_id} - -Struktur: - • Message Board: 1 Nachricht (Kickoff) - • Project Brief: 1 Dokument - • To-Dos: {N} Listen, {M} Aufgaben - • Schedule: {X} Einträge - • Chat: {falls aktiviert} - • Check-ins: {falls aktiviert} - • Gauge: {falls aktiviert} -``` - -## Integration mit anderen Skills - -| Input | Next Skill | Trigger | -|-------|------------|---------| -| Discovery abgeschlossen | basecamp-project | Projekt erstellen | -| Plan nicht gefunden | brainstorming | "Ich brauche erst einen Plan" | -| Meeting-Notizen | basecamp | "Notizen zu Basecamp hinzufügen" | -| Task verfolgen | basecamp | "Todo zu Projekt hinzufügen" | - -## Error Handling - -| Scenario | Action | -|----------|--------| -| Plan nicht gefunden | Fehler zeigen, Pläne neu listen | -| Basecamp Auth-Fehler | `basecamp auth login` vorschlagen | -| Projekt-Erstellung fehlgeschlagen | Fehler + Basecamp-Limits prüfen | -| Person nicht gefunden | Freitext-Eingabe als Fallback | -| Rate limit (429) | Warten + Retry mit Backoff | -| Ungültige Datums-Eingabe | Mit Format-Hinweis erneut fragen | - -## Markdown→Basecamp Konvertierung - -Siehe `references/formatting-rules.md` - -Kurzfassung: -- ✅ Überschriften, bold, italic, Listen, Code, Links -- ❌ Tabellen → Als strukturierte Listen -- ❌ Checkboxen in Messages → Als nummerierte Listen oder echte To-Dos -- ❌ 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 | Load when | +| --- | --- | +| `references/organization-template.md` | Recommending, constructing, or falling back from the organization template. | +| `references/discovery-loop.md` | Running Discovery Mode or converting an unclear idea into usable inputs. | +| `references/planning-model.md` | Building the Project Launch Package and feasibility-reviewed plan. | +| `references/tasklist-rules.md` | Designing task lists, assignments, due dates, and hybrid team structure. | +| `references/kickoff-patterns.md` | Drafting kickoff messages, briefs, check-ins, and launch communications. | +| `references/basecamp-mapping.md` | Mapping launch package elements to Basecamp tools and project structure. | +| `references/status-tracking.md` | Designing check-ins, status updates, reporting rhythm, and follow-up tracking. | +| `references/review-checklists.md` | Running feasibility, planning, content, and execution reviews. | +| `references/execution-recovery.md` | Applying changes safely, logging batches, recovering from errors, and resuming. | +| `references/subagent-prompts/discovery-coach.md` | Running or emulating Discovery Coach. | +| `references/subagent-prompts/scope-realist.md` | Running or emulating Scope Realist. | +| `references/subagent-prompts/project-planner.md` | Running or emulating Project Planner. | +| `references/subagent-prompts/task-architect.md` | Running or emulating Task Architect. | +| `references/subagent-prompts/template-librarian.md` | Running or emulating Template Librarian. | +| `references/subagent-prompts/kickoff-writer.md` | Running or emulating Kickoff Writer. | +| `references/subagent-prompts/project-reviewer.md` | Running or emulating Project Reviewer. | +| `references/subagent-prompts/basecamp-operator.md` | Running or emulating Basecamp Operator for approved execution batches. | diff --git a/skills/basecamp-project/references/basecamp-mapping.md b/skills/basecamp-project/references/basecamp-mapping.md new file mode 100644 index 0000000..16a8c9c --- /dev/null +++ b/skills/basecamp-project/references/basecamp-mapping.md @@ -0,0 +1,59 @@ +# Basecamp Mapping Reference + +Use this reference to choose a project construction strategy and map project needs to Basecamp objects without creating duplicates. + +## Project Strategies + +### Recommended organization template + +Use the organization's approved template when it exists and matches the project type. Construct the project from the template rather than recreating standard structure by hand. + +```bash +basecamp templates construct +``` + +After starting construction, poll until the construction is completed. Then inspect the created project, read its dock, find Docs & Files, and recursively inspect the `Vorlagen` folder before adding project-specific content. + +### Blank fallback + +Use a blank project only when no suitable organization template exists or the template cannot be used. Build the minimum required structure, then add only the objects needed for the current project. + +### Existing project mode + +Use an existing project when the work is already underway in Basecamp or the requester explicitly names an existing project. Do not assume missing structure should be recreated. + +## Existing Project Inspection Rule + +Before creating anything in an existing project, inspect the project, read the dock, inspect relevant tools, and search for equivalent content by title, purpose, and date. Prefer updating or linking existing objects over creating new ones. + +## Object Mapping + +| Need | Basecamp object | Use for | +| --- | --- | --- | +| Kickoff, durable decisions, status updates | Message Board | Initial alignment, decisions that should remain easy to find, recurring project status | +| Planned milestone work | To-dos | Committed work organized by milestone, owner, and due date | +| Project Brief and stable references | Docs & Files | Briefs, source documents, durable reference files, and the `Vorlagen` template folder | +| Milestones and approval gates | Schedule | Key dates, reviews, approvals, launches, and external commitments | +| Lightweight status or focus questions | Automatic Check-ins | Regular prompts that collect short asynchronous responses | +| Reactive or pipeline work only | Card Table | Intake, triage, moving queues, or work that changes state frequently | + +## Duplicate Avoidance + +Before creating standard project objects, inspect for existing equivalents and reuse them when possible. + +- Kickoff: search Message Board for kickoff, launch, start, and project-introduction posts. +- Project Brief: inspect Docs & Files and `Vorlagen` for a brief or source template before creating a new document. +- To-do lists: compare list titles, milestones, and planned phases before adding lists. +- Check-ins: inspect Automatic Check-ins for matching weekly focus or blocker questions before creating new prompts. +- Schedule entries: compare dates, names, and approval gates before adding events. + +If a near-duplicate exists, update the existing object or record why a new object is distinct. + +## Visibility and Notification Planning + +Plan visibility before posting or assigning work. + +- Identify who should see the project, who should be notified immediately, and who only needs access for reference. +- Use project-wide announcements only for kickoff, major decisions, and status updates that affect all participants. +- Notify specific people for assigned to-dos, approval gates, and decisions requiring action. +- Avoid over-notifying observers; rely on clear titles, descriptions, and links for discoverability. diff --git a/skills/basecamp-project/references/discovery-loop.md b/skills/basecamp-project/references/discovery-loop.md new file mode 100644 index 0000000..215c033 --- /dev/null +++ b/skills/basecamp-project/references/discovery-loop.md @@ -0,0 +1,117 @@ +# Discovery Loop Reference + +## Purpose + +Use discovery to gather only the information needed to set up a useful Basecamp project and produce a workable plan. Keep the conversation focused, practical, and easy for the requester to answer. + +## Conversation Principles + +- Ask one question at a time. +- Prefer multiple-choice questions with a free-text escape hatch, such as "Other / describe briefly." +- Use progressive disclosure: start with essentials, then ask follow-ups only when the answer changes setup or planning decisions. +- Reflect confirmed answers briefly before moving to the next topic. +- Avoid forcing certainty; capture assumptions and risks when the requester is unsure. + +## Discovery Ledger + +A discovery ledger is the running record of confirmed project facts, open questions, assumptions, and decisions. Keep it concise and update it after each meaningful answer. + +Suggested ledger fields: + +- Confirmed facts +- Open questions +- Assumptions +- Decisions made +- Risks and constraints +- Basecamp setup implications + +## Discovery Topics + +### Project Name + +Confirm the exact project name to use. If the requester has no name, offer a short working-name option and mark it as provisional. + +### Language + +Confirm the primary language for the Basecamp project, kickoff message, tasks, and docs. Ask whether any stakeholders need translated or bilingual content. + +### Goal + +Capture the project goal in one clear sentence. The goal should explain the outcome, not just the activity. + +### Success Criteria + +Define how success will be recognized. Prefer measurable or observable criteria, such as launch date met, stakeholder approval received, adoption threshold reached, cost cap held, or deliverable accepted. + +### Non-Goals + +Identify what is intentionally out of scope. Non-goals protect the plan from drift and help explain tradeoffs later. + +### Stakeholders + +List key stakeholders and what each needs from the project. Include decision makers, contributors, reviewers, affected teams, and external parties where relevant. + +### External Visibility + +Confirm whether the project is internal-only, client-facing, partner-facing, public-facing, or mixed. This affects tone, access, notification strategy, and how decisions are documented. + +### Project DRI + +Identify the Directly Responsible Individual for the project. The DRI owns forward motion, decision routing, and status clarity even when work is delegated. + +### Team and Roles + +Capture who is involved and each person's role. Note owners for delivery, review, approval, technical input, operations, communications, and stakeholder coordination. + +### Timeline + +Collect important dates: desired start, kickoff, milestones, review windows, hard deadline, and flexibility. Mark whether dates are fixed, preferred, or tentative. + +### Constraints + +Record limits on budget, capacity, tools, process, compliance, availability, quality bar, vendor access, or organizational policy. + +### Dependencies + +List dependencies that must happen before or during the project, including people, approvals, assets, data, vendors, systems, legal review, procurement, and upstream deliverables. + +### Risks + +Capture known uncertainties that could affect scope, timeline, quality, adoption, budget, or stakeholder alignment. Ask for likelihood and impact only when useful. + +### Work Structure + +Determine the preferred planning structure: phases, milestones, workstreams, deliverables, checklists, approval points, or a simple task list. Match structure to complexity. + +### Kickoff Tone + +Confirm the tone for the kickoff message: concise and operational, warm and collaborative, executive summary, client-facing polished, or another style. + +### Basecamp Creation Strategy + +Decide how to create the Basecamp project: + +- Minimal setup: project shell, kickoff message, essential to-dos, and core people. +- Standard setup: kickoff, schedule, grouped to-dos, docs, owners, and initial risks. +- Structured setup: milestones, approval gates, workstreams, risk tracking, stakeholder-specific access, and status cadence. + +Choose the lightest strategy that supports coordination without overbuilding. + +## Minimum Clarity Gate Before Planning + +Begin planning only when these items are clear enough to proceed: + +- Project name or acceptable working name +- Primary language +- Goal +- Success criteria +- Key non-goals or confirmation that none are known +- Project DRI +- Core stakeholders or team +- Timeline expectations and any hard dates +- Major constraints, dependencies, and risks +- External visibility level +- Preferred work structure or permission to choose one +- Basecamp creation strategy + +If one or more items remain unknown, either ask the next highest-impact question or document a clear assumption and get permission to proceed on that basis. diff --git a/skills/basecamp-project/references/discovery-questions.md b/skills/basecamp-project/references/discovery-questions.md deleted file mode 100644 index b85af12..0000000 --- a/skills/basecamp-project/references/discovery-questions.md +++ /dev/null @@ -1,587 +0,0 @@ ---- -title: Discovery Questions Framework -description: Guided project definition workflow for Basecamp projects - 8 phases covering vision, success criteria, timeline, team, communication, tools, risks, and review -type: reference -version: 1.0 -last_updated: 2025-04-27 ---- - -# Discovery Questions Framework - -Leitet User durch 8 Phasen der Projekt-Definition, ähnlich dem brainstorming Skill. Jede Phase kann übersprungen werden; Multiple-Choice-Fragen haben "Anderes"-Fallback. - ---- - -## Phase 1: Vision & Goals - -```yaml -phase: - id: 1 - name: "Vision & Goals" - description: "Kläre das Ziel und den Zweck des Projekts" - skippable: true - questions: - - id: "project_goal" - text: "Was ist das Ziel dieses Projekts?" - type: "freetext" - required: true - prompt: "Beschreibe in einem Satz, was wir erreichen wollen" - - - id: "problem_solved" - text: "Welches Problem löst dieses Projekt?" - type: "freetext" - required: false - placeholder: "Welchen Schmerzpunkt oder welches Bedürfnis adressieren wir?" -``` - -### Beispiel-Prompts - -**Frage:** Was ist das Ziel dieses Projekts? -**Prompt:** Beschreibe in einem Satz, was wir erreichen wollen. - -**Antwort-Beispiel:** "Wir wollen die interne Dokumentation von Prozessen verbessern, damit new Joiner schneller produktiv werden." - ---- - -## Phase 2: Success Criteria - -```yaml -phase: - id: 2 - name: "Success Criteria" - description: "Definiere messbare Kriterien für Projekterfolg" - skippable: true - questions: - - id: "success_indicators" - text: "Woran erkennen wir, dass das Projekt erfolgreich war?" - type: "multiple_choice_checkbox" - required: false - options: - - label: "Funktional fertig" - description: "Alle geplanten Features wurden implementiert" - value: "functional_complete" - - label: "Zeitnah geliefert" - description: "Deadline wurde eingehalten" - value: "on_time" - - label: "Qualitätsziele erreicht" - description: "Tests, Reviews und QA bestanden" - value: "quality_met" - - label: "Stakeholder zufrieden" - description: "Feedback von Auftraggebern eingeholt und positiv" - value: "stakeholder_happy" - - label: "Budget eingehalten" - description: "Kosten blieben im geplanten Rahmen" - value: "on_budget" - - label: "Andere" - description: "Eigene Erfolgskriterien definieren" - value: "other" - freetext: true - freetext_label: "Andere Erfolgskriterien:" - freetext_placeholder: "z.B. 95% Adoption Rate nach Launch" - - - id: "kpis" - text: "Welche messbaren KPIs definieren Erfolg?" - type: "freetext" - required: false - multiline: true - placeholder: "z.B. Response Time < 200ms, Coverage > 80%, NPS > 50" -``` - -### UI-Darstellung - -``` -Woran erkennen wir, dass das Projekt erfolgreich war? -☐ Funktional fertig (alle Features implementiert) -☐ Zeitnah geliefert (Deadline eingehalten) -☐ Qualitätsziele erreicht (Tests, Reviews bestanden) -☐ Stakeholder zufrieden (Feedback eingeholt) -☐ Budget eingehalten -☑ Andere: ___95% Adoption Rate nach Launch___ -``` - ---- - -## Phase 3: Timeline & Milestones - -```yaml -phase: - id: 3 - name: "Timeline & Milestones" - description: "Definiere Start, Ende und wichtige Zwischenmeilensteine" - skippable: true - questions: - - id: "start_date" - text: "Wann soll das Projekt starten?" - type: "date" - required: true - parse_natural: true - examples: - - "nächsten Montag" - - "2025-06-01" - - "Mitte Juni" - - "sofort" - - - id: "end_date" - text: "Wann soll das Projekt abgeschlossen sein?" - type: "date" - required: true - parse_natural: true - examples: - - "Ende Q2" - - "2025-08-15" - - "in 3 Monaten" - - - id: "milestones" - text: "Welche wichtigen Zwischenmeilensteine gibt es?" - type: "dynamic_list" - required: false - item_template: - - id: "name" - type: "freetext" - placeholder: "Meilenstein Name" - - id: "date" - type: "date" - required: false - parse_natural: true - placeholder: "Datum (optional)" - add_button: "+ Meilenstein hinzufügen" - min_items: 0 - max_items: 10 -``` - -### Beispiel-Liste - -``` -Welche wichtigen Zwischenmeilensteine gibt es? - -┌─────────────────────────────────────────────────────┐ -│ 1. Discovery Phase │ -│ Datum: 2025-05-15 │ -├─────────────────────────────────────────────────────┤ -│ 2. Design Approval │ -│ Datum: Ende Mai │ -├─────────────────────────────────────────────────────┤ -│ 3. Beta Release │ -│ Datum: — │ -├─────────────────────────────────────────────────────┤ -│ [+ Meilenstein hinzufügen] │ -└─────────────────────────────────────────────────────┘ -``` - ---- - -## Phase 4: Team & Roles - -```yaml -phase: - id: 4 - name: "Team & Roles" - description: "Definiere Team-Mitglieder und Rollen" - skippable: true - questions: - - id: "team_members" - text: "Wer ist am Projekt beteiligt?" - type: "basecamp_people_lookup" - required: false - source: "basecamp people list --json" - fallback: "freetext" - fallback_label: "Person hinzufügen (nicht in Basecamp):" - - - id: "roles_needed" - text: "Welche Rollen brauchen wir?" - type: "multiple_choice_checkbox" - required: false - options: - - label: "Projektleitung" - value: "project_lead" - - label: "Entwicklung" - value: "development" - - label: "Design" - value: "design" - - label: "QA/Testing" - value: "qa" - - label: "Stakeholder/Product Owner" - value: "stakeholder" - - label: "Externe Dienstleister" - value: "external" - - label: "Andere" - value: "other" - freetext: true - freetext_label: "Andere Rolle:" - - - id: "progress_reporting" - text: "Soll regelmäßig über Fortschritt berichtet werden?" - type: "yes_no" - required: false - default: true - trigger: "creates_checkins" -``` - -### Basecamp People Lookup Flow - -``` -Wer ist am Projekt beteiligt? - -[🔍 Basecamp Team durchsuchen...] - -Verfügbare Personen: -┌────────────────────────────────────────────────────┐ -│ 👤 Alice Müller Projektleitung │ -│ 👤 Bob Schmidt Entwicklung │ -│ 👤 Carol Weber Design │ -│ 👤 Dave Fischer QA │ -└────────────────────────────────────────────────────┘ - -[✓] Alice Müller -[✓] Bob Schmidt -[ ] Carol Weber -[ ] Dave Fischer - -[+ Person hinzufügen (nicht in Basecamp)] - -oder manuell eingeben: -Anderer Name: ___________ -``` - ---- - -## Phase 5: Communication Preferences - -```yaml -phase: - id: 5 - name: "Communication Preferences" - description: "Definiere Kommunikationskanäle und -rhythmus" - skippable: true - questions: - - id: "communication_channels" - text: "Wie soll hauptsächlich kommuniziert werden?" - type: "multiple_choice_checkbox" - required: false - options: - - label: "Täglicher Standup" - description: "Kurze tägliche Updates im Chat-Kanal" - value: "daily_standup" - - label: "Wöchentliches Sync-Meeting" - description: "Regelmäßiges Meeting für Fortschritt und Blocker" - value: "weekly_sync" - - label: "Ad-hoc bei Bedarf" - description: "Kommunikation nur wenn nötig" - value: "ad_hoc" - - label: "Async-First" - description: "Primär Messages und Documents, seltene Meetings" - value: "async_first" - - label: "Video-Calls für Meetings" - description: "Meetings per Video-Call statt vor Ort" - value: "video_calls" - - - id: "escalation_mentions" - text: "Sollen @mentions für Eskalation genutzt werden?" - type: "yes_no" - required: false - default: true - hint: "Bei @mention wird derjenige sofort benachrichtigt" -``` - -### UI-Darstellung - -``` -Wie soll hauptsächlich kommuniziert werden? -☐ Täglicher Standup (Chat-Kanal) -☑ Wöchentliches Sync-Meeting -☑ Async-First (primär Messages/Documents) -☐ Video-Calls für Meetings - -Sollen @mentions für Eskalation genutzt werden? -[JA] Nein -``` - ---- - -## Phase 6: Tools & Workflows - -```yaml -phase: - id: 6 - name: "Tools & Workflows" - description: "Wähle Basecamp-Tools und Workflow-Konfiguration" - skippable: true - questions: - - id: "basecamp_tools" - text: "Welche Basecamp-Tools sollen aktiv genutzt werden?" - type: "multiple_choice_checkbox" - required: false - default_checked: - - "message_board" - - "todos" - - "chat" - - "checkins" - - "documents" - options: - - label: "Message Board" - description: "Kickoff-Nachrichten, Entscheidungen, Updates" - value: "message_board" - - label: "To-Dos" - description: "Aufgaben und Meilensteine" - value: "todos" - - label: "Schedule" - description: "Kalender-Events für Meilensteine" - value: "schedule" - - label: "Chat" - description: "Kommunikation und Standups" - value: "chat" - - label: "Cards/Kanban" - description: "Visuelles Task-Board (Alternative zu To-Dos)" - value: "cards" - - label: "Check-ins" - description: "Automatische Abfragen zu Fortschritt" - value: "checkins" - - label: "Documents" - description: "Specs, Referenzen, Entscheidungen" - value: "documents" - - label: "Gauges" - description: "Fortschritts-Indikatoren" - value: "gauges" - - label: "Files" - description: "Dateien und Anhänge" - value: "files" - - - id: "progress_gauge" - text: "Soll ein Gauge mit Fortschritts-Indikator erstellt werden?" - type: "yes_no" - required: false - conditional_on: "basecamp_tools includes 'gauges'" - default: false -``` - -### UI-Darstellung mit Vorauswahl - -``` -Welche Basecamp-Tools sollen aktiv genutzt werden? - -☑ Message Board (Kickoff, Entscheidungen) -☑ To-Dos (Aufgaben, Meilensteine) -☐ Schedule (Kalender-Events) -☑ Chat (Kommunikation, Standups) -☐ Cards/Kanban (Alternative zu To-Dos) -☑ Check-ins (Automatische Abfragen) -☑ Documents (Specs, Referenzen) -☐ Gauges (Fortschritts-Tracking) -☐ Files (Dateien, Anhänge) - -Soll ein Gauge mit Fortschritts-Indikator erstellt werden? -[Ja] Nein -``` - ---- - -## Phase 7: Risks & Dependencies - -```yaml -phase: - id: 7 - name: "Risks & Dependencies" - description: "Identifiziere Risiken und Abhängigkeiten" - skippable: true - questions: - - id: "known_risks" - text: "Gibt es bekannte Risiken?" - type: "freetext" - required: false - multiline: true - placeholder: "z.B. Abhängigkeit von externem API, limitierte Testumgebung, kritische Abhängigkeit von Key Person" - - - id: "dependencies" - text: "Welche Abhängigkeiten gibt es?" - type: "freetext" - required: false - multiline: true - placeholder: "z.B. Wartet auf Approval von Legal, Abhängig von Datenbank-Migration, Braucht Zugang zu Prod-System" - - - id: "external_stakeholders" - text: "Wer sind externe Stakeholder?" - type: "freetext" - required: false - multiline: true - placeholder: "z.B. Externe Agentur für Design, Kunde für Feedback, Vendor für Integration" -``` - ---- - -## Phase 8: Review - -```yaml -phase: - id: 8 - name: "Review" - description: "Zusammenfassung aller Antworten zur Bestätigung" - skippable: false - questions: - - id: "summary" - type: "review_summary" - sections: - - "vision_goals" - - "success_criteria" - - "timeline" - - "team" - - "communication" - - "tools" - - "risks" - actions: - - label: "Alles korrekt" - value: "confirm" - next: "create_project" - - label: "Bearbeiten" - value: "edit" - next: "phase_picker" -``` - -### Review-Darstellung - -``` -═══════════════════════════════════════════════════════ - PROJEKT-ZUSAMMENFASSUNG -═══════════════════════════════════════════════════════ - -📌 VISION & GOALS - Ziel: Interne Dokumentation verbessern - Problem: New Joiner brauchen zu lange zur Einarbeitung - -🎯 SUCCESS CRITERIA - ☑ Funktional fertig - ☑ Zeitnah geliefert - ☐ Qualitätsziele erreicht - ☑ Stakeholder zufrieden - KPI: 95% Adoption Rate nach Launch - -📅 TIMELINE - Start: 2025-06-01 - Ende: 2025-08-15 (11 Wochen) - Meilensteine: - • Discovery Phase — 2025-05-15 - • Design Approval — Ende Mai - • Beta Release — (ohne Datum) - -👥 TEAM - Alice Müller (Projektleitung) - Bob Schmidt (Entwicklung) - Carol Weber (Design) - - Rollen: Projektleitung, Entwicklung, Design - ✓ Regelmäßige Fortschrittsberichte - -💬 KOMMUNIKATION - Async-First, wöchentliche Sync-Meetings - ✓ @mentions für Eskalation aktiviert - -🛠 TOOLS (aktiviert) - Message Board, To-Dos, Chat, Check-ins, Documents - -⚠️ RISIKEN & ABHÄNGIGKEITEN - Risiken: — - Abhängigkeiten: Wartet auf Approval von Legal - Externe Stakeholder: Kunde für Feedback - -═══════════════════════════════════════════════════════ - -[ ✅ Alles korrekt — Projekt erstellen ] -[ ✏️ Zurück zu Phase: [Vision ▼] ] -``` - ---- - -## Nutzung im Skill Workflow - -### Discovery Flow Integration - -Der Discovery-Fragen-Katalog wird verwendet wenn: - -1. **Kein Plan vorhanden** — User möchte Projekt von Grund auf definieren -2. **Vor dem Drafting** — Als strukturierter Einstieg vor dem eigentlichen Planning -3. **Ergänzung zu bestehendem Plan** — Falls wichtige Felder fehlen - -### Flow-Integration - -``` -User: "Ich will ein neues Projekt in Basecamp erstellen" - ↓ -Skill: "Lass uns das Projekt gemeinsam definieren." - "Wir gehen durch 8 kurze Phasen." - ↓ -[Phase 1-8 durchlaufen] - ↓ -Zusammenfassung anzeigen - ↓ -User bestätigt → Erstelle Projekt -User möchte ändern → Springe zur Phase -``` - -### Abspeichern der Answers - -```python -# Struktur für gesammelte Answers -discovery_answers = { - "project_goal": "...", - "problem_solved": "...", - "success_indicators": [...], - "kpis": "...", - "start_date": "2025-06-01", - "end_date": "2025-08-15", - "milestones": [ - {"name": "Discovery", "date": "2025-05-15"}, - {"name": "Design Approval", "date": "..."}, - ], - "team_members": [ - {"id": "123", "name": "Alice Müller", "role": "project_lead"} - ], - "roles_needed": ["project_lead", "development", "design"], - "progress_reporting": True, - "communication_channels": ["async_first", "weekly_sync"], - "escalation_mentions": True, - "basecamp_tools": ["message_board", "todos", "chat", "checkins", "documents"], - "progress_gauge": False, - "known_risks": "...", - "dependencies": "...", - "external_stakeholders": "...", -} -``` - -### Mapping zu Basecamp Structure - -| Discovery Field | Basecamp Creation | -|-----------------|-------------------| -| project_goal, problem_solved | Kickoff Message | -| start_date, end_date | Schedule (oder Project Description) | -| milestones | To-Do Lists + Schedule Entries | -| team_members | Project People | -| communication_channels | Chat Channel Topic + PM Setup | -| basecamp_tools | Aktiviert/Deaktiviert im Project | -| progress_gauge | Gauge Creation | -| known_risks, dependencies | Message Board Post | - ---- - -## Natural Language Date Parsing - -Der Skill unterstützt flexible Datumsangaben: - -| Input | Parsed Output | -|-------|---------------| -| "nächsten Montag" | 2025-05-05 (wenn gerade April) | -| "Ende Q2" | 2025-06-30 | -| "Mitte Juni" | 2025-06-15 | -| "in 3 Wochen" | +21 Tage von heute | -| "2025-06-01" | 2025-06-01 | -| "sofort" | today's date | -| "ASAP" | today's date | - ---- - -## Implementation Notes - -1. **Jede Phase ist überspringbar** — User kann "Weiter" oder "Überspringen" sagen -2. **Multiple Choice mit Freitext-Fallback** — "Andere" öffnet Freitext-Eingabe -3. **Datum-Parsing** — Akzeptiere natürliche Sprache mit Fallback auf direkte Eingabe -4. **Basecamp People Lookup** — Nutze `basecamp people list --json` für Team-Auswahl -5. **Review-Phase ist Pflicht** — Zeigt Zusammenfassung vor Projekt-Erstellung -6. **Answers werden gesammelt** — Bis zur Bestätigung in Discovery-Objekt gespeichert diff --git a/skills/basecamp-project/references/execution-recovery.md b/skills/basecamp-project/references/execution-recovery.md new file mode 100644 index 0000000..654a45d --- /dev/null +++ b/skills/basecamp-project/references/execution-recovery.md @@ -0,0 +1,80 @@ +# Execution Recovery Reference + +Basecamp changes are not transactional. Do not describe recovery as rollback; use resume, repair, archive, or supersede language instead. + +## Cautious Batch Execution + +Execute changes in cautious batches so each step can be inspected before dependent objects are created. Capture created object identifiers and links as work proceeds. + +## Batch Order + +1. Project shell +2. Structure inspection +3. People/access +4. Docs/project brief +5. To-do lists +6. To-dos +7. Schedule +8. Check-ins +9. Kickoff/notification + +## Creation Log Format + +Record each successful change immediately after creation or update. + +```markdown +# Creation Log + +## Project +- Project: Name, ID, URL + +## Created or updated objects +- Type: Message Board post | To-do list | To-do | Document | Schedule entry | Check-in + Title: Object title + ID: Basecamp object ID + URL: Object URL + Action: Created | Updated | Reused + Notes: Relevant context + +## Notifications +- Audience: People or group notified + Method: Basecamp notification type + Reason: Why notification was sent +``` + +## Failure Report Format + +When a batch fails, stop dependent work and report enough detail to resume safely. + +```markdown +# Failure Report + +## Failed batch +Batch name and step number + +## Operation attempted +Command or Basecamp action + +## Error observed +Error message, status code, or unexpected response + +## Completed before failure +Links and IDs from the creation log + +## Not yet attempted +Remaining planned batches + +## Recommended next action +Resume point or repair action +``` + +## Resume and Repair Workflow + +1. Read the creation log and failure report. +2. Inspect the Basecamp project directly before making more changes. +3. Confirm which objects already exist and whether they are complete. +4. Reuse complete objects and repair incomplete objects where possible. +5. Supersede or archive mistaken objects when they should not remain active. +6. Resume from the first incomplete batch in the batch order. +7. Update the creation log with every resumed or repaired action. +8. Send kickoff or notifications only after the structure is inspected and stable. diff --git a/skills/basecamp-project/references/formatting-rules.md b/skills/basecamp-project/references/formatting-rules.md deleted file mode 100644 index 32de125..0000000 --- a/skills/basecamp-project/references/formatting-rules.md +++ /dev/null @@ -1,246 +0,0 @@ ---- -name: Basecamp Formatting Rules -description: Referenz für Markdown→HTML Konvertierung in Basecamp -compatibility: basecamp ---- - -# Basecamp Formatierungsregeln - -Diese Datei definiert die Basis-Regeln für Markdown→HTML Konvertierung in Basecamp. -Alle Templates und Draft-Generierung müssen sich an diese Regeln halten. - -## Erlaubte HTML-Tags - -Basecamp unterstützt folgende HTML-Tags über die API: - -- `h1` – Überschriften -- `div` – Container -- `br` – Zeilenumbrüche -- `strong` – Fettdruck -- `em` – Kursiv -- `strike` – Durchgestrichen -- `a` – Links -- `pre` – Code-Blöcke -- `ol` – Geordnete Listen -- `ul` – Ungeordnete Listen -- `li` – Listeneinträge -- `blockquote` – Zitate -- `bc-attachment` – @mentions (spezielles Tag) - -## Unterstützte Markdown→HTML Konvertierungen - -### Überschriften - -```markdown -# Heading -``` - -Wird konvertiert zu: - -```html -
inline code-``` - -### Links - -```markdown -[Link Text](https://example.com) -``` - -Wird konvertiert zu: - -```html -Link Text -``` - -## Nicht unterstützte Features - -Die folgenden Markdown-Features werden **NICHT** von Basecamp unterstützt: - -### Markdown-Tabellen - -```markdown -| Column 1 | Column 2 | -|----------|----------| -| Value 1 | Value 2 | -``` - -**Status:** NICHT UNTERSTÜTZT - -Tabellen werden nicht gerendert und erscheinen als Rohtext. -→ **Workaround:** Als strukturierte Listen formatieren (siehe unten). - -### Checkboxen in Messages/Documents - -```markdown -- [ ] Unchecked item -- [x] Checked item -``` - -**Status:** NICHT UNTERSTÜTZT in Messages/Documents/Comments - -Checkbox-Syntax wird nicht als interaktive Checkboxen gerendert. -→ **Workaround:** Als Text mit Prefix oder echte To-Dos erstellen. - -### Horizontal Rules - -```markdown ---- -``` - -**Status:** Inkonsistent - -Horizontal Rules werden nicht zuverlässig gerendert. - -## Workarounds für nicht-unterstützte Features - -### Tabellen als verschachtelte Listen - -Statt: - -```markdown -| Feld | Wert | -|----------|---------------| -| Status | In Progress | -| Priority | High | -``` - -Verwende: - -```markdown -**Projekt-Details:** - -Status: - - Label: In Progress - - Priority: High - - Due: 2024-03-15 - -Team: - - Lead: @Max - - Reviewer: @Anna -``` - -### Checkboxen als Text-Prefix - -Für Action Items, die nicht als echte To-Dos erstellt werden müssen: - -```markdown -Action Items: - ☐ Review design mockups - ☐ Schedule kickoff meeting - ☐ Set up development environment -``` - -### Checkboxen als echte To-Dos - -Für interaktive Checkboxen in Basecamp: - -```bash -# Mit Basecamp CLI -basecamp todo "Review design mockups" --in "Project Name" --list "Action Items" - -# Oder über die Basecamp API mit Recording-Typ "todoset" -``` - -## Trix-Editor Hinweis - -Basecamp verwendet intern den **Trix-Editor** für: - -- Messages -- Documents -- Comments -- Schedule Entries - -Der Content wird als HTML an die API gesendet. Die Konvertierung von Markdown -zu HTML erfolgt **serverseitig** durch Basecamp. - -**Wichtig:** Beim Senden von Content an Basecamp kann entweder: -1. **Markdown** gesendet werden (wird von Basecamp konvertiert) -2. **HTML** direkt gesendet werden (z.B. `
\s*
", "", html) - - # Convert horizontal rules to Basecamp-friendly separators - # Basecamp may not render',
- r'',
- html,
- )
-
- return html
-
-
-def is_basecamp_safe(markdown_text: str) -> list[str]:
- """
- Check Markdown for unsupported Basecamp features.
-
- Args:
- markdown_text: The Markdown content to check.
-
- Returns:
- List of warning messages for unsupported features found.
- """
- warnings: list[str] = []
-
- # Check for tables
- if re.search(r"^\|.*\|.*$", markdown_text, re.MULTILINE):
- logger.debug("Found table syntax in markdown")
- warnings.append(
- "Tables not supported: convert to structured lists"
- )
-
- # Check for checkboxes (only in document context, not todo lists)
- if re.search(r"^(\s*)-\s*\[[\sXx]\]\s+", markdown_text, re.MULTILINE):
- logger.debug("Found checkbox syntax in markdown")
- warnings.append(
- "Checkboxes not supported in messages: create as todos instead"
- )
-
- # Check for horizontal rules
- if re.search(r"^[-*_]{3,}\s*$", markdown_text, re.MULTILINE):
- logger.debug("Found horizontal rule syntax")
- warnings.append(
- "Horizontal rules may not render correctly"
- )
-
- # Check for complex nested structures that might not render
- if markdown_text.count(" ") > 10:
- logger.debug("Found deeply nested indentation")
- warnings.append(
- "Deep nesting may not render correctly: consider flattening structure"
- )
-
- return warnings
-
-
-def convert_table_to_lists(table_md: str) -> str:
- """
- Convert a Markdown table to nested lists in Basecamp-friendly format.
-
- Args:
- table_md: The Markdown table content (without outer pipes).
-
- Returns:
- Nested list representation suitable for Basecamp.
-
- Example:
- Input:
- | Name | Value |
- |------|-------|
- | Foo | Bar |
-
- Output:
- Name:
- - Name: Foo
- - Value: Bar
- """
- lines = [line.strip() for line in table_md.strip().split("\n") if line.strip()]
-
- if len(lines) < 2:
- return table_md
-
- # Parse header
- header_match = re.match(r"\|(.+)\|", lines[0])
- if not header_match:
- return table_md
-
- headers = [h.strip() for h in header_match.group(1).split("|")]
-
- # Skip separator line if present
- data_lines = lines[1:]
- if data_lines and re.match(r"^\|[-:\s|]+\|$", data_lines[0]):
- data_lines = data_lines[1:]
-
- result_parts: list[str] = []
-
- for line in data_lines:
- row_match = re.match(r"\|(.+)\|", line)
- if not row_match:
- continue
-
- values = [v.strip() for v in row_match.group(1).split("|")]
-
- # Create nested list for each row
- row_items: list[str] = []
- for header, value in zip(headers, values):
- row_items.append(f" - {header}: {value}")
-
- if row_items:
- result_parts.append("\n".join(row_items))
-
- return "\n\n".join(result_parts)
-
-
-def convert_checkbox_to_text(line: str) -> str:
- """
- Convert a checkbox line to plain text.
-
- Args:
- line: A markdown line with checkbox syntax.
-
- Returns:
- Plain text representation with checkbox state indicated.
- """
- # Match: optional_indent - [ ] or - [x] or - [X]
- match = re.match(r"^(\s*-\s*)\[[\sXx]\]\s+(.*)", line)
- if match:
- indent, text = match.groups()
- checkbox_char = "☐" if " " in match.group(0) else "☑"
- return f"{indent}{checkbox_char} {text}"
-
- return line
-
-
-def _cli_check_mode(filename: str) -> int:
- """
- Run in check mode: only output warnings without conversion.
-
- Args:
- filename: Path to the markdown file.
-
- Returns:
- Exit code: 0 if no warnings, 1 if warnings found, 2 on file error.
- """
- try:
- with open(filename, "r", encoding="utf-8") as f:
- markdown_text = f.read()
- except FileNotFoundError:
- print(f"Error: File not found: {filename}", file=sys.stderr)
- return 2
- except PermissionError:
- print(f"Error: Permission denied: {filename}", file=sys.stderr)
- return 2
- except Exception as e:
- print(f"Error reading file: {e}", file=sys.stderr)
- return 2
-
- warnings = is_basecamp_safe(markdown_text)
-
- if warnings:
- print(f"Warnings for {filename}:")
- for warning in warnings:
- print(f" ⚠️ {warning}")
- return 1
- else:
- print(f"✅ No unsupported features found in {filename}")
- return 0
-
-
-def _cli_convert_mode(filename: str, output: Optional[str]) -> int:
- """
- Run in convert mode: convert markdown to HTML.
-
- Args:
- filename: Path to the markdown file.
- output: Optional path for output file.
-
- Returns:
- Exit code: 0 on success, 1 on warnings, 2 on error.
- """
- try:
- with open(filename, "r", encoding="utf-8") as f:
- markdown_text = f.read()
- except FileNotFoundError:
- print(f"Error: File not found: {filename}", file=sys.stderr)
- return 2
- except PermissionError:
- print(f"Error: Permission denied: {filename}", file=sys.stderr)
- return 2
- except Exception as e:
- print(f"Error reading file: {e}", file=sys.stderr)
- return 2
-
- # Show warnings before conversion
- warnings = is_basecamp_safe(markdown_text)
- if warnings:
- print(f"Warnings for {filename}:")
- for warning in warnings:
- print(f" ⚠️ {warning}")
- print()
-
- # Check for markdown library
- if not MARKDOWN_AVAILABLE:
- print(
- "Error: markdown library not installed.",
- file=sys.stderr
- )
- print(
- "Install with: pip install markdown",
- file=sys.stderr
- )
- return 2
-
- try:
- html_output = markdown_to_trix(markdown_text)
- except Exception as e:
- print(f"Error converting markdown: {e}", file=sys.stderr)
- return 2
-
- if output:
- try:
- with open(output, "w", encoding="utf-8") as f:
- f.write(html_output)
- print(f"✅ Converted {filename} → {output}")
- except Exception as e:
- print(f"Error writing output: {e}", file=sys.stderr)
- return 2
- else:
- # Write to stdout
- print(html_output)
-
- return 1 if warnings else 0
-
-
-def main() -> int:
- """
- CLI entry point.
-
- Returns:
- Exit code: 0=OK, 1=Warnungen, 2=Fehler.
- """
- parser = argparse.ArgumentParser(
- prog="markdown_to_trix.py",
- description="Convert Markdown to Basecamp Trix HTML format.",
- )
-
- parser.add_argument(
- "--file",
- "-f",
- metavar="INPUT.md",
- help="Input Markdown file to convert",
- )
-
- parser.add_argument(
- "--output",
- "-o",
- metavar="OUTPUT.html",
- help="Output HTML file (default: stdout)",
- )
-
- parser.add_argument(
- "--check",
- "-c",
- metavar="INPUT.md",
- help="Only check for unsupported features, don't convert",
- )
-
- parser.add_argument(
- "--verbose",
- "-v",
- action="store_true",
- help="Enable verbose (debug) logging",
- )
-
- args = parser.parse_args()
-
- if args.verbose:
- logging.getLogger().setLevel(logging.DEBUG)
-
- # Handle mutually exclusive modes
- if args.check:
- return _cli_check_mode(args.check)
-
- if args.file:
- return _cli_convert_mode(args.file, args.output)
-
- # No mode specified, show help
- parser.print_help()
- return 0
-
-
-if __name__ == "__main__":
- # Parse arguments first
- import argparse
- parser = argparse.ArgumentParser()
- parser.add_argument("--check", "-c", metavar="INPUT.md")
- parser.add_argument("--file", "-f", metavar="INPUT.md")
- parser.add_argument("--output", "-o", metavar="OUTPUT.html")
- args, _ = parser.parse_known_args()
-
- if args.check or args.file:
- # CLI mode with arguments
- sys.exit(main())
-
- # Run self-tests when executed without arguments
- print("Running self-test...")
-
- test_cases = [
- {
- "name": "Basic conversion",
- "input": "# Hello\n\n**Bold** and *italic* text.",
- "expected_warnings": 0,
- },
- {
- "name": "Table detection",
- "input": "# Test\n\n| A | B |\n|---|---|\n| 1 | 2 |",
- "expected_warnings": 1,
- },
- {
- "name": "Checkbox detection",
- "input": "# Tasks\n\n- [ ] Task 1\n- [x] Task 2",
- "expected_warnings": 1,
- },
- {
- "name": "Horizontal rule",
- "input": "# Test\n\n---\n\nContent",
- "expected_warnings": 1,
- },
- {
- "name": "Safe markdown",
- "input": "# Title\n\n- Item 1\n- Item 2\n\n**Bold** and [link](https://example.com)",
- "expected_warnings": 0,
- },
- ]
-
- all_passed = True
-
- for test in test_cases:
- warnings = is_basecamp_safe(test["input"])
- passed = len(warnings) == test["expected_warnings"]
- status = "✅ PASS" if passed else "❌ FAIL"
- print(f" {status}: {test['name']} (warnings: {len(warnings)})")
- if not passed:
- all_passed = False
- print(f" Expected: {test['expected_warnings']}, Got: {len(warnings)}")
- print(f" Warnings: {warnings}")
-
- # Test table conversion
- print("\nTesting table conversion...")
- table_md = """
-| Name | Role | Email |
-|------|------|-------|
-| Alice | Dev | alice@example.com |
-| Bob | Design | bob@example.com |
-"""
- converted = convert_table_to_lists(table_md)
- print(f" Input:\n{table_md}")
- print(f" Output:\n{converted}")
-
- if all_passed:
- print("\n✅ All self-tests passed!")
- sys.exit(0)
- else:
- print("\n❌ Some self-tests failed!")
- sys.exit(1)
diff --git a/skills/basecamp-project/scripts/requirements.txt b/skills/basecamp-project/scripts/requirements.txt
deleted file mode 100644
index 267770b..0000000
--- a/skills/basecamp-project/scripts/requirements.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-# Markdown to Trix Converter Dependencies
-markdown>=3.4.0
diff --git a/skills/basecamp-project/templates/blank.md b/skills/basecamp-project/templates/blank.md
deleted file mode 100644
index 2140fa8..0000000
--- a/skills/basecamp-project/templates/blank.md
+++ /dev/null
@@ -1,44 +0,0 @@
----
-title: Custom Project Template
-type: custom
-version: 1.0
-description: "Minimal-Template für eigene Projekte"
-created: 2025-01-01
----
-
-# {Projekt-Name}
-
-## Overview
-
-**Beschreibung:**
-{Beschreibe das Projekt in 2-3 Sätzen.}
-
-**Kontext:**
-{Warum wird dieses Projekt gestartet? Was ist der Hintergrund?}
-
----
-
-## Goals
-
-1. {Ziel 1}
-2. {Ziel 2}
-3. {Ziel 3}
-
----
-
-## TODO: Add sections as needed
-
-{Platz für eigene Sektionen. Empfohlene Ergänzungen:}
-
-- Scope (In-Scope / Out-of-Scope)
-- Timeline / Meilensteine
-- Team / Rollen
-- Deliverables
-- Risks
-- Dependencies
-
----
-
-## Notes
-
-{Platz für Notizen und zusätzliche Informationen}
diff --git a/skills/basecamp-project/templates/feature-launch.md b/skills/basecamp-project/templates/feature-launch.md
deleted file mode 100644
index 080a33a..0000000
--- a/skills/basecamp-project/templates/feature-launch.md
+++ /dev/null
@@ -1,105 +0,0 @@
----
-title: Feature Launch Template
-type: feature-launch
-version: 1.0
-description: "Template für die Entwicklung eines neuen Features oder Produkts"
-created: 2025-01-01
----
-
-# {Feature-Name}
-
-## Overview
-
-**Beschreibung:**
-{Beschreibe das Feature in 2-3 Sätzen. Was ist der Hauptzweck und welcher Nutzen entsteht für die User?}
-
-**Warum ist dieses Feature wichtig?**
-{Erkläre den strategischen Kontext und die Motivation für dieses Feature.}
-
----
-
-## Goals
-
-**Hauptziel:**
-{Hauptziel in einem Satz beschreiben}
-
-1. **Ziel 1:** {Zielbeschreibung}
-2. **Ziel 2:** {Zielbeschreibung}
-3. **Ziel 3:** {Zielbeschreibung}
-
----
-
-## Scope
-
-**In-Scope:**
-- {In-Scope Punkt 1}
-- {In-Scope Punkt 2}
-- {In-Scope Punkt 3}
-
-**Out-of-Scope:**
-- {Out-of-Scope Punkt 1}
-- {Out-of-Scope Punkt 2}
-
----
-
-## Deliverables
-
-1. {Deliverable 1}
-2. {Deliverable 2}
-3. {Deliverable 3}
-
----
-
-## Timeline
-
-**Geplanter Start:** {Datum}
-
-**Meilensteine:**
-
-1. **Phase 1: Konzeption** — {Startdatum} bis {Enddatum}
- - {Teilaufgabe}
-
-2. **Phase 2: Entwicklung** — {Startdatum} bis {Enddatum}
- - {Teilaufgabe}
-
-3. **Phase 3: Testing** — {Startdatum} bis {Enddatum}
- - {Teilaufgabe}
-
-4. **Phase 4: Launch** — {Startdatum}
- - {Teilaufgabe}
-
----
-
-## Team-Rollen
-
-**Project Lead:** @{Person}
-**Development:** @{Person(en)}
-**Design:** @{Person(en)}
-**QA:** @{Person(en)}
-**Stakeholder:** @{Person(en)}
-
----
-
-## Dependencies
-
-- {Abhängigkeit 1 — Wer ist verantwortlich?}
-- {Abhängigkeit 2 — Wer ist verantwortlich?}
-- {Abhängigkeit 3 — Wer ist verantwortlich?}
-
----
-
-## Risks
-
-1. **Risiko 1:** {Beschreibung}
- - **Impact:** {Hoch/Mittel/Niedrig}
- - **Mitigation:** {Wie minimieren wir das Risiko?}
-
-2. **Risiko 2:** {Beschreibung}
- - **Impact:** {Hoch/Mittel/Niedrig}
- - **Mitigation:** {Wie minimieren wir das Risiko?}
-
----
-
-## Notes
-
-{Platz für zusätzliche Notizen, Entscheidungen oder Kontext.}
diff --git a/skills/basecamp-project/templates/meeting.md b/skills/basecamp-project/templates/meeting.md
deleted file mode 100644
index 437e366..0000000
--- a/skills/basecamp-project/templates/meeting.md
+++ /dev/null
@@ -1,85 +0,0 @@
----
-title: Meeting Template
-type: meeting
-version: 1.0
-description: "Template für Meeting-Management"
-created: 2025-01-01
----
-
-# {Meeting-Titel}
-
-## Meta
-
-**Datum:** {TT.MM.JJJJ}
-**Uhrzeit:** {HH:MM} — {HH:MM}
-**Dauer:** {Minuten}
-**Moderation:** @{Person}
-**Notizen:** @{Person}
-
-**Teilnehmer:**
-- @{Person 1}
-- @{Person 2}
-- @{Person 3}
-- @{Person 4}
-
----
-
-## Agenda
-
-1. **Begrüßung und Agenda-Check** — {HH:MM} ({Dauer} Min)
- - {Kurzer Punkt}
-
-2. **{Thema 1}** — {HH:MM} ({Dauer} Min)
- - {Diskussionspunkt}
- - {Diskussionspunkt}
-
-3. **{Thema 2}** — {HH:MM} ({Dauer} Min)
- - {Diskussionspunkt}
- - {Diskussionspunkt}
-
-4. **{Thema 3}** — {HH:MM} ({Dauer} Min)
- - {Diskussionspunkt}
- - {Diskussionspunkt}
-
-5. **Wrap-up und Action Items** — {HH:MM} ({Dauer} Min)
- - {Kurzer Punkt}
-
----
-
-## Notizen
-
-### {Thema 1}
-
-{Notizen zum Thema 1}
-
-### {Thema 2}
-
-{Notizen zum Thema 2}
-
-### {Thema 3}
-
-{Notizen zum Thema 3}
-
----
-
-## Action Items
-
-1. **{Action 1}** — @{Verantwortlich} — Bis: {Datum}
-2. **{Action 2}** — @{Verantwortlich} — Bis: {Datum}
-3. **{Action 3}** — @{Verantwortlich} — Bis: {Datum}
-4. **{Action 4}** — @{Verantwortlich} — Bis: {Datum}
-
----
-
-## Nächster Termin
-
-**Datum:** {TT.MM.JJJJ}
-**Uhrzeit:** {HH:MM}
-**Ort/Link:** {Ort oder Videokonferenz-Link}
-**Moderation:** @{Person}
-
----
-
-## Notes
-
-{Platz für zusätzliche Notizen}
diff --git a/skills/basecamp-project/templates/research-mvp.md b/skills/basecamp-project/templates/research-mvp.md
deleted file mode 100644
index bad9063..0000000
--- a/skills/basecamp-project/templates/research-mvp.md
+++ /dev/null
@@ -1,179 +0,0 @@
----
-title: Research & MVP Template
-type: research-mvp
-version: 1.0
-description: "Template für Forschungsprojekte oder MVP-Entwicklung"
-created: 2025-01-01
----
-
-# {Projekt-Name} — Research & MVP
-
-## Research Question
-
-**Hauptfrage:**
-{Was ist die zentrale Forschungsfrage oder das Problem, das gelöst werden soll?}
-
-**Teilfragen:**
-1. {Teilfrage 1}
-2. {Teilfrage 2}
-3. {Teilfrage 3}
-
----
-
-## Hypothesis
-
-**Hypothese:**
-{Wir glauben, dass... (Wenn/Dann Aussage)}
-
-**Annahmen:**
-- {Annahme 1}
-- {Annahme 2}
-- {Annahme 3}
-
-**Zu testen durch:**
-- {Methode/Test 1}
-- {Methode/Test 2}
-
----
-
-## Success Criteria
-
-**Must Have (Hard Criteria):**
-1. {Kriterium 1}
-2. {Kriterium 2}
-3. {Kriterium 3}
-
-**Should Have (Soft Criteria):**
-1. {Kriterium 1}
-2. {Kriterium 2}
-
-**Nice to Have:**
-1. {Kriterium 1}
-2. {Kriterium 2}
-
----
-
-## Method/Approach
-
-**Forschungsansatz:**
-{Deskriptiv / Explorativ / Experimentell / etc.}
-
-**Vorgehensweise:**
-
-1. **Phase 1: Discovery** ({Zeitraum})
- - {Aktivität 1}
- - {Aktivität 2}
- - {Aktivität 3}
-
-2. **Phase 2: Prototyping** ({Zeitraum})
- - {Aktivität 1}
- - {Aktivität 2}
- - {Aktivität 3}
-
-3. **Phase 3: Testing & Validation** ({Zeitraum})
- - {Aktivität 1}
- - {Aktivität 2}
- - {Aktivität 3}
-
-4. **Phase 4: Analysis & Conclusion** ({Zeitraum})
- - {Aktivität 1}
- - {Aktivität 2}
-
----
-
-## Timeline
-
-**Projekt Start:** {Datum}
-**Projekt Ende:** {Datum}
-**Gesamtdauer:** {Anzahl} Wochen/Monate
-
-**Meilensteine:**
-
-1. **Discovery Complete** — {Datum}
- - {Deliverable}
-
-2. **MVP Prototype Ready** — {Datum}
- - {Deliverable}
-
-3. **User Testing Complete** — {Datum}
- - {Deliverable}
-
-4. **Final Report/Recommendation** — {Datum}
- - {Deliverable}
-
----
-
-## Deliverables
-
-1. **{Deliverable 1}** — {Datum}
- - {Beschreibung}
-
-2. **{Deliverable 2}** — {Datum}
- - {Beschreibung}
-
-3. **{Deliverable 3}** — {Datum}
- - {Beschreibung}
-
----
-
-## Evaluation Plan
-
-**Qualitative Evaluation:**
-- {Methode 1} — {Wer führt durch? — Wann?}
-- {Methode 2} — {Wer führt durch? — Wann?}
-
-**Quantitative Evaluation:**
-- {Methode 1} — {Metrik/OKR — Wann?}
-- {Methode 2} — {Metrik/OKR — Wann?}
-
-**Success Threshold:**
-{Mindestanforderungen für "Erfolg" definieren}
-
----
-
-## Stakeholders
-
-**Projekt Team:**
-- **Project Lead:** @{Person}
-- **Research Lead:** @{Person}
-- **Development:** @{Person(en)}
-- **Design:** @{Person(en)}
-
-**Advisory:**
-- @{Person 1}
-- @{Person 2}
-
-**Decision Makers:**
-- @{Person 1}
-- @{Person 2}
-
----
-
-## Resources
-
-**Budget:** {Betrag/Schätzung}
-**Tools benötigt:**
-- {Tool 1}
-- {Tool 2}
-
-**Zugänge benötigt:**
-- {Zugang 1}
-- {Zugang 2}
-
----
-
-## Risks & Mitigation
-
-1. **Risiko 1:** {Beschreibung}
- - **Impact:** {Hoch/Mittel/Niedrig}
- - **Mitigation:** {Gegenmaßnahme}
-
-2. **Risiko 2:** {Beschreibung}
- - **Impact:** {Hoch/Mittel/Niedrig}
- - **Mitigation:** {Gegenmaßnahme}
-
----
-
-## Notes
-
-{Platz für zusätzliche Notizen und Erkenntnisse}
diff --git a/skills/basecamp-project/templates/retrospective.md b/skills/basecamp-project/templates/retrospective.md
deleted file mode 100644
index 2134e52..0000000
--- a/skills/basecamp-project/templates/retrospective.md
+++ /dev/null
@@ -1,114 +0,0 @@
----
-title: Retrospective Template
-type: retrospective
-version: 1.0
-description: "Template für Team-Retrospektiven"
-created: 2025-01-01
----
-
-# {Sprint/Projekt Name} — Retrospektive
-
-## Sprint/Projekt Info
-
-**Sprint/Projekt:** {Nummer oder Name}
-**Team:** @{Team-Name}
-**Project Lead:** @{Person}
-
----
-
-## Date Range
-
-**Sprint Start:** {Datum}
-**Sprint Ende:** {Datum}
-**Retrospektive Datum:** {Datum}
-
----
-
-## Participants
-
-Anwesend:
-- @{Person 1}
-- @{Person 2}
-- @{Person 3}
-
-Abwesend (entschuldigt):
-- @{Person}
-
----
-
-## What Went Well — Plus
-
-**Team Dynamics:**
-- {Punkt 1}
-- {Punkt 2}
-- {Punkt 3}
-
-**Process:**
-- {Punkt 1}
-- {Punkt 2}
-
-**Tools & Technology:**
-- {Punkt 1}
-- {Punkt 2}
-
-**Communication:**
-- {Punkt 1}
-- {Punkt 2}
-
----
-
-## What Could Be Improved — Delta
-
-**Team Dynamics:**
-- {Verbesserungspunkt 1}
-- {Verbesserungspunkt 2}
-
-**Process:**
-- {Verbesserungspunkt 1}
-- {Verbesserungspunkt 2}
-
-**Tools & Technology:**
-- {Verbesserungspunkt 1}
-- {Verbesserungspunkt 2}
-
-**Communication:**
-- {Verbesserungspunkt 1}
-- {Verbesserungspunkt 2}
-
----
-
-## Action Items for Next Iteration
-
-1. **{Action 1}** — @{Verantwortlich} — Bis: {Datum}
-2. **{Action 2}** — @{Verantwortlich} — Bis: {Datum}
-3. **{Action 3}** — @{Verantwortlich} — Bis: {Datum}
-4. **{Action 4}** — @{Verantwortlich} — Bis: {Datum}
-
----
-
-## Metrics/KPIs
-
-**Velocity:**
-- Geplant: {Story Points}
-- Erreicht: {Story Points}
-- Delta: {+/-}
-
-**Release Readiness:** {Prozent}%
-**Bug-Rate:** {Anzahl}
-**Blocked Time:** {Stunden}
-
-**Sonstige Metrics:**
-- {Metric 1}: {Wert}
-- {Metric 2}: {Wert}
-
----
-
-## Key Learnings
-
-{Eine Zusammenfassung der wichtigsten Erkenntnisse aus diesem Sprint/Projekt.}
-
----
-
-## Notes
-
-{Platz für zusätzliche Notizen und Diskussionspunkte}
diff --git a/skills/basecamp-project/templates/sprint.md b/skills/basecamp-project/templates/sprint.md
deleted file mode 100644
index b1e97e2..0000000
--- a/skills/basecamp-project/templates/sprint.md
+++ /dev/null
@@ -1,136 +0,0 @@
----
-title: Sprint Template
-type: sprint
-version: 1.0
-description: "Template für Sprint/Iteration"
-created: 2025-01-01
----
-
-# Sprint {Nummer}: {Sprint-Name}
-
-## Sprint Info
-
-**Sprint Nummer:** {Nummer}
-**Sprint Start:** {Datum}
-**Sprint Ende:** {Datum}
-**Sprint Duration:** {Anzahl} Wochen
-**Team:** @{Team-Name}
-**Scrum Master:** @{Person}
-
----
-
-## Sprint Goal
-
-{Video Sprint Goal in einem Satz. Was ist das Hauptziel dieses Sprints?}
-
-*\"{Sprint Goal Text}\"*
-
----
-
-## User Stories / Tasks
-
-### User Story 1: {Titel}
-**Story Points:** {Punkte}
-**Verantwortlich:** @{Person}
-
-Tasks:
-1. {Task 1}
-2. {Task 2}
-3. {Task 3}
-
-### User Story 2: {Titel}
-**Story Points:** {Punkte}
-**Verantwortlich:** @{Person}
-
-Tasks:
-1. {Task 1}
-2. {Task 2}
-
-### User Story 3: {Titel}
-**Story Points:** {Punkte}
-**Verantwortlich:** @{Person}
-
-Tasks:
-1. {Task 1}
-2. {Task 2}
-3. {Task 3}
-4. {Task 4}
-
----
-
-## Velocity Target
-
-**Committe Story Points:** {Anzahl}
-**Historical Average:** {Anzahl}
-**Target Velocity:** {Anzahl}
-
----
-
-## Definition of Done
-
-Alle Items müssen folgende Kriterien erfüllen:
-
-1. Code ist geschrieben und peer-reviewed
-2. Unit-Tests sind geschrieben und bestehen
-3. Manuelles Testing ist abgeschlossen
-4. Dokumentation ist aktualisiert
-5. Keine offenen Blocker oder kritischen Bugs
-6. Akzeptanzkriterien sind erfüllt
-
----
-
-## Capacity
-
-**Team Members:**
-- @{Person 1}: {Verfügbare Tage}
-- @{Person 2}: {Verfügbare Tage}
-- @{Person 3}: {Verfügbare Tage}
-
-**Vacations/Abwesenheiten:**
-- @{Person}: {Datum} — {Grund}
-- @{Person}: {Datum} — {Grund}
-
----
-
-## Retrospective Notes
-
-*Werden nach Sprint-Ende ergänzt.*
-
-**Was lief gut:**
-- {Punkt 1}
-- {Punkt 2}
-
-**Was lief nicht gut:**
-- {Punkt 1}
-- {Punkt 2}
-
-**Action Items:**
-1. {Action 1} — @{Verantwortlich}
-2. {Action 2} — @{Verantwortlich}
-
----
-
-## Metrics
-
-**Sprint Velocity:** {Story Points}
-**Burndown:** {Link zum Chart}
-**Bug-Rate:** {Anzahl}
-**Code Coverage:** {Prozent}%
-
----
-
-## Dependencies & Blockers
-
-**Blockers:**
-- {Blocker 1 — Wer löst?}
-- {Blocker 2 — Wer löst?}
-
-**Dependencies:**
-- {Dependency 1 — Wer ist verantwortlich?}
-- {Dependency 2 — Wer ist verantwortlich?}
-
----
-
-## Notes
-
-{Platz für zusätzliche Notizen und Informationen}
diff --git a/skills/basecamp-project/templates/workshop.md b/skills/basecamp-project/templates/workshop.md
deleted file mode 100644
index 2d7d03a..0000000
--- a/skills/basecamp-project/templates/workshop.md
+++ /dev/null
@@ -1,125 +0,0 @@
----
-title: Workshop Template
-type: workshop
-version: 1.0
-description: "Template für Workshops oder Trainings"
-created: 2025-01-01
----
-
-# {Workshop-Name}
-
-## Overview
-
-**Beschreibung:**
-{Beschreibe den Workshop in 2-3 Sätzen. Was ist das Thema und was werden die Teilnehmer lernen oder erreichen?}
-
-**Format:** {Präsenz / Online / Hybrid}
-**Dauer:** {Gesamtdauer in Stunden}
-
----
-
-## Target Audience
-
-**Zielgruppe:**
-{Wer nimmt teil? Welche Vorkenntnisse werden erwartet?}
-
-**Teilnehmeranzahl:**
-- Min: {Anzahl}
-- Max: {Anzahl}
-
----
-
-## Learning Objectives
-
-Nach diesem Workshop können die Teilnehmer:
-
-1. {Lernziel 1}
-2. {Lernziel 2}
-3. {Lernziel 3}
-
----
-
-## Agenda
-
-**09:00 — Willkommen und Einführung** ({Dauer} Min)
-- {Agenda-Punkt}
-
-**09:30 — Block 1: {Thema}** ({Dauer} Min)
-- {Agenda-Punkt}
-- {Agenda-Punkt}
-
-**10:30 — Pause** (15 Min)
-
-**10:45 — Block 2: {Thema}** ({Dauer} Min)
-- {Agenda-Punkt}
-- {Agenda-Punkt}
-
-**12:00 — Mittagspause** (60 Min)
-
-**13:00 — Block 3: {Thema}** ({Dauer} Min)
-- {Agenda-Punkt}
-- {Agenda-Punkt}
-
-**14:30 — Pause** (15 Min)
-
-**14:45 — Block 4: Praktische Übung** ({Dauer} Min)
-- {Agenda-Punkt}
-- {Agenda-Punkt}
-
-**16:00 — Wrap-up und Q&A** ({Dauer} Min)
-- {Agenda-Punkt}
-
-**16:30 — Ende**
-
----
-
-## Materials Needed
-
-**Für den Trainer:**
-- {Material 1}
-- {Material 2}
-- {Präsentation / Slides}
-
-**Für die Teilnehmer:**
-- {Material 1}
-- {Material 2}
-- Zugang zu {Tool/Plattform}
-
-**Technische Anforderungen:**
-- {Anforderung 1}
-- {Anforderung 2}
-
----
-
-## Prerequisites
-
-**Teilnehmer sollten mitbringen:**
-- {Vorkenntnis/Tool/Erfahrung 1}
-- {Vorkenntnis/Tool/Erfahrung 2}
-
-**Vor dem Workshop:**
-- {Vorbereitung 1}
-- {Vorbereitung 2}
-
----
-
-## Follow-up Actions
-
-1. {Folgeaktion 1 — Wer ist verantwortlich?}
-2. {Folgeaktion 2 — Wer ist verantwortlich?}
-3. {Folgeaktion 3 — Wer ist verantwortlich?}
-
-**Nächste Schritte:**
-{Versand von Materialien, Follow-up Session, etc.}
-
----
-
-## Feedback
-
-{Platz für Feedback-Formular Link oder Feedback-Sammlung nach dem Workshop}
-
----
-
-## Notes
-
-{Platz für zusätzliche Notizen und Learnings}