Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,46 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

---

## [0.12.0] - 2025-12-21

### Phase 12: Dynamic Tool Configuration

**Summary:** FB-27 (Dynamic Tool Config) and FB-28 (Skills Update).

### Added
- **Dynamic Tool Configuration** (FB-27, 3 tools):
- `get_tool_config` - Query tool group configuration (enabled/disabled state, tool counts)
- `set_tool_config` - Enable/disable tool groups at runtime (session-only or persistent)
- `list_tool_groups` - List all tool groups with descriptions and status
- **Meta-tools category** - 4 always-enabled tools that cannot be disabled:
- `help`, `get_tool_config`, `set_tool_config`, `list_tool_groups`
- Thread-safe tool configuration with `sync.RWMutex`
- Tool group metadata with tool counts and tool name lists
- Persistence option for tool configuration via SQLite

### Changed
- "Help" category renamed to "Meta" tools for clarity
- Help content updated to describe meta-tools functionality
- **streaming-assistant skill** (FB-28): Added FB-25/26 tools and workflows:
- Virtual camera management (start/stop for video calls)
- Replay buffer highlight capture workflows
- Studio mode preview/program transitions
- Hotkey automation guidance
- Updated cleanup recommendations

### Tests
- 32 test cases across 9 test functions for tool config handlers
- Tests for getGroupEnabled, setGroupEnabled, convertToStorageConfig helpers
- Tool group metadata validation tests

### Metrics
- **Tools:** 72 (+3)
- **Resources:** 4 (unchanged)
- **Prompts:** 13 (unchanged)
- **Skills:** 4 (unchanged)

---

## [0.11.0] - 2025-12-21

### Phase 11: Virtual Camera, Replay Buffer, Studio Mode & Hotkeys
Expand Down Expand Up @@ -290,6 +330,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

| Version | Phase | Tools | Resources | Prompts | Date |
|---------|-------|-------|-----------|---------|------|
| 0.12.0 | 12 | 72 | 4 | 13 | 2025-12-21 |
| 0.11.0 | 11 | 69 | 4 | 13 | 2025-12-21 |
| 0.10.0 | 10 | 57 | 4 | 13 | 2025-12-20 |
| 0.7.0 | 7 | 45 | 4 | 13 | 2025-12-18 |
| 0.6.3 | 6.3 | 45 | 4 | 10 | 2025-12-17 |
| 0.6.2 | 6.2 | 31 | 4 | 10 | 2025-12-17 |
Expand Down
10 changes: 5 additions & 5 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Context for AI assistants working on the agentic-obs project.

**agentic-obs** is an MCP (Model Context Protocol) server providing AI assistants with programmatic control over OBS Studio via the WebSocket API.

**Current Status:** 69 Tools | 4 Resources | 13 Prompts | 4 Skills
**Current Status:** 72 Tools | 4 Resources | 13 Prompts | 4 Skills

## Project Structure

Expand All @@ -17,7 +17,7 @@ agentic-obs/
├── internal/
│ ├── mcp/
│ │ ├── server.go # MCP server lifecycle
│ │ ├── tools.go # Tool registration (69 tools)
│ │ ├── tools.go # Tool registration (72 tools)
│ │ ├── resources.go # Resource handlers (4 types)
│ │ ├── prompts.go # Prompt definitions (13 prompts)
│ │ ├── completions.go # Autocomplete handler
Expand Down Expand Up @@ -56,7 +56,7 @@ agentic-obs/
AI Assistant (Claude)
↕ stdio (JSON-RPC)
MCP Server (agentic-obs)
├─ Tools (69) ─────────┐
├─ Tools (72) ─────────┐
├─ Resources (4) ──────┼─→ OBS Client ─→ OBS Studio
├─ Prompts (13) ───────┘ ↕ WebSocket (4455)
└─ Storage ─────────────→ SQLite
Expand Down Expand Up @@ -150,7 +150,7 @@ go mod tidy

## MCP Capabilities Summary

### Tools (69 in 8 groups)
### Tools (72 in 8 groups + meta)

| Group | Count | Examples |
|-------|-------|----------|
Expand All @@ -162,7 +162,7 @@ go mod tidy
| Design | 14 | `create_text_source`, `set_source_transform` |
| Filters | 7 | `list_source_filters`, `toggle_source_filter` |
| Transitions | 5 | `list_transitions`, `set_current_transition` |
| Help | 1 | `help` (always enabled) |
| Meta | 4 | `help`, `get_tool_config`, `set_tool_config`, `list_tool_groups` (always enabled) |

### Resources (4 types)

Expand Down
4 changes: 2 additions & 2 deletions PROJECT_PLAN.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# agentic-obs Project Status

**Status:** Active Development
**Version:** 0.11.0
**Version:** 0.12.0
**Updated:** 2025-12-21

---
Expand All @@ -23,7 +23,7 @@

| Metric | Count |
|--------|-------|
| **MCP Tools** | 69 |
| **MCP Tools** | 72 |
| **MCP Resources** | 4 |
| **MCP Prompts** | 13 |
| **Claude Skills** | 4 |
Expand Down
25 changes: 23 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,28 @@ Enable AI to create and manipulate OBS sources programmatically.
| `list_hotkeys` | List all available OBS hotkeys |
| `trigger_hotkey_by_name` | Trigger a hotkey by name |

**Total: 69 tools in 8 groups** (Core, Sources, Audio, Layout, Visual, Design, Filters, Transitions) + Help
### Meta Tools (4 tools, always enabled)

| Tool | Description |
|------|-------------|
| `help` | Get detailed help on tools, resources, prompts, workflows, or troubleshooting |
| `get_tool_config` | Query current tool group configuration (enabled/disabled state) |
| `set_tool_config` | Enable/disable tool groups at runtime (session-only or persistent) |
| `list_tool_groups` | List all tool groups with descriptions and status |

**Example: Disable Visual tools for a lighter setup**
```json
{
"tool": "set_tool_config",
"arguments": {
"group": "Visual",
"enabled": false,
"persist": true
}
}
```

**Total: 72 tools in 8 groups** (Core, Sources, Audio, Layout, Visual, Design, Filters, Transitions) + Meta (4 always-enabled tools)

## MCP Resources

Expand Down Expand Up @@ -337,7 +358,7 @@ agentic-obs/
├── main.go # Entry point (MCP server or TUI)
├── config/ # Configuration management
├── internal/
│ ├── mcp/ # MCP server implementation (69 tools)
│ ├── mcp/ # MCP server implementation (72 tools)
│ ├── obs/ # OBS WebSocket client
│ ├── storage/ # SQLite persistence
│ ├── http/ # HTTP server for screenshots and dashboard
Expand Down
62 changes: 37 additions & 25 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,14 @@ type Config struct {

// ToolGroupConfig controls which tool categories are enabled
type ToolGroupConfig struct {
Core bool // Core OBS tools (scenes, recording, streaming, status)
Visual bool // Visual monitoring tools (screenshots)
Layout bool // Layout management tools (scene presets)
Audio bool // Audio control tools
Sources bool // Source management tools
Design bool // Scene design tools (source creation, transforms)
Core bool // Core OBS tools (scenes, recording, streaming, status, virtual cam, replay, studio mode, hotkeys)
Visual bool // Visual monitoring tools (screenshots)
Layout bool // Layout management tools (scene presets)
Audio bool // Audio control tools
Sources bool // Source management tools
Design bool // Scene design tools (source creation, transforms)
Filters bool // Filter management tools
Transitions bool // Transition control tools
}

// WebServerConfig controls HTTP server settings
Expand All @@ -66,12 +68,14 @@ func DefaultConfig() *Config {
OBSPassword: "",
DBPath: filepath.Join(homeDir, ".agentic-obs", "db.sqlite"),
ToolGroups: ToolGroupConfig{
Core: true,
Visual: true,
Layout: true,
Audio: true,
Sources: true,
Design: true,
Core: true,
Visual: true,
Layout: true,
Audio: true,
Sources: true,
Design: true,
Filters: true,
Transitions: true,
},
WebServer: WebServerConfig{
Enabled: true,
Expand Down Expand Up @@ -150,12 +154,14 @@ func (c *Config) PromptFirstRunSetup() error {

// Tool group prompts
fmt.Println("\n--- Tool Groups ---")
c.ToolGroups.Core = promptBool("Core OBS control (scenes, recording, streaming)", c.ToolGroups.Core)
c.ToolGroups.Core = promptBool("Core OBS control (scenes, recording, streaming, virtual cam, replay, studio mode)", c.ToolGroups.Core)
c.ToolGroups.Visual = promptBool("Visual monitoring (screenshot capture)", c.ToolGroups.Visual)
c.ToolGroups.Layout = promptBool("Layout management (scene presets)", c.ToolGroups.Layout)
c.ToolGroups.Audio = promptBool("Audio control (mute, volume)", c.ToolGroups.Audio)
c.ToolGroups.Sources = promptBool("Source management (visibility, settings)", c.ToolGroups.Sources)
c.ToolGroups.Design = promptBool("Scene design (create sources, transforms)", c.ToolGroups.Design)
c.ToolGroups.Filters = promptBool("Filter management (source filters)", c.ToolGroups.Filters)
c.ToolGroups.Transitions = promptBool("Transition control (scene transitions)", c.ToolGroups.Transitions)

// Webserver prompt
fmt.Println("\n--- HTTP Server ---")
Expand Down Expand Up @@ -186,6 +192,8 @@ func (c *Config) PromptFirstRunSetup() error {
fmt.Printf("Audio tools: %v\n", c.ToolGroups.Audio)
fmt.Printf("Source tools: %v\n", c.ToolGroups.Sources)
fmt.Printf("Design tools: %v\n", c.ToolGroups.Design)
fmt.Printf("Filter tools: %v\n", c.ToolGroups.Filters)
fmt.Printf("Transition tools: %v\n", c.ToolGroups.Transitions)
fmt.Printf("HTTP server: %v", c.WebServer.Enabled)
if c.WebServer.Enabled {
fmt.Printf(" (port %d)", c.WebServer.Port)
Expand Down Expand Up @@ -235,12 +243,14 @@ func LoadFromStorage(ctx context.Context, dbPath string) (*Config, error) {
log.Printf("Warning: failed to load tool group config: %v", err)
} else {
cfg.ToolGroups = ToolGroupConfig{
Core: toolGroups.Core,
Visual: toolGroups.Visual,
Layout: toolGroups.Layout,
Audio: toolGroups.Audio,
Sources: toolGroups.Sources,
Design: toolGroups.Design,
Core: toolGroups.Core,
Visual: toolGroups.Visual,
Layout: toolGroups.Layout,
Audio: toolGroups.Audio,
Sources: toolGroups.Sources,
Design: toolGroups.Design,
Filters: toolGroups.Filters,
Transitions: toolGroups.Transitions,
}
}

Expand Down Expand Up @@ -289,12 +299,14 @@ func SaveToStorage(ctx context.Context, cfg *Config) error {

// Save tool group preferences
toolGroups := storage.ToolGroupConfig{
Core: cfg.ToolGroups.Core,
Visual: cfg.ToolGroups.Visual,
Layout: cfg.ToolGroups.Layout,
Audio: cfg.ToolGroups.Audio,
Sources: cfg.ToolGroups.Sources,
Design: cfg.ToolGroups.Design,
Core: cfg.ToolGroups.Core,
Visual: cfg.ToolGroups.Visual,
Layout: cfg.ToolGroups.Layout,
Audio: cfg.ToolGroups.Audio,
Sources: cfg.ToolGroups.Sources,
Design: cfg.ToolGroups.Design,
Filters: cfg.ToolGroups.Filters,
Transitions: cfg.ToolGroups.Transitions,
}
if err := db.SaveToolGroupConfig(ctx, toolGroups); err != nil {
return fmt.Errorf("failed to save tool group config: %w", err)
Expand Down
14 changes: 8 additions & 6 deletions design/ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ This document describes the system architecture of agentic-obs.

## System Overview

agentic-obs is an MCP (Model Context Protocol) server that bridges AI assistants with OBS Studio. It provides 69 tools, 4 resource types, and 13 prompts for programmatic OBS control.
agentic-obs is an MCP (Model Context Protocol) server that bridges AI assistants with OBS Studio. It provides 72 tools, 4 resource types, and 13 prompts for programmatic OBS control.

```
┌─────────────────────────────────────────────────────────────────┐
Expand All @@ -19,7 +19,7 @@ agentic-obs is an MCP (Model Context Protocol) server that bridges AI assistants
│ │ MCP Layer │ │
│ │ ┌──────────┐ ┌───────────┐ ┌─────────┐ ┌──────────┐ │ │
│ │ │ Tools │ │ Resources │ │ Prompts │ │Completions│ │ │
│ │ │ (45) │ │ (4) │ │ (13) │ │ │ │ │
│ │ │ (72) │ │ (4) │ │ (13) │ │ │ │ │
│ │ └────┬─────┘ └─────┬─────┘ └────┬────┘ └────┬─────┘ │ │
│ └───────┼──────────────┼─────────────┼───────────┼────────┘ │
│ │ │ │ │ │
Expand Down Expand Up @@ -55,7 +55,7 @@ agentic-obs is an MCP (Model Context Protocol) server that bridges AI assistants
| Component | Package | Responsibility |
|-----------|---------|----------------|
| **MCP Server** | `internal/mcp/server.go` | Lifecycle, stdio transport, notification dispatch |
| **Tools** | `internal/mcp/tools.go` | 45 tool handlers organized in 6 groups |
| **Tools** | `internal/mcp/tools.go` | 72 tool handlers organized in 8 groups + meta |
| **Resources** | `internal/mcp/resources.go` | Scene, screenshot, preset resource handlers |
| **Prompts** | `internal/mcp/prompts.go` | 13 workflow prompt definitions |
| **Completions** | `internal/mcp/completions.go` | Autocomplete for arguments and URIs |
Expand Down Expand Up @@ -131,17 +131,19 @@ main.go

## MCP Protocol Integration

### Tools (45 total)
### Tools (72 total)

| Group | Tools | Description |
|-------|-------|-------------|
| **Core** | 13 | Scene management, recording, streaming, status |
| **Core** | 25 | Scene management, recording, streaming, virtual cam, replay buffer, studio mode, hotkeys |
| **Sources** | 3 | Source visibility and settings |
| **Audio** | 4 | Volume and mute control |
| **Layout** | 6 | Scene preset management |
| **Visual** | 4 | Screenshot source control |
| **Design** | 14 | Source creation and transforms |
| **Help** | 1 | Documentation (always enabled) |
| **Filters** | 7 | Filter creation and management |
| **Transitions** | 5 | Scene transition control |
| **Meta** | 4 | Help, tool config (always enabled) |

### Resources (4 types)

Expand Down
4 changes: 2 additions & 2 deletions design/ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -166,14 +166,14 @@ Tracked features with unique identifiers for reference.
| FB-24 | Transitions | 5 tools for scene transition control | Phase 10 |
| FB-25 | Virtual Cam & Replay | 6 tools for virtual camera and replay buffer | Phase 11 |
| FB-26 | Studio Mode & Hotkeys | 6 tools for studio mode and hotkey control | Phase 11 |
| FB-27 | Dynamic Tool Config | 3 meta-tools for runtime tool group enable/disable | Phase 12 |
| FB-28 | Skills Update | streaming-assistant with virtual cam, replay, studio mode, hotkeys | Phase 12 |

### Active Backlog

| ID | Name | Priority | Complexity | Dependencies | Description |
|----|------|----------|------------|--------------|-------------|
| FB-20 | Automation Rules | High | Medium | - | Event-triggered actions and macros |
| FB-27 | Dynamic Tool Config | High | Medium | - | Runtime tool group enable/disable via MCP tools |
| FB-28 | Skills Update | High | Low | FB-25, FB-26 ✅ | Update streaming-assistant with virtual cam, replay, studio mode |
| FB-29 | New Prompts | Medium | Low | FB-25, FB-26 ✅ | Add virtual-cam-control, replay-management prompts |
| FB-30 | Scene Designer Filters | Medium | Low | FB-23 ✅ | Add filter section to scene-designer skill |
| FB-31 | Studio Mode Skill | Medium | Medium | FB-26 ✅ | New studio-mode-operator skill for preview/program workflow |
Expand Down
Loading