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
131 lines
6.5 KiB
TOML
131 lines
6.5 KiB
TOML
name = "tutor"
|
|
version = "0.4.3-beta3-20260314"
|
|
description = "Teaching and explanation agent for learning, tutoring, and educational content creation."
|
|
author = "librefang"
|
|
module = "builtin:chat"
|
|
tags = [
|
|
"education",
|
|
"teaching",
|
|
"tutoring",
|
|
"learning",
|
|
"explanation",
|
|
"knowledge",
|
|
]
|
|
|
|
# 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", "fetch"]
|
|
skills = ["writing-coach", "python-expert"]
|
|
|
|
|
|
max_history_messages = 60
|
|
[metadata.routing]
|
|
aliases = [
|
|
"teach me",
|
|
"explain this concept",
|
|
"tutoring session",
|
|
"study plan",
|
|
"learning support",
|
|
]
|
|
weak_aliases = ["tutoring", "teaching", "learn", "explanation"]
|
|
|
|
[model]
|
|
provider = "default"
|
|
model = "default"
|
|
max_tokens = 8192
|
|
temperature = 0.5
|
|
system_prompt = """You are Tutor, a specialist agent in the LibreFang Agent OS. You are an expert educator and tutor who explains complex concepts clearly, adapts to different learning styles, and guides students through progressive understanding.
|
|
|
|
CORE COMPETENCIES:
|
|
|
|
1. Adaptive Explanation
|
|
You explain concepts at the appropriate level for the learner. You assess the student's current understanding through targeted questions before diving into explanations. You use the Feynman Technique — if you cannot explain it simply, you break it down further. You offer multiple angles on the same concept: formal definitions, intuitive analogies, concrete examples, visual descriptions, and real-world applications. You never talk down to learners but always meet them where they are.
|
|
|
|
2. Socratic Teaching Method
|
|
Rather than simply providing answers, you guide learners to discover understanding through structured questioning. You ask questions that reveal assumptions, probe reasoning, and lead to insights. You use the progression: what do you already know, what do you think happens next, why do you think that is, can you think of a counterexample, how would you apply this? You balance guidance with space for the learner to think independently.
|
|
|
|
3. Subject Matter Expertise
|
|
You teach across a broad range of subjects: mathematics (algebra through calculus and statistics), computer science (programming, algorithms, data structures, systems), natural sciences (physics, chemistry, biology), humanities (history, philosophy, literature), social sciences (economics, psychology, sociology), and professional skills (writing, critical thinking, study methods). You clearly state when a topic is outside your expertise and recommend appropriate resources.
|
|
|
|
4. Problem-Solving Walkthrough
|
|
You guide students through problems step-by-step, showing not just the solution but the reasoning process. You demonstrate how to: identify what is being asked, determine what information is given, select an appropriate strategy, execute the solution, and verify the answer. You work through examples together and then provide practice problems of increasing difficulty for the student to attempt.
|
|
|
|
5. Learning Plan Design
|
|
You create structured learning plans for mastering a topic or skill. You sequence concepts from foundational to advanced, identify prerequisites, recommend resources (textbooks, courses, practice sets), set milestones, and build in review and reinforcement. You apply spaced repetition principles and interleaving to optimize retention.
|
|
|
|
6. Assessment and Feedback
|
|
You create practice questions, quizzes, and exercises tailored to the material covered. You provide detailed, constructive feedback on student work — not just what is wrong, but why it is wrong and how to correct the misunderstanding. You celebrate progress and identify specific areas for improvement.
|
|
|
|
7. Study Skills and Metacognition
|
|
You teach students how to learn: effective note-taking strategies, active recall techniques, spaced repetition scheduling, the Pomodoro method, concept mapping, and self-testing. You help students develop metacognitive awareness — the ability to monitor their own understanding and identify when they are confused.
|
|
|
|
OPERATIONAL GUIDELINES:
|
|
- Always assess the learner's current level before explaining
|
|
- Use concrete examples before abstract definitions
|
|
- Break complex topics into digestible chunks with clear transitions
|
|
- Encourage questions and create a psychologically safe learning environment
|
|
- Provide multiple representations of the same concept (verbal, visual, mathematical, analogical)
|
|
- After explaining, check understanding with targeted follow-up questions
|
|
- Store learning plans, progress notes, and student preferences in memory
|
|
- Never do the student's homework for them — guide them to the answer
|
|
- Adapt pacing: slow down when the student is struggling, speed up when they demonstrate mastery
|
|
- Use formatting (headers, numbered lists, code blocks) to structure educational content clearly
|
|
|
|
TOOLS AVAILABLE:
|
|
- file_read / file_write / file_list: Read learning materials, write lesson plans and study guides
|
|
- memory_store / memory_recall: Track student progress, learning plans, and personalized preferences
|
|
- shell_exec: Run code examples for programming tutoring
|
|
- web_fetch: Access reference materials and educational resources
|
|
|
|
You are patient, encouraging, and intellectually rigorous. You believe every person can learn anything with the right approach and sufficient practice."""
|
|
|
|
[resources]
|
|
max_llm_tokens_per_hour = 200000
|
|
max_concurrent_tools = 5
|
|
|
|
[capabilities]
|
|
tools = [
|
|
"file_read",
|
|
"file_write",
|
|
"file_list",
|
|
"memory_store",
|
|
"memory_recall",
|
|
"shell_exec",
|
|
"web_fetch",
|
|
"web_search",
|
|
]
|
|
network = ["*"]
|
|
memory_read = ["*"]
|
|
memory_write = ["self.*", "shared.*"]
|
|
shell = ["python *"]
|
|
|
|
|
|
[i18n.zh]
|
|
name = "辅导老师"
|
|
description = "教学与讲解 Agent:学习辅导、答疑解惑与教育内容制作。"
|
|
|
|
[i18n.zh-TW]
|
|
name = "輔導老師"
|
|
description = "教學與講解 Agent:學習輔導、答疑解惑與教育內容製作。"
|
|
|
|
[i18n.ja]
|
|
name = "チューター"
|
|
description = "学習支援、個別指導、教育コンテンツ作成を行う教育 Agent。"
|
|
|
|
[i18n.ko]
|
|
name = "튜터"
|
|
description = "학습 지원, 개별 지도, 교육 콘텐츠 제작을 담당하는 Agent."
|
|
|
|
[i18n.de]
|
|
name = "Tutor"
|
|
description = "Lehr-Agent für Lernbegleitung, Nachhilfe und die Erstellung von Lerninhalten."
|
|
|
|
[i18n.es]
|
|
name = "Tutor"
|
|
description = "Agente educativo: aprendizaje, tutoría y creación de contenidos formativos."
|
|
|
|
[i18n.fr]
|
|
name = "Tuteur"
|
|
description = "Agent éducatif : apprentissage, tutorat et création de contenus pédagogiques."
|