All 32 agent manifests and 17 hands shipped with empty mcp_servers /
skills lists, which the kernel interprets as "no filter" — every
globally-configured MCP server's tools and every installed skill get
injected into the prompt on every LLM call. On a typical instance (9
MCP servers, ~85 MCP tools + ~82 built-in tools) that's ~50k input
tokens per turn spent on definitions the agent never uses.
Changes
-------
32 agents/*/agent.toml:
- mcp_servers: 1-4 per agent. memory wherever state persists across
turns; fetch / exa-search / brave-search only where the prompt
actually calls for web; git / github / filesystem on engineering
agents; gmail / google-calendar / linear / jira on productivity
agents whose prompts mention them.
- skills: per-role allowlist driven by what the system_prompt names
(e.g. coder → rust/python/typescript/git/shell-scripting; devops-
lead → docker/kubernetes/terraform/ansible/ci-cd/helm/prometheus/
sysadmin). Generalists (assistant) keep skills = [] (see "Open
items" below).
- skills_disabled = true on the four short-conversational agents
(hello-world, recipe-assistant, health-tracker, home-automation).
Their system prompts never instruct the LLM to consult any skill,
so loading all 60 was pure waste. They also drop the explicit
max_history_messages override and inherit the kernel default (60).
- max_history_messages tiered by workload shape:
60 short conversational (hello-world, recipe, health-tracker,
home-automation) — inherits the rising kernel default
(`DEFAULT_MAX_HISTORY_MESSAGES = 60`); no override needed.
60 single-turn task agents (writer, translator, doc-writer,
email-assistant, customer-support, sales-assistant, recruit-
er, social-media, personal-finance, tutor, travel-planner,
meeting-assistant, ops, devops-lead, planner) — explicit
override at the same value to lock the cap if the kernel
default moves again.
80 multi-step / tool-heavy (coder, debugger, architect, code-
reviewer, test-engineer, security-auditor, analyst, data-
scientist, academic-researcher, researcher, legal-assistant)
120 coordinators (assistant, orchestrator) — long multi-agent
sessions where prompt-cache continuity is critical
All values sit at or above the kernel default. Pinning lower
would thrash the prompt cache (the failure mode #91 fixed for
the creator hand by *raising* the cap, not lowering it).
17 hands/*/HAND.toml:
- hand-level mcp_servers / skills now declared on every hand, so
every [agents.*] inside inherits a sensible allowlist.
- skills_disabled = true placed on each [agents.*] inside clip and
creator (pure media pipelines that don't benefit from any skill).
HandDefinitionRaw in librefang-hands does NOT have a top-level
skills_disabled field — declaring it at the hand top level would
be silently dropped by serde, so the setting must live on the
AgentManifest of each sub-agent role.
- devteam: expand existing mcp_servers = ["github"] to include
memory / git / filesystem; populate skills with the expected
dev-team expertise (replacing the placeholder skills = []).
- wiki: replace placeholder mcp_servers = [] with [memory, fetch,
filesystem]. Hand-level skills stays [].
- lead: hand-level skills was originally [email-writer, writing-
coach, interview-prep]; interview-prep is for job-interview
preparation, not lead generation. Replaced with data-analyst
(used by the qualification-scoring step in the prompt).
schema.toml: register mcp_servers / skills / max_history_messages on
the agent field schema so machine consumers (RegistrySchema in
librefang-types) see the new top-level fields. The
max_history_messages description now points at
librefang_runtime::agent_loop::DEFAULT_MAX_HISTORY_MESSAGES (60
today) by name, so the schema doesn't go stale when the constant
moves again.
agents/README.md: example block + "Adding a New Agent" checklist
mention the allowlists; max_history_messages example is shown
commented out with a prompt-cache caveat.
Open items
----------
`assistant` (the default user-facing agent) keeps `skills = []`
deliberately. It is the generalist entry point — capping its skill
surface at a small allowlist would defeat its "delegate to any
specialist" job. The trade-off is that this single agent still pays
the full skill-definition load on every turn; operators who want a
strict allowlist for `assistant` can override it after install.
Why not adopt PR #89's approach
-------------------------------
#89 covers similar ground but with three issues this PR avoids:
1. mcp_servers = ["_none"] sentinel. #89's body explicitly notes
it's pending upstream librefang#4808 (mcp_disabled). Shipping a
magic-string today means coming back later to clean it up. This
PR uses real allowlists.
2. max_history_messages = 8 / 12 / 15 / 20. Far below today's
kernel default (60) and #91's direction for long-workflow hands
(80–120). Every turn that hits the cap invalidates the cached
prompt prefix; the cost of cache misses exceeds the saving from
shorter history. This PR uses 60–120.
3. Doubling max_llm_tokens_per_hour (coder 200k→500k, assistant
300k→500k) widens the per-agent budget — the opposite direction
from #87's "reduce per-call cost" goal. Left to the operator's
instance-specific tuning.
Refs librefang/librefang-registry#87, librefang/librefang-registry#89
121 lines
5.9 KiB
TOML
121 lines
5.9 KiB
TOML
name = "meeting-assistant"
|
|
version = "0.4.3-beta3-20260314"
|
|
description = "Meeting notes, action items, agenda preparation, and follow-up tracking agent."
|
|
author = "librefang"
|
|
module = "builtin:chat"
|
|
tags = [
|
|
"meetings",
|
|
"notes",
|
|
"action-items",
|
|
"agenda",
|
|
"follow-up",
|
|
"productivity",
|
|
]
|
|
|
|
# Per-agent resource allowlists (refs librefang/librefang-registry#87).
|
|
# Empty list = all available; explicit list filters the prompt surface
|
|
# so the LLM only sees what this agent actually uses.
|
|
mcp_servers = ["memory", "google-calendar", "gmail"]
|
|
skills = ["writing-coach"]
|
|
|
|
|
|
max_history_messages = 60
|
|
[metadata.routing]
|
|
aliases = [
|
|
"meeting notes",
|
|
"meeting summary",
|
|
"action items",
|
|
"prepare agenda",
|
|
"meeting follow up",
|
|
]
|
|
weak_aliases = ["agenda", "notes", "meeting recap"]
|
|
|
|
[model]
|
|
provider = "default"
|
|
model = "default"
|
|
max_tokens = 8192
|
|
temperature = 0.3
|
|
system_prompt = """You are Meeting Assistant, a specialist agent in the LibreFang Agent OS. You are an expert at preparing agendas, capturing meeting notes, extracting action items, and managing follow-up workflows to ensure nothing falls through the cracks.
|
|
|
|
CORE COMPETENCIES:
|
|
|
|
1. Agenda Preparation
|
|
You create structured, time-boxed agendas that keep meetings focused and productive. Given a meeting topic, attendee list, and duration, you propose an agenda with: opening/context setting, discussion items ranked by priority, time allocations per item, decision points clearly marked, and a closing section for action items and next steps. You recommend pre-read materials when appropriate and suggest which attendees should lead each agenda item.
|
|
|
|
2. Meeting Notes and Transcription Processing
|
|
You transform raw meeting notes, transcripts, or voice-to-text dumps into clean, structured meeting minutes. Your output format includes: meeting metadata (date, attendees, duration), executive summary (2-3 sentences), key discussion points organized by topic, decisions made (with rationale), action items (with owner and deadline), open questions, and parking lot items. You distinguish between facts discussed, opinions expressed, and decisions reached.
|
|
|
|
3. Action Item Extraction and Tracking
|
|
You are meticulous about identifying every commitment made during a meeting. You extract action items with four required fields: task description, owner (who committed), deadline (explicit or inferred), and priority. You flag action items without clear owners or deadlines and prompt for clarification. You maintain running action item logs across meetings and can generate status reports showing completed, in-progress, and overdue items.
|
|
|
|
4. Follow-up Management
|
|
After meetings, you draft follow-up emails summarizing key outcomes and action items for distribution to attendees. You schedule reminder check-ins for pending action items and generate pre-meeting briefs that include: last meeting's unresolved items, progress on assigned tasks, and context needed for the upcoming discussion. You close the loop on recurring meetings by tracking item continuity across sessions.
|
|
|
|
5. Meeting Effectiveness Analysis
|
|
You help improve meeting culture by analyzing patterns: meetings that consistently run over time, meetings without clear outcomes, recurring topics that never reach resolution, and attendee engagement patterns. You recommend structural improvements — shorter meetings, async alternatives, standing meeting audits, and decision-making frameworks like RACI or RAPID.
|
|
|
|
6. Multi-Meeting Synthesis
|
|
When a user has multiple meetings on related topics, you synthesize across sessions to identify themes, conflicting decisions, redundant discussions, and gaps in coverage. You produce cross-meeting briefings that give stakeholders a unified view.
|
|
|
|
OPERATIONAL GUIDELINES:
|
|
- Always use consistent formatting for meeting notes: headers, bullet points, bold for owners
|
|
- Action items must always include: WHAT, WHO, WHEN — flag any that are missing components
|
|
- Distinguish clearly between decisions (final) and discussion points (open)
|
|
- When processing raw transcripts, clean up filler words and organize by topic, not chronology
|
|
- Store meeting notes, action items, and templates in memory for continuity
|
|
- For recurring meetings, maintain a running document that shows evolution over time
|
|
- Never fabricate attendee names, decisions, or action items not present in the source
|
|
- Present follow-up emails as drafts for user review before sending
|
|
- Use tables for action item tracking and status dashboards
|
|
|
|
TOOLS AVAILABLE:
|
|
- file_read / file_write / file_list: Read transcripts, write structured notes and reports
|
|
- memory_store / memory_recall: Persist action items, meeting history, and templates
|
|
|
|
You are organized, detail-oriented, and relentlessly focused on accountability. You turn chaotic meetings into clear outcomes."""
|
|
|
|
[resources]
|
|
max_llm_tokens_per_hour = 150000
|
|
max_concurrent_tools = 5
|
|
|
|
[capabilities]
|
|
tools = [
|
|
"file_read",
|
|
"file_write",
|
|
"file_list",
|
|
"memory_store",
|
|
"memory_recall",
|
|
"web_search",
|
|
]
|
|
memory_read = ["*"]
|
|
memory_write = ["self.*", "shared.*"]
|
|
|
|
|
|
[i18n.zh]
|
|
name = "会议助手"
|
|
description = "会议笔记、行动项、议程准备与后续跟踪 Agent。"
|
|
|
|
[i18n.zh-TW]
|
|
name = "會議助手"
|
|
description = "會議筆記、行動項目、議程準備與後續追蹤 Agent。"
|
|
|
|
[i18n.ja]
|
|
name = "ミーティングアシスタント"
|
|
description = "議事録、アクションアイテム、アジェンダ準備、フォローアップを支援する Agent。"
|
|
|
|
[i18n.ko]
|
|
name = "회의 도우미"
|
|
description = "회의록, 액션 아이템, 안건 준비, 후속 조치를 담당하는 Agent."
|
|
|
|
[i18n.de]
|
|
name = "Meeting-Assistent"
|
|
description = "Agent für Meeting-Notizen, Action-Items, Agenda-Vorbereitung und Follow-up."
|
|
|
|
[i18n.es]
|
|
name = "Asistente de reuniones"
|
|
description = "Agente para notas de reuniones, tareas pendientes, preparación de agenda y seguimiento."
|
|
|
|
[i18n.fr]
|
|
name = "Assistant de réunion"
|
|
description = "Agent pour notes de réunion, actions, préparation d'ordre du jour et suivi."
|