Initialize meeting assistant

This commit is contained in:
2026-05-18 23:38:47 +02:00
commit 90df1edc03
20 changed files with 967 additions and 0 deletions
@@ -0,0 +1,58 @@
## Context
Meeting Assistant is a local/server-side .NET 10 application that helps capture and process meetings. It should work for any meeting format, including in-person conversations, and should not require direct APIs from meeting products such as Teams or Zoom.
The central artifact is an Obsidian markdown note created before transcription begins. The user can add attendees, project context, meeting purpose, and live notes while the meeting is happening. Meeting Assistant can add discovered context to the same note, then later append or link summaries, next steps, and knowledge base updates.
## Goals / Non-Goals
**Goals:**
- Establish a .NET 10 application skeleton and OpenSpec workflow.
- Model a platform-independent meeting session flow.
- Create a meeting note before transcription starts.
- Preserve user-authored notes as first-class input to summarization.
- Transcribe meeting audio with speaker attribution.
- Generate summaries, decisions, and next steps.
- Maintain project knowledge from meeting output and additional future sources.
- Let agents retrieve project context and keyword context.
- Allow guarded project file updates when the project context or user explicitly permits them.
**Non-Goals:**
- Build a Teams, Zoom, or calendar-specific integration in version 1.
- Require cloud transcription APIs.
- Define the final Obsidian vault path or note template completely in this first change.
- Implement unrestricted autonomous file edits.
## Decisions
1. Build the source application as ASP.NET Core on .NET 10.
- Rationale: It matches the requested runtime and keeps the application service-oriented.
2. Make the Obsidian markdown note the session anchor.
- Rationale: The user can enrich the meeting context before and during transcription, and agents can work from a durable human-readable artifact.
3. Treat meeting-platform APIs as optional augmentation.
- Rationale: The assistant must be usable for in-person meetings and for platforms where no integration is available or desired.
4. Keep project knowledge as a generic capability.
- Rationale: Meeting-derived knowledge should later combine with other sources without coupling the design to transcripts only.
5. Require explicit guardrails for project file mutation.
- Rationale: Agents may update project files, but only when the project is known and the user or project context permits edits.
## Risks / Trade-offs
- [Risk] Speaker attribution quality depends on the selected transcription pipeline. -> Mitigation: keep attribution requirements observable and provider-independent.
- [Risk] The Obsidian note may become too dense. -> Mitigation: separate metadata, user notes, assistant context, transcript references, and generated outputs into clear sections.
- [Risk] Agent file updates could affect the wrong project. -> Mitigation: require explicit project binding before mutation tools are available.
- [Risk] Retrieval can surface stale or irrelevant project context. -> Mitigation: include source references and update timestamps in retrieved context.
## Open Questions
- What exact Obsidian vault folder should hold meeting notes?
- What metadata fields are required before transcription can start?
- Which transcription provider should be used first?
- Which storage backend should hold embeddings and project knowledge?
- What approval model should govern agent project file edits?
@@ -0,0 +1,29 @@
## Why
Meeting Assistant should provide a meeting capture workflow that is not tied to a specific online meeting provider. The first version needs to establish the platform-independent core: meeting notes, metadata capture, transcription with speaker attribution, generated summaries and next steps, and a project knowledge base that agents can use for later retrieval and controlled project work.
## What Changes
- Create Meeting Assistant as a .NET 10 server application in `Manuel/meeting-assistant`.
- Establish OpenSpec as the source of truth for behavior changes.
- Define the version 1 meeting flow around Obsidian markdown notes created before transcription starts.
- Require the core flow to support in-person meetings and not depend on Teams, Zoom, or similar APIs.
- Add requirements for speaker-attributed transcription, summaries, decisions, and next steps.
- Define project context capture and retrieval as first-class capabilities.
- Define a guarded agent tool model for project lookup and controlled project file changes.
## Capabilities
### New Capabilities
- `meeting-session`: creation and lifecycle of meeting notes and metadata.
- `meeting-transcription`: platform-independent transcription with speaker attribution.
- `meeting-summary`: generated summaries, decisions, and next steps.
- `project-knowledge`: project context, retrieval, and knowledge base updates from meetings.
- `agent-project-tools`: agent tools for lookup, retrieval, and controlled project file updates.
## Impact
- New .NET 10 solution, service project, tests, README, and OpenSpec structure.
- Version 1 behavior is documented before feature implementation.
- Future platform integrations remain optional augmentations instead of hard dependencies.
@@ -0,0 +1,19 @@
## ADDED Requirements
### Requirement: Agents can use project context tools
Meeting Assistant SHALL expose tools that allow agents to look up project information, retrieve keyword-relevant context, and inspect meeting-derived knowledge.
#### Scenario: Agent looks up meeting project context
- **WHEN** a meeting note identifies a project
- **THEN** the agent can retrieve relevant project context through Meeting Assistant tools
### Requirement: Agents can only mutate project files with explicit project binding
Meeting Assistant SHALL only expose project file mutation tools when the target project is known and mutation is permitted by user instruction or project context.
#### Scenario: Project mutation is permitted
- **WHEN** the user or project context permits file updates for a known project
- **THEN** the agent can use controlled tools to change files in that project
#### Scenario: Project mutation is not permitted
- **WHEN** the target project is missing or mutation permission is absent
- **THEN** Meeting Assistant does not expose project file mutation tools for that request
@@ -0,0 +1,30 @@
## ADDED Requirements
### Requirement: Meeting Assistant creates a note before transcription
Meeting Assistant SHALL create an Obsidian markdown note for a meeting session before transcription starts.
The note SHALL be the durable anchor for meeting metadata, user notes, assistant-discovered context, transcript references, summaries, decisions, and next steps.
#### Scenario: Session starts
- **WHEN** the user starts a new meeting session
- **THEN** Meeting Assistant creates a markdown note in the configured meetings folder before starting transcription
#### Scenario: User adds context before transcription
- **WHEN** the note exists before transcription starts
- **THEN** the user can add attendees, project context, meeting purpose, and other notes to that file
### Requirement: Meeting notes preserve user-authored content
Meeting Assistant SHALL preserve user-authored meeting notes and include them as input when generating summaries, decisions, and next steps.
#### Scenario: User writes notes during the meeting
- **WHEN** the user updates the meeting note while the meeting is active
- **THEN** Meeting Assistant keeps that content and incorporates it into generated meeting outputs
### Requirement: Meeting sessions are platform independent
Meeting Assistant SHALL support meeting sessions that do not originate from Teams, Zoom, or any other meeting software API.
Meeting software integrations MAY augment the meeting experience, but they SHALL NOT be required for the primary meeting capture, transcription, or summary flow.
#### Scenario: In-person meeting is captured
- **WHEN** the user starts transcription for an in-person meeting
- **THEN** Meeting Assistant captures and processes the meeting without requiring a meeting platform integration
@@ -0,0 +1,12 @@
## ADDED Requirements
### Requirement: Meeting Assistant generates meeting outputs
Meeting Assistant SHALL generate a summary, decisions, and next steps from the meeting transcript, metadata, user notes, and assistant-discovered context.
#### Scenario: Meeting processing completes
- **WHEN** transcription and context collection have completed
- **THEN** Meeting Assistant generates a summary, decisions, and next steps for the meeting note
#### Scenario: User notes conflict with transcript interpretation
- **WHEN** user-authored notes provide context that changes the interpretation of the transcript
- **THEN** Meeting Assistant considers those notes during summary and next-step generation
@@ -0,0 +1,14 @@
## ADDED Requirements
### Requirement: Meeting Assistant transcribes meetings with speaker attribution
Meeting Assistant SHALL transcribe meeting audio and associate transcript segments with speakers when speaker attribution is available.
The transcription contract SHALL remain independent of the meeting source so that local audio, in-person meetings, and future meeting-platform integrations can use the same downstream processing.
#### Scenario: Speaker-attributed transcript is produced
- **WHEN** meeting audio is transcribed and speaker attribution is available
- **THEN** the transcript contains ordered speaker-attributed segments
#### Scenario: Speaker attribution is unavailable
- **WHEN** meeting audio is transcribed but speaker attribution is unavailable
- **THEN** Meeting Assistant keeps the transcript and marks speaker identity as unknown rather than discarding the meeting
@@ -0,0 +1,14 @@
## ADDED Requirements
### Requirement: Meeting Assistant maintains project knowledge
Meeting Assistant SHALL maintain project knowledge based on meeting content and future generic information sources.
Project knowledge SHALL support retrieval by project context and relevant keywords.
#### Scenario: Meeting has project context
- **WHEN** a meeting note identifies a project
- **THEN** Meeting Assistant can associate transcript-derived and summary-derived knowledge with that project
#### Scenario: Agent retrieves project context
- **WHEN** an agent needs context for a meeting or follow-up task
- **THEN** Meeting Assistant can retrieve relevant project knowledge and source references
@@ -0,0 +1,38 @@
## 1. Repository Setup
- [x] 1.1 Create the Gitea repository and clone it to `C:\Manuel\meeting-assistant`.
- [x] 1.2 Add .NET 10 solution, service project, and test project.
- [x] 1.3 Add repository README and agent instructions.
- [x] 1.4 Add OpenSpec config and the version 1 proposal/design/specs.
## 2. Meeting Session Notes
- [ ] 2.1 Define the Obsidian meeting note location and naming convention.
- [ ] 2.2 Add a meeting note template with metadata, attendees, purpose, project context, user notes, assistant context, transcript, summary, decisions, and next steps.
- [ ] 2.3 Implement meeting session creation that writes the initial note before transcription starts.
- [ ] 2.4 Add tests proving user-authored notes remain preserved and included in later processing.
## 3. Transcription
- [ ] 3.1 Select the first transcription provider.
- [ ] 3.2 Add provider-independent transcription contracts.
- [ ] 3.3 Implement transcription ingestion for platform-independent audio input.
- [ ] 3.4 Add speaker attribution handling and tests.
## 4. Summary and Next Steps
- [ ] 4.1 Define the summary, decisions, and next steps output structure.
- [ ] 4.2 Implement summary generation from transcript plus user notes.
- [ ] 4.3 Append or link generated outputs from the meeting note.
## 5. Project Knowledge and Agent Tools
- [ ] 5.1 Define project binding metadata for meetings.
- [ ] 5.2 Define project knowledge storage and retrieval requirements.
- [ ] 5.3 Add agent tools for project lookup and keyword lookup.
- [ ] 5.4 Define and implement guardrails for project file mutation tools.
## 6. Verification
- [x] 6.1 Run `dotnet test MeetingAssistant.slnx`.
- [x] 6.2 Run `openspec validate define-meeting-assistant-v1 --strict`.