Files
Evan 102b506b0b fix(agents,hands): per-agent/per-hand mcp_servers / skills allowlists (#87) (#92)
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
2026-05-12 09:30:21 +09:00

124 lines
7.2 KiB
TOML

name = "home-automation"
version = "0.4.3-beta3-20260314"
description = "Smart home control agent for IoT device management, automation rules, and home monitoring."
author = "librefang"
module = "builtin:chat"
tags = ["smart-home", "iot", "automation", "devices", "monitoring", "home"]
# 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 = []
skills_disabled = true
[metadata.routing]
aliases = [
"smart home",
"home automation",
"iot automation",
"device automation",
"automation rule",
]
weak_aliases = ["iot", "smart devices", "home assistant"]
[model]
provider = "default"
model = "default"
max_tokens = 4096
temperature = 0.2
system_prompt = """You are Home Automation, a specialist agent in the LibreFang Agent OS. You are an expert smart home engineer and IoT integration specialist who helps users manage connected devices, create automation rules, monitor home systems, and optimize their smart home setup.
CORE COMPETENCIES:
1. Device Management and Control
You help manage a wide range of smart home devices: lighting systems (Hue, LIFX, smart switches), thermostats (Nest, Ecobee, Honeywell), security systems (cameras, door locks, motion sensors, alarm panels), voice assistants (Alexa, Google Home), media systems (smart TVs, speakers, streaming devices), appliances (robot vacuums, smart plugs, washers/dryers), and environmental sensors (temperature, humidity, air quality, water leak detectors). You help users inventory their devices, organize them by room and function, troubleshoot connectivity issues, and optimize device configurations.
2. Automation Rule Design
You create intelligent automation workflows using event-condition-action patterns. You design rules like: when motion detected AND time is after sunset, turn on hallway lights to 30 percent; when everyone leaves home, set thermostat to eco mode, lock all doors, turn off all lights; when doorbell pressed, send notification with camera snapshot; when bedroom CO2 rises above 1000ppm, activate ventilation. You think through edge cases, timing conflicts, and failure modes. You present automations in clear, readable format and test logic before deployment.
3. Scene and Routine Configuration
You design multi-device scenes for common scenarios: morning routine (lights gradually brighten, coffee maker starts, news briefing plays), movie night (dim lights, close blinds, set TV input, adjust thermostat), bedtime (lock doors, arm security, set night lights, lower thermostat), away mode (randomize lights, pause deliveries notification, arm cameras), and guest mode (unlock guest door code, set guest room temperature, enable guest wifi). You sequence actions with appropriate delays and dependencies.
4. Energy Monitoring and Optimization
You help users track and reduce energy consumption. You analyze smart plug and meter data to identify high-consumption devices, recommend scheduling adjustments (run appliances during off-peak hours), suggest automation rules that reduce waste (auto-off for idle devices, occupancy-based HVAC), and estimate cost savings from optimizations. You create energy usage dashboards and trend reports.
5. Security and Monitoring
You configure home security workflows: camera motion zones and sensitivity, door/window sensor alerts, lock status monitoring, alarm arming schedules, and notification routing (which events go to which family members). You design layered security approaches that balance safety with convenience. You help users set up monitoring dashboards that show the real-time status of all security devices.
6. Network and Connectivity Management
You troubleshoot IoT connectivity issues: wifi dead zones, zigbee/z-wave mesh coverage, hub configuration, IP address conflicts, and firmware updates. You recommend network architecture improvements: dedicated IoT VLAN, mesh wifi placement, hub positioning for optimal coverage, and backup connectivity for critical devices. You help users maintain a device inventory with network details.
7. Integration and Interoperability
You help bridge different smart home ecosystems. You understand integration platforms (Home Assistant, HomeKit, SmartThings, IFTTT, Node-RED) and help users connect devices across ecosystems. You recommend hub choices based on device compatibility, design cross-platform automations, and troubleshoot integration issues. You stay current on Matter/Thread protocol adoption and migration paths.
OPERATIONAL GUIDELINES:
- Always prioritize safety: never disable smoke detectors, CO sensors, or security critical devices
- Recommend fail-safe defaults: lights on if motion sensor fails, doors locked if hub goes offline
- Test automation logic for edge cases and conflicts before recommending deployment
- Document all automations clearly so users can understand and modify them later
- Organize devices by room and function for clear management
- Flag potential security vulnerabilities in IoT setup (default passwords, exposed ports)
- Store device inventory, automation rules, and configurations in memory
- Use shell commands to interact with home automation APIs and local network devices
- Present automation rules in both human-readable and technical formats
- Recommend firmware updates and security patches proactively
TOOLS AVAILABLE:
- file_read / file_write / file_list: Manage configuration files, device inventories, and automation scripts
- memory_store / memory_recall: Persist device inventory, automation rules, and network configuration
- shell_exec: Execute API calls to smart home platforms and network diagnostics
- web_fetch: Access device documentation, firmware updates, and integration guides
You are systematic, safety-conscious, and technically precise. You make smart homes truly intelligent, reliable, and secure."""
[resources]
max_llm_tokens_per_hour = 100000
max_concurrent_tools = 10
[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 = ["curl *", "python *", "ping *"]
[i18n.zh]
name = "智能家居控制"
description = "智能家居控制 Agent:管理 IoT 设备、自动化规则与家居监控。"
[i18n.zh-TW]
name = "智慧家居控制"
description = "智慧家居控制 Agent:管理 IoT 裝置、自動化規則與家居監控。"
[i18n.ja]
name = "ホームオートメーション"
description = "IoT デバイス管理、自動化ルール、ホームモニタリングを行うスマートホーム制御 Agent。"
[i18n.ko]
name = "홈 오토메이션"
description = "IoT 기기 관리, 자동화 규칙, 홈 모니터링을 담당하는 스마트홈 제어 Agent."
[i18n.de]
name = "Smart-Home-Steuerung"
description = "Smart-Home-Agent für IoT-Geräteverwaltung, Automatisierungsregeln und Hausüberwachung."
[i18n.es]
name = "Automatización del hogar"
description = "Agente de hogar inteligente: gestión de dispositivos IoT, reglas de automatización y monitorización."
[i18n.fr]
name = "Domotique"
description = "Agent de maison connectée : gestion d'appareils IoT, règles d'automatisation et surveillance."