This repository has been archived on 2026-03-24. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Timmy-time-dashboard/src/agents/quill.py
Alexander Payne a719c7538d Implement MCP system, Event Bus, and Sub-Agents
## 1. MCP (Model Context Protocol) Implementation

### Registry (src/mcp/registry.py)
- Tool registration with JSON schemas
- Dynamic tool discovery
- Health tracking per tool
- Metrics collection (latency, error rates)
- @register_tool decorator for easy registration

### Server (src/mcp/server.py)
- MCPServer class implementing MCP protocol
- MCPHTTPServer for FastAPI integration
- Standard endpoints: list_tools, call_tool, get_schema

### Schemas (src/mcp/schemas/base.py)
- create_tool_schema() helper
- Common parameter types
- Standard return types

### Bootstrap (src/mcp/bootstrap.py)
- Automatic tool module loading
- Status reporting

## 2. MCP-Compliant Tools (src/tools/)

| Tool | Purpose | Category |
|------|---------|----------|
| web_search | DuckDuckGo search | research |
| read_file | File reading | files |
| write_file | File writing (confirmation) | files |
| list_directory | Directory listing | files |
| python | Python code execution | code |
| memory_search | Vector memory search | memory |

All tools have proper schemas, error handling, and MCP registration.

## 3. Event Bus (src/events/bus.py)

- Async publish/subscribe pattern
- Pattern matching with wildcards (agent.task.*)
- Event history tracking
- Concurrent handler execution
- Module-level singleton for system-wide use

## 4. Sub-Agents (src/agents/)

All agents inherit from BaseAgent with:
- Agno Agent integration
- MCP tool registry access
- Event bus connectivity
- Structured logging

### Agent Roster

| Agent | Role | Tools | Purpose |
|-------|------|-------|---------|
| Seer | Research | web_search, read_file, memory_search | Information gathering |
| Forge | Code | python, write_file, read_file | Code generation |
| Quill | Writing | write_file, read_file, memory_search | Content creation |
| Echo | Memory | memory_search, read_file, write_file | Context retrieval |
| Helm | Routing | memory_search | Task routing decisions |
| Timmy | Orchestrator | All tools | Coordination & user interface |

### Timmy Orchestrator
- Analyzes user requests
- Routes to appropriate sub-agent
- Handles direct queries
- Manages swarm coordination
- create_timmy_swarm() factory function

## 5. Integration

All components wired together:
- Tools auto-register on import
- Agents connect to event bus
- MCP server provides HTTP API
- Ready for dashboard integration

## Tests
- All 973 existing tests pass
- New components tested manually
- Import verification successful

Next steps: Cascade Router, Self-Upgrade Loop, Dashboard integration
2026-02-25 19:26:24 -05:00

81 lines
2.2 KiB
Python

"""Quill Agent — Writing and content generation.
Capabilities:
- Documentation writing
- Content creation
- Text editing
- Summarization
"""
from typing import Any
from agents.base import BaseAgent
QUILL_SYSTEM_PROMPT = """You are Quill, a writing and content generation specialist.
Your role is to create, edit, and improve written content.
## Capabilities
- Documentation writing
- Content creation
- Text editing and refinement
- Summarization
- Style adaptation
## Guidelines
1. **Write clearly** — Plain language, logical structure
2. **Know your audience** — Adapt tone and complexity
3. **Be concise** — Cut unnecessary words
4. **Use formatting** — Headers, lists, emphasis for readability
## Tool Usage
- Use write_file to save documents
- Use read_file to review existing content
- Use memory_search to check style preferences
## Response Format
Provide written content with:
- Clear structure (headers, sections)
- Appropriate tone for the context
- Proper formatting (markdown)
- Brief explanation of choices made
You work for Timmy, the sovereign AI orchestrator. Create polished, professional content.
"""
class QuillAgent(BaseAgent):
"""Writing and content specialist."""
def __init__(self, agent_id: str = "quill") -> None:
super().__init__(
agent_id=agent_id,
name="Quill",
role="writing",
system_prompt=QUILL_SYSTEM_PROMPT,
tools=["write_file", "read_file", "memory_search"],
)
async def execute_task(self, task_id: str, description: str, context: dict) -> Any:
"""Execute a writing task."""
prompt = f"Create the requested written content:\n\nTask: {description}\n\nWrite professionally with clear structure."
result = await self.run(prompt)
return {
"task_id": task_id,
"agent": self.agent_id,
"result": result,
"status": "completed",
}
async def write_documentation(self, topic: str, format: str = "markdown") -> str:
"""Write documentation for a topic."""
prompt = f"Write comprehensive documentation for: {topic}\n\nFormat: {format}\nInclude: Overview, Usage, Examples, Notes"
return await self.run(prompt)