8811d45fd1
- Migrar admin a security/user-groups.yaml (admins group)
- agents.New() ahora acepta acl.ACL pre-resuelta como parámetro;
elimina construcción interna desde cfg.Security.Roles
- cmd/launcher: carga shellsecurity.Load("security/") al arranque;
si falla, WARN + política vacía (open access). Para cada agente
llama pksecurity.ResolveACL y pasa la ACL a agents.New()
- cmd/launcher/registry.go: stores secPolicy en launchDeps para
que reload() también resuelva ACL centralmente
- shell/matrix/listener.go: elimina invite gating y allowlist check
basados en AllowedUsers; el control de acceso lo hace el runtime
- internal/config/schema.go: depreca campos Roles y AllowedUsers
(backward compat, no eliminados)
- agents/*/config.yaml: elimina bloques security.roles y allowed_users
- dev/feature_flags.json: activa centralized-security-groups (enabled: true)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
291 lines
6.8 KiB
YAML
291 lines
6.8 KiB
YAML
# ============================================
|
|
# IDENTIDAD
|
|
# ============================================
|
|
agent:
|
|
id: assistant-bot
|
|
name: "Assistant"
|
|
version: "1.0.0"
|
|
enabled: true
|
|
description: "Asistente general con acceso a LLM. Responde preguntas, resume, redacta y ayuda con tareas cotidianas."
|
|
tags: [assistant, llm, general]
|
|
|
|
# ============================================
|
|
# PERSONALIDAD Y COMPORTAMIENTO
|
|
# ============================================
|
|
personality:
|
|
tone: friendly
|
|
verbosity: concise
|
|
language: es
|
|
languages_supported: [es, en]
|
|
emoji_style: minimal
|
|
prefix: "🤖"
|
|
error_style: helpful
|
|
|
|
templates:
|
|
greeting: "Hola, soy tu asistente. ¿En qué puedo ayudarte?"
|
|
unknown_command: "No entiendo ese comando. Escríbeme directamente lo que necesitas."
|
|
permission_denied: "No tengo permiso para hacer eso."
|
|
error: "Algo salió mal: {{.Error}}"
|
|
success: "{{.Summary}}"
|
|
busy: "Procesando tu solicitud anterior, dame un momento..."
|
|
|
|
behavior:
|
|
proactive: false
|
|
ask_confirmation: false
|
|
show_reasoning: false
|
|
thread_replies: true
|
|
typing_indicator: true
|
|
acknowledge_receipt: false # responde directo, sin "recibido"
|
|
|
|
# ============================================
|
|
# LLM — CONEXIÓN Y RAZONAMIENTO
|
|
# ============================================
|
|
llm:
|
|
primary:
|
|
provider: claude-code
|
|
model: ""
|
|
api_key_env: ""
|
|
base_url: ""
|
|
max_tokens: 4096
|
|
temperature: 0.7
|
|
claude_code:
|
|
binary: "claude"
|
|
timeout: 3m
|
|
disable_tools: true # no ejecuta herramientas internas de claude
|
|
allowed_tools: []
|
|
disallowed_tools: []
|
|
working_dir: "/tmp/claude-agents/assistant-bot"
|
|
permission_mode: "bypassPermissions"
|
|
model: "sonnet" # modelo interno de claude -p
|
|
fallback_model: ""
|
|
session_id: ""
|
|
add_dirs: []
|
|
|
|
# Fallback desactivado — solo claude-code
|
|
fallback:
|
|
provider: ""
|
|
model: ""
|
|
api_key_env: ""
|
|
base_url: ""
|
|
max_tokens: 0
|
|
temperature: 0
|
|
|
|
reasoning:
|
|
system_prompt_file: "prompts/assistant-system.md"
|
|
context_window: 16384
|
|
memory_messages: 30 # mantiene 30 mensajes de historia por room/DM
|
|
|
|
tool_use:
|
|
enabled: true
|
|
max_iterations: 5
|
|
parallel_calls: false
|
|
|
|
rate_limit:
|
|
requests_per_minute: 60
|
|
tokens_per_minute: 200000
|
|
concurrent_requests: 5
|
|
|
|
# ============================================
|
|
# TOOLS — deshabilitadas para este bot
|
|
# ============================================
|
|
tools:
|
|
ssh:
|
|
enabled: false
|
|
allowed_targets: []
|
|
forbidden_commands: []
|
|
timeout: 0s
|
|
max_concurrent: 0
|
|
require_confirmation: []
|
|
|
|
http:
|
|
enabled: false
|
|
allowed_domains: []
|
|
timeout: 0s
|
|
max_retries: 0
|
|
|
|
scripts:
|
|
enabled: false
|
|
scripts_dir: ""
|
|
allowed: []
|
|
timeout: 0s
|
|
sandbox: false
|
|
|
|
file_ops:
|
|
enabled: false
|
|
allowed_paths: []
|
|
read_only: true
|
|
|
|
mcp:
|
|
enabled: false
|
|
servers: []
|
|
expose:
|
|
port: 0
|
|
tools: []
|
|
|
|
memory:
|
|
enabled: false
|
|
|
|
knowledge:
|
|
enabled: true
|
|
|
|
# ============================================
|
|
# MEMORIA — ventana de conversación + hechos
|
|
# ============================================
|
|
memory:
|
|
enabled: false
|
|
window_size: 30
|
|
|
|
# ============================================
|
|
# MATRIX — CONEXIÓN Y ROOMS
|
|
# ============================================
|
|
matrix:
|
|
homeserver: "https://matrix-af2f3d.organic-machine.com"
|
|
user_id: "@assistant-bot:matrix-af2f3d.organic-machine.com"
|
|
access_token_env: MATRIX_TOKEN_ASSISTANT_BOT
|
|
device_id: "WXAKFKILMR"
|
|
|
|
encryption:
|
|
enabled: true
|
|
store_path: "./agents/assistant-bot/data/crypto/"
|
|
pickle_key_env: PICKLE_KEY_ASSISTANT_BOT
|
|
trust_mode: tofu
|
|
recovery_key_env: SSSS_RECOVERY_KEY_ASSISTANT_BOT
|
|
|
|
rooms:
|
|
listen: [] # vacío = escucha en todos los rooms donde está invitado
|
|
respond: [] # vacío = responde en todos
|
|
admin: []
|
|
|
|
filters:
|
|
command_prefix: "!"
|
|
mention_respond: true # responde cuando lo mencionan en un room
|
|
dm_respond: true # responde en DMs (modo principal por ahora)
|
|
ignore_bots: true
|
|
ignore_users: []
|
|
unauthorized_response: silent # silent | explicit
|
|
min_power_level: 0 # cualquiera puede hablar con el assistant
|
|
|
|
threads:
|
|
enabled: true # responder en threads cuando el mensaje viene de un thread
|
|
auto_thread: false # true para crear thread automático por cada conversación nueva
|
|
|
|
# ============================================
|
|
# COMUNICACIÓN INTER-AGENTES
|
|
# ============================================
|
|
agents:
|
|
peers: []
|
|
|
|
delegation:
|
|
enabled: false
|
|
can_delegate_to: []
|
|
can_receive_from: []
|
|
max_delegation_depth: 1
|
|
timeout: 30s
|
|
|
|
protocol:
|
|
format: json
|
|
channel: matrix
|
|
heartbeat_interval: 60s
|
|
|
|
# ============================================
|
|
# SSH — no aplica para este bot
|
|
# ============================================
|
|
ssh:
|
|
defaults:
|
|
user: ""
|
|
port: 22
|
|
key_file_env: ""
|
|
known_hosts: ""
|
|
keepalive_interval: 0s
|
|
timeout: 0s
|
|
targets: {}
|
|
|
|
# ============================================
|
|
# PERMISOS Y SEGURIDAD
|
|
# ============================================
|
|
security:
|
|
audit:
|
|
enabled: false
|
|
log_file: "./agents/assistant-bot/data/audit.log"
|
|
log_to_room: ""
|
|
include: []
|
|
|
|
secrets:
|
|
provider: env
|
|
|
|
# ============================================
|
|
# SCHEDULING — sin tareas automáticas
|
|
# ============================================
|
|
schedules: []
|
|
|
|
# ============================================
|
|
# OBSERVABILIDAD
|
|
# ============================================
|
|
observability:
|
|
logging:
|
|
level: info
|
|
format: json
|
|
output: stdout
|
|
file: "./agents/assistant-bot/data/assistant.log"
|
|
|
|
metrics:
|
|
enabled: false
|
|
port: 9091
|
|
path: /metrics
|
|
export: prometheus
|
|
|
|
health:
|
|
enabled: true
|
|
port: 8081
|
|
path: /healthz
|
|
|
|
tracing:
|
|
enabled: false
|
|
provider: ""
|
|
endpoint: ""
|
|
|
|
# ============================================
|
|
# RESILIENCIA
|
|
# ============================================
|
|
resilience:
|
|
circuit_breaker:
|
|
failure_threshold: 5
|
|
timeout: 30s
|
|
half_open_max: 2
|
|
|
|
retry:
|
|
max_attempts: 2
|
|
backoff: exponential
|
|
initial_delay: 1s
|
|
max_delay: 10s
|
|
|
|
shutdown:
|
|
timeout: 10s
|
|
drain_messages: true
|
|
save_state: false
|
|
state_file: ""
|
|
|
|
queue:
|
|
enabled: true
|
|
max_size: 100
|
|
priority_users: ["@admin:matrix-af2f3d.organic-machine.com"]
|
|
|
|
# ============================================
|
|
# ALMACENAMIENTO Y ESTADO
|
|
# ============================================
|
|
storage:
|
|
state:
|
|
backend: sqlite
|
|
path: "./agents/assistant-bot/data/assistant.db"
|
|
|
|
cache:
|
|
enabled: true
|
|
backend: memory
|
|
ttl: 5m
|
|
max_entries: 200
|
|
|
|
history:
|
|
backend: sqlite
|
|
path: "./agents/assistant-bot/data/history.db"
|
|
retention: 168h # 7 días
|