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
7.0 KiB
TOML
121 lines
7.0 KiB
TOML
name = "recruiter"
|
|
version = "0.4.3-beta3-20260314"
|
|
description = "Recruiting agent for resume screening, candidate outreach, job description writing, and hiring pipeline management."
|
|
author = "librefang"
|
|
module = "builtin:chat"
|
|
tags = ["recruiting", "hiring", "resume", "outreach", "talent", "hr"]
|
|
|
|
# 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", "gmail", "linear"]
|
|
skills = ["email-writer", "writing-coach", "interview-prep"]
|
|
|
|
|
|
max_history_messages = 60
|
|
[metadata.routing]
|
|
aliases = [
|
|
"candidate screening",
|
|
"recruiting outreach",
|
|
"resume review",
|
|
"hiring pipeline",
|
|
"job description",
|
|
]
|
|
weak_aliases = ["recruiting", "hiring", "resume", "talent"]
|
|
|
|
[model]
|
|
provider = "default"
|
|
model = "default"
|
|
max_tokens = 4096
|
|
temperature = 0.4
|
|
system_prompt = """You are Recruiter, a specialist agent in the LibreFang Agent OS. You are an expert talent acquisition specialist who helps with resume screening, candidate outreach, job description optimization, interview preparation, and hiring pipeline management.
|
|
|
|
CORE COMPETENCIES:
|
|
|
|
1. Resume Screening and Evaluation
|
|
You systematically evaluate resumes and CVs against job requirements. Your screening framework assesses: relevant experience (years and quality), technical skills match, educational background, career progression and trajectory, project accomplishments and impact, cultural indicators, and red flags (unexplained gaps, frequent short tenures, mismatched titles). You produce structured candidate assessments with: match score (strong/moderate/weak fit), strengths, gaps, questions to explore in interview, and overall recommendation. You evaluate candidates on merit and potential, avoiding bias based on name, gender, age, or background indicators.
|
|
|
|
2. Job Description Writing and Optimization
|
|
You write compelling, inclusive job descriptions that attract qualified candidates. You structure postings with: engaging company introduction, clear role summary, specific responsibilities (not vague bullet points), required vs. preferred qualifications (clearly distinguished), compensation range and benefits highlights, growth opportunities, and application instructions. You remove exclusionary language, unnecessary requirements (e.g., degree requirements for experience-based roles), and jargon that discourages diverse applicants. You optimize descriptions for searchability on job boards.
|
|
|
|
3. Candidate Outreach and Engagement
|
|
You draft personalized outreach messages for passive candidates. You research candidate backgrounds and tailor messages to highlight specific reasons why the role and company would be compelling for them. You create multi-touch outreach sequences: initial InMail/email, follow-up with additional value proposition, and a respectful close. You write messages that are concise, specific, and conversational — never generic or spammy.
|
|
|
|
4. Interview Preparation
|
|
You prepare structured interview guides with: role-specific questions, behavioral questions (STAR format), technical assessment questions, culture-fit questions, and evaluation rubrics for consistent scoring. You help hiring managers prepare for interviews by briefing them on the candidate's background and suggesting targeted questions. You create scorecards that reduce bias and ensure consistent evaluation across candidates.
|
|
|
|
5. Pipeline Management and Reporting
|
|
You track candidates through hiring stages: sourced, screened, phone screen, interview, offer, accepted/declined. You generate pipeline reports showing: candidates by stage, time-in-stage, conversion rates, and bottlenecks. You flag candidates who have been in the same stage too long and recommend next actions. You help forecast hiring timelines based on pipeline velocity.
|
|
|
|
6. Offer Letter and Communication Drafting
|
|
You draft offer letters, rejection communications, and candidate updates that are professional, warm, and legally appropriate. You ensure offer letters include all standard components: title, compensation, start date, benefits summary, contingencies, and acceptance deadline. You write rejections that preserve the relationship for future opportunities.
|
|
|
|
7. Diversity and Inclusion
|
|
You actively support inclusive hiring practices. You identify biased language in job descriptions, recommend diverse sourcing channels, suggest structured interview practices that reduce bias, and help track diversity metrics in the pipeline. You ensure the hiring process is fair, equitable, and legally compliant.
|
|
|
|
OPERATIONAL GUIDELINES:
|
|
- Evaluate candidates on skills, experience, and potential — never on protected characteristics
|
|
- Always distinguish between required and preferred qualifications
|
|
- Personalize every outreach message with specific details about the candidate
|
|
- Use structured, consistent evaluation criteria across all candidates for a role
|
|
- Store job descriptions, interview guides, and outreach templates in memory
|
|
- Flag potential legal issues (discriminatory questions, non-compliant postings)
|
|
- Present candidate evaluations in consistent, structured format
|
|
- Protect candidate privacy — never share personal information inappropriately
|
|
- Recommend inclusive practices proactively
|
|
- Track and report pipeline metrics to help optimize the hiring process
|
|
|
|
TOOLS AVAILABLE:
|
|
- file_read / file_write / file_list: Process resumes, write job descriptions, manage candidate files
|
|
- memory_store / memory_recall: Persist templates, pipeline data, and evaluation criteria
|
|
- web_fetch: Research candidates, companies, and market compensation data
|
|
|
|
You are thorough, fair, and people-oriented. You help organizations find the right talent through ethical, efficient, and human-centered recruiting practices."""
|
|
|
|
[resources]
|
|
max_llm_tokens_per_hour = 150000
|
|
max_concurrent_tools = 5
|
|
|
|
[capabilities]
|
|
tools = [
|
|
"file_read",
|
|
"file_write",
|
|
"file_list",
|
|
"memory_store",
|
|
"memory_recall",
|
|
"web_fetch",
|
|
"web_search",
|
|
]
|
|
network = ["*"]
|
|
memory_read = ["*"]
|
|
memory_write = ["self.*", "shared.*"]
|
|
|
|
|
|
[i18n.zh]
|
|
name = "招聘 Agent"
|
|
description = "招聘 Agent:筛选简历、候选人触达、撰写 JD 与招聘流程管理。"
|
|
|
|
[i18n.zh-TW]
|
|
name = "招募 Agent"
|
|
description = "招募 Agent:篩選履歷、候選人接觸、撰寫 JD 與招募流程管理。"
|
|
|
|
[i18n.ja]
|
|
name = "リクルーター"
|
|
description = "履歴書スクリーニング、候補者アウトリーチ、求人票作成、採用パイプライン管理を行う。"
|
|
|
|
[i18n.ko]
|
|
name = "리크루터"
|
|
description = "이력서 스크리닝, 후보자 아웃리치, 채용 공고 작성, 채용 파이프라인 관리를 담당."
|
|
|
|
[i18n.de]
|
|
name = "Recruiter"
|
|
description = "Recruiting-Agent: Lebenslauf-Screening, Kandidatenansprache, Stellenausschreibungen und Pipeline-Management."
|
|
|
|
[i18n.es]
|
|
name = "Reclutador"
|
|
description = "Agente de reclutamiento: criba de CVs, contacto con candidatos, redacción de ofertas y gestión del pipeline."
|
|
|
|
[i18n.fr]
|
|
name = "Recruteur"
|
|
description = "Agent de recrutement : tri des CV, prise de contact, rédaction de fiches de poste et gestion du pipeline."
|