SysKnife
Administra Linux para agentes de IA mediante acciones tipadas y aprobadas, con un registro de auditoría firmado con Ed25519, nunca cadenas de shell sin procesar.
Documentación
SysKnife
El servidor MCP para administración de Linux. Planifica. Aprueba. Audita.
Distribuciones
Servidor MCP · Instalación · Cómo funciona · Por qué no X? · Matriz de distribuciones · Hoja de ruta · Contribuir · Discutir
Una reproducción determinista del flujo MCP de Claude Code en Ubuntu 24.04, renderizada sin conexión por
ubuntu-flow-mock.sh para que se reproduzca idénticamente desde un
checkout limpio. Cada nombre de acción, nivel de riesgo y comando mostrado es el que lleva el catálogo.
El mismo flujo funciona en Cursor y Codex CLI.
En un host atómico, el plan usa rpm-ostree en su lugar:
la grabación de Fedora Atomic.
¿Buscas la CLI independiente? Consulta la guía de CLI.
Describe lo que quieres en lenguaje natural. Revisa un plan tipado con niveles de riesgo. Aprueba explícitamente. Observa cómo se ejecuta con salida en vivo. Los cambios en hosts atómicos (rpm-ostree) se revierten automáticamente ante fallos. Cada acción está firmada con Ed25519 y auditada.
La IA nunca proporciona un comando. Cada acción es una operación tipada con un
nivel de riesgo formal, y el daemon construye la línea de comandos por sí mismo a partir de la
definición de la propia acción — algunas acciones sí pasan por sh -c, pero el fragmento
de shell lo construye SysKnife, nunca el modelo. La IA no puede tocar tu sistema
directamente. Un daemon privilegiado ejecuta solo lo que apruebas, escribe
una cadena de auditoría firmada con Ed25519 a prueba de manipulaciones y revierte los cambios
de hosts atómicos (rpm-ostree) automáticamente ante fallos.
¿Por qué acciones tipadas y no un shell protegido? La investigación de red team (GuardFall) encontró que 10 de 11 agentes de IA evaden las protecciones de shell de cadena cruda — una lista blanca o una regex está filtrando un lenguaje lo bastante rico como para ocultar intenciones. SysKnife elimina la cadena de shell por completo: el modelo emite acciones tipadas, y una cadena de auditoría verificable por clave pública registra cada una.
Servidor MCP
SysKnife es un servidor MCP ante todo. Apunta Claude Code, Cursor o Codex CLI hacia él y tu asistente obtiene herramientas de administración tipadas y clasificadas por riesgo en lugar de un shell:
| Herramienta | Qué hace |
|---|---|
sysknife_plan | Convierte lenguaje natural en pasos tipados, cada uno con nivel de riesgo, comando resuelto e ID de transacción del daemon |
sysknife_execute | Ejecuta pasos que llevan un recibo de un solo uso, y nada más |
sysknife_history | Lee ejecuciones pasadas del registro de auditoría firmado |
sysknife_doctor | Informa sobre la salud del daemon, el proveedor y la cadena de auditoría |
sysknife_audit_verify | Recorre la cadena Ed25519 y dice si está intacta |
sysknife_get_disk_usage, y el resto del catálogo de solo lectura | Consultas directas, seleccionadas para la distribución en la que estás |
npx sysknife-setup
Un comando conecta el servidor a tu cliente e instala el daemon. Instalación tiene el detalle, y protocolo MCP tiene el comportamiento de red.
Tu asistente no puede aprobar su propio trabajo. sysknife_plan devuelve un
ID de transacción y se detiene ahí. El recibo sysknife_execute que exige
proviene de sysknife approve <transaction-id>, escrito en tu terminal, en un canal
en el que el modelo no está presente. Los recibos faltantes, caducados, no coincidentes y reproducidos
se rechazan todos.
¿Prefieres quedarte en el shell? La CLI es el mismo motor sin ningún cliente delante.
Instalación
El camino más rápido es el asistente de configuración. Instala el daemon y conecta SysKnife a tu IDE de IA — Claude Code, Cursor o Codex CLI — para que puedas planificar y ejecutar desde el chat.
npx sysknife-setup
Necesita Node 22 o más reciente; las versiones antiguas de Node ya no reciben correcciones de seguridad.
En Ubuntu 22.04 apt install nodejs da Node 12, que es demasiado antiguo; el instalador
lo indica y explica cómo obtener un Node actual. Sin cadena de herramientas Rust
y sin compilación: descarga binarios precompilados verificados.
Qué hace esto:
-
Descarga los binarios precompilados de
sysknife+sysknife-daemonpara tu arquitectura (x86_64 / aarch64) desde GitHub Releases, verifica SHA-256 cada uno contra el archivo de suma de verificación de la versión — una discrepancia aborta la instalación — y los coloca en~/.local/bin(sin sudo). Pasa--no-binarypara omitir la descarga y compilar desde el código fuente en su lugar. -
Pregunta por tu proveedor de LLM, clave y modelo — OpenAI / Anthropic / Gemini / Ollama / Groq / DeepSeek / Mistral / xAI (Ollama no necesita clave). El prompt de clave se omite cuando la variable de entorno correspondiente ya está configurada.
-
Pregunta qué integración de IA conectar (o elige
--claude/--cursor/--codex/--all) y tus destinos de daemon — socket, más un token vsock opcional para una VM remota. -
Escribe la configuración MCP específica de la integración (fusionando con cualquier archivo existente, nunca sobrescribiendo) para que la próxima sesión de chat vea las herramientas
sysknife_*—sysknife_plan,sysknife_execute,sysknife_history,sysknife_doctor,sysknife_audit_verify, y consultas directas de solo lectura compatibles con la distribución comosysknife_get_disk_usage— como herramientas de primera clase. -
Instala y arranca el daemon como servicio (último paso) — un servicio de usuario systemd por defecto (sin sudo; se mantiene vivo tras cerrar sesión mediante linger). Ese servicio se ejecuta como tú, por lo que las acciones de solo lectura funcionan pero las mutables no: instalar paquetes o reiniciar servicios necesita el servicio a nivel de sistema, cuyos permisos de sudoers pertenecen al usuario de sistema
sysknife. Elige el servicio de sistema en cualquier host donde pretendas cambiar algo, y pasa--daemon-mode=system|user|skippara elegir sin prompt.--daemon-mode=systemno instala el servicio de sistema desde el asistente — necesita sudoers propiedad de root, políticas polkit y helpers privilegiados quesudo make installposee — por lo que imprime la secuencia exacta e informa del daemon como aún no instalado.Para verificar la descarga contra una lista de sumas de verificación en la que confíes independientemente de la versión, configura
SYSKNIFE_PINNED_SHA256SUMS=/path/to/sums; consulta SECURITY.md.
| Cliente | Archivos escritos |
|---|---|
| Claude Code | .mcp.json + .claude/hookify.*.local.md |
| Cursor | .cursor/mcp.json + .cursor/rules/sysknife.mdc |
| Codex CLI | ~/.codex/config.toml (añadido) + AGENTS.md |
Luego en tu chat: pide lo que quieras y revisa el plan con las píldoras de riesgo.
Aprueba cada transacción con sysknife approve <transaction-id> en una
terminal, devuelve los recibos de un solo uso y observa cómo se ejecuta. El daemon, no
el prompt, aplica el límite del recibo.
¿Prefieres la CLI independiente? Mismo motor, sin IDE — consulta la guía de CLI para
sysknife "...",--dry-run,--json, prompts de aprobación e inspección del registro de auditoría.
Instalación manual — Ubuntu 20.04+
Necesita Rust estable y un compilador de C (build-essential): las dependencias de TLS
y SQLite compilan código nativo, por lo que una máquina solo con rustup se detiene en
error: linker cc not found. cmake no es necesario. Presupuesta de 7 a 12
minutos para la compilación de ~400 crates (6m56s en Ubuntu 24.04, 11m43s en 22.04).
sudo apt-get install -y build-essential
git clone https://github.com/lacs-project/sysknife
cd sysknife
make build # builds sysknife (CLI) + sysknife-daemon
sudo make install # installs both; daemon runs as a system service
sudo systemctl enable --now sysknife-daemon
# Join the socket group and one role group, or every request is refused with
# "Permission denied" before any role check runs: /run/sysknife is 0750
# sysknife:sysknife, and a sudo admin is not in that group automatically.
# Role groups: sysknife-observer (read-only), sysknife-dev (medium risk),
# sysknife-admin (high risk). Members of wheel are treated as admin.
sudo usermod -aG sysknife,sysknife-admin "$USER"
newgrp sysknife # or log out and back in
# Then wire your IDE — --no-binary skips the download since you just built them
# (--daemon-mode=skip: make install already set the service up)
npx sysknife-setup --no-binary --daemon-mode=skip
Desinstalación
Sea cual sea la forma en que instalaste, hay un comando para ello.
# Removes the user service, the binaries in ~/.local/bin, and the Claude Code
# MCP + agent config in the current directory. A Cursor or Codex install also
# wrote .cursor/ and ~/.codex/config.toml, and those are left in place (#526).
npx sysknife-setup --uninstall
# See exactly what that would touch, without touching it.
npx sysknife-setup --uninstall --dry-run
Tu historial de auditoría se conserva por defecto. Eliminar el software no debería
destruir el registro de lo que hizo, por lo que la base de datos de auditoría, el registro de auditoría de seguridad
y ~/.config/sysknife se dejan en su lugar y se imprimen sus rutas. Bórralos
también, solo si realmente quieres, con:
npx sysknife-setup --uninstall --purge # names each file before deleting it
Si instalaste el servicio de sistema con sudo make install, elimínalo con
el Makefile que posee sus permisos de sudoers, reglas polkit y helpers privilegiados.
--uninstall deliberadamente no tocará esos, porque media frontera de privilegios
eliminada es peor que ninguna:
sudo make uninstall
Las tres versiones LTS de Ubuntu registran una ejecución en VM en vivo de la suite de 79 historias de Ubuntu,
y cada ejecución tiene un gemelo de reproducción que la reproduce: 22.04, 24.04 y 26.04
todas en 79/79, cada gemelo sirviendo cada llamada con cero fallos. Las ejecuciones están en
tests/evidence/story-runs/. La suite creció desde 50 cuando cada acción solo de Debian
recibió una historia, GetHostState primero.
Fedora Atomic es el objetivo de rpm-ostree; registra una ejecución actual de VM de Silverblue 44
antes de tratar una versión como validada actualmente. Fedora Workstation y Server
siguen siendo experimentales hasta que la familia de acciones dnf se publique. Consulta el
distro support matrix para evidencia y alcance.
Prueba en seco — solo plan, nada se ejecuta
# Requires the sysknife binary (see manual install above, or `npx sysknife-setup`).
# Plans only: no daemon, no approval, no execution.
export ANTHROPIC_API_KEY=sk-ant-...
sysknife --dry-run "show disk usage and list services that ate cpu in the last hour"
¿Prefieres la terminal? La CLI es una vía de primera clase
Mismo motor, sin IDE y sin cliente MCP — lenguaje natural a un plan tipado a ejecución
en vivo, directamente desde tu shell, con --dry-run, --json, --yes hasta un
techo de riesgo, y sysknife audit verify. Esta es una forma totalmente compatible de ejecutar
SysKnife, no una idea secundaria. Consulta la guía de CLI.
Una reproducción determinista de una sesión real de planificación y ejecución, renderizada sin conexión por demo-mock.sh. Las llamadas LLM en vivo son no deterministas y la cinta tiene que renderizarse sin daemon ni proveedor configurados, por lo que la grabación está escrita con guion en lugar de capturada; el estilo de salida se genera desde las mismas rutas de código que la CLI real.
También: una GUI de escritorio — desarrollo en pausa. Una aplicación de escritorio Tauri experimental (
sysknife-shell) envuelve el mismo bucle plan → aprueba → ejecuta en una ventana. Su desarrollo está en pausa por ahora, y el esfuerzo se dirige a Ubuntu en sus versiones compatibles en su lugar. El código permanece en el árbol y aún compila, pero no se revisa, prueba ni amplía, así que úsalo solo si quieres específicamente un flujo de aprobación gráfico y puedes vivir con eso. La integración MCP y la CLI son las superficies mantenidas.
Cómo funciona
sysknife-brain → approval gate → sysknife-daemon
(planner) (you, in a (executor)
talks to LLM terminal) only privileged
never to OS shows the plan, process; signs
takes y/n every action
La puerta de aprobación es una superficie, no un componente. En las rutas mantenidas es
sysknife approve <transaction-id> en tu terminal — tanto para la CLI como para MCP
por igual, que es por lo que un cliente de IA no puede aprobar su propio plan. La GUI
Tauri en pausa (sysknife-shell) es una tercera implementación de esa misma puerta, no un paso
por el que pasan las otras dos.
- Escribes una solicitud en lenguaje natural.
- El cerebro propone un plan — cada paso es una acción tipada con
un nivel de riesgo (
Low·Medium·High). - El shell muestra el plan con vistas previas, efectos secundarios y metadatos de reversión.
- Apruebas cada paso explícitamente (o configuras
--yeshasta un límite de riesgo). - El daemon ejecuta, transmite la salida en vivo y revierte automáticamente los cambios de host atómico (rpm-ostree) en caso de fallo.
- Cada ejecución se registra en un rastro de auditoría encadenado por hash en SQLite o Postgres
que puedes verificar con
sysknife audit verify.
El cerebro propone; solo el daemon tiene privilegios. El daemon aplica políticas, ejecuta acciones tipadas, escribe la cadena firmada y activa la reversión del host atómico (rpm-ostree) en caso de fallo. El límite de confianza es mecánico: no cruzan cadenas de shell por el cable.
¿Por qué no simplemente X?
| Herramienta | La brecha |
|---|---|
| Open Interpreter | Ejecuta Python/Shell arbitrario. Sin modelo de riesgo formal. Sin cadena de auditoría. |
| Goose / Continue | De propósito general. Confirmación ad hoc, no niveles de riesgo tipados. |
| Claude Computer Use | Automatización de escritorio no controlada, no administración de sistemas. |
| Ansible | YAML escrito con antelación. No conversacional. Sin clasificación de riesgo. |
| shell-gpt / Copilot | Sugiere comandos de shell crudos. Tú aún ejecutas shell crudo. |
| AIShell-Gate | El par más cercano, pero propietario y cerrado; la auditoría es HMAC simétrica (el verificador posee el secreto de firma, por lo que una prueba no convence a nadie más). Sin reversión. |
| Manual | Sin rastro de auditoría. Sin reversión. Un error tipográfico = trabajo perdido. |
SysKnife es diferente por construcción: acciones tipadas, una cadena de auditoría firmada con Ed25519, puerta de aprobación explícita, reversión automática para cambios de host atómico (rpm-ostree), un límite de privilegios por acción en sudo y polkit. La IA nunca tiene un shell. Consulta el desglose completo de SysKnife vs. alternativas (AIShell-Gate, gate-oc-audit, puertas de enlace MCP, mcp-shell genérico).
Estado
La cadena de confianza está construida, probada y en producción. La compatibilidad multi-distribución es el hito activo.
| Componente | Estado |
|---|---|
sysknife-brain — planificador LLM, bucle de herramientas, valla de seguridad | ✅ |
sysknife-daemon — 192 acciones tipadas, autenticación, vista previa, transacciones | ✅ |
| IPC en vivo + transmisión + reversión de host atómico (rpm-ostree) | ✅ |
| Puerta de aprobación en terminal — recibos de un solo uso con límite TTL | ✅ |
| Servidor MCP (Claude Code / Cursor / cualquier cliente MCP) | ✅ |
| Cadena de auditoría firmada con Ed25519 a prueba de manipulación | ✅ |
| Reenvío de syslog RFC 5424 (Splunk / Sentinel / QRadar) | ✅ |
| Backend Postgres (RDS / Cloud SQL / Neon / Supabase) | ✅ |
Soporte Ubuntu — 79/79 historias en una VM 22.04 en vivo, registradas en tests/evidence/story-runs/ | ✅ |
| Cada Ubuntu LTS validado — 22.04, 24.04 y 26.04 todos en 79/79, cada uno con un gemelo de reproducción que lo replica | ✅ |
| Interfaz de aprobación por Telegram | 📋 hoja de ruta |
1,927 pruebas de Rust y 72 pruebas de frontend forman la línea base determinista de la versión actual.
Configura tu LLM
SysKnife funciona con Ollama (sin clave, recomendado para privacidad / sin conexión / homelab) o OpenAI, Anthropic, Gemini, Groq, DeepSeek, Mistral, xAI.
# ~/.config/sysknife/config.toml
[llm]
provider = "ollama" # or anthropic / openai / gemini / groq / ...
model = "qwen3:8b" # provider-specific
ollama_url = "http://localhost:11434"
max_turns = 10
[daemon]
socket = "/run/sysknife/daemon.sock"
database = "/var/lib/sysknife/daemon.sqlite"
[storage] # production-recommended
backend = "postgres"
url = "postgres://sysknife:${PG_PASSWORD}@db.example.com/audit?sslmode=verify-full"
Las variables de entorno siempre tienen prioridad sobre el archivo de configuración.
Referencia completa en docs/configuration.md.
Protocolo MCP
SysKnife implementa el Model Context Protocol
y expone herramientas de planificación y ejecución con puerta de aprobación. sysknife_plan
devuelve un ID de transacción emitido por el daemon para cada paso. Después de revisar el
plan, el usuario ejecuta sysknife approve <transaction-id> en una terminal real y
entrega el recibo de un solo uso al agente. sysknife_execute rechaza recibos
faltantes, caducados, no coincidentes o reproducidos. El servidor MCP no puede emitir
recibos de aprobación por sí mismo.
Usa el asistente de configuración (arriba) para conectarlo a Claude Code, Cursor o Codex CLI.
Todos los archivos de configuración que puedan contener claves de API se crean con chmod 0600.
Hoja de ruta
Consulta ROADMAP.md para el desglose completo de hitos.
- ✅ Ubuntu 22.04 — 79/79 historias en una VM en vivo (registradas en
tests/evidence/story-runs/) - ✅ Ubuntu 24.04 y 26.04 — 79/79 y 79/79 en VMs en vivo; cada ejecución LTS tiene un gemelo de reproducción que la replica
- ✅
sysknife audit export— filas de cadena firmada almacenadas como JSON con--since/--limit - 📋 Aprobaciones por botones en línea de Telegram
- 📋 Modos de salida CEF / NDJSON para ingesta SIEM
- 📋 Plan/ejecución de flota (un plan, N objetivos, aprobación paralela)
Protocolo
SysKnife es la implementación de referencia del protocolo LACS (Linux Agent Control Standard) — acciones tipadas, clasificación de riesgo, puertas de aprobación, requisitos de auditoría. La especificación es CC0 (dominio público):
Se fomentan explícitamente otras implementaciones para otras distribuciones e idiomas.
Contribuciones
Queremos ayuda. Multi-distribución es el área de mayor impacto para conectar
ahora mismo — consulta docs/distro-support.md para la
matriz de la hoja de ruta y CONTRIBUTING.md para el flujo de trabajo.
Los problemas etiquetados como
good first issue
están definidos con criterios de aceptación claros.
Agradecimientos
Parches hasta ahora de @ITSMERNB, @QinXi-ai, @Osheun, @danial-razi, @vsolano9 y @Georgefifth. Cada versión nombra quién arregló qué en CHANGELOG.md.
Si envías un parche, seguir
Releases es la forma más rápida
de verlo publicado y de detectar nuevas entradas de good first issue a medida que llegan. Una estrella
ayuda a que otras personas encuentren el proyecto.
Documentación
- Acciones tipadas — por qué nunca una cadena de shell
- Referencia de acciones — cada acción, generada desde el código
- La cadena de auditoría — Ed25519, verificable con clave pública
- Reversión automática
- SysKnife vs. alternativas
- Descripción general de la arquitectura
- Matriz de soporte de distribuciones
- Configuración
- Almacenamiento y recuperación de auditoría
- Guía para desarrolladores
- Guía de pruebas
- Configuración del daemon en VM
- Política de seguridad
- Lista de verificación de preparación para publicación
- Hoja de ruta
- ADR 0001 — Límites del sistema
- ADR 0002 — Capa de proveedor del cerebro
- ADR 0003 — Protocolo de cable IPC
Dónde encontrar SysKnife
| Canal | Instalación | Notas |
|---|---|---|
| npm | npx sysknife-setup | npmjs.com/package/sysknife-setup — asistente de configuración; requiere Node 22+, sin compilación |
| crates.io | cargo install sysknife-cli / cargo install sysknife-daemon | Requiere build-essential; compilación de ~7-12 min. Publicado por etiquetas de versión revisadas; consulta docs/release.md |
| Registro MCP | io.github.lacs-project/sysknife | registry.modelcontextprotocol.io — resuelve a la instalación de crates.io anterior. Las páginas de directorio que aíslan un servidor enumeran cada herramienta pero no pueden llamar a las que necesitan el daemon; docs/mcp-registry.md explica la división |
| GitHub Releases | Descarga desde Releases | Binarios precompilados x86_64 + aarch64 con sumas de verificación SHA-256 en cada etiqueta |
Licencia
MIT. Libre de usar, modificar, distribuir e incrustar en productos propietarios sin restricción.
La especificación LACS es CC0 1.0 — dominio público.
Construido por Vladimir Rotariu. · Problemas, ideas, historias de guerra — ven a saludar.