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

SysKnife

El servidor MCP para administración de Linux. Planifica. Aprueba. Audita.

CI License Stars Issues Discussions npm version Glama MCP server quality score

Distribuciones  Ubuntu 20.04 and later supported Ubuntu 22.04, 24.04 and 26.04 VM validated Fedora Atomic 41 and later eligible but not VM validated

Servidor MCP · Instalación · Cómo funciona · Por qué no X? · Matriz de distribuciones · Hoja de ruta · Contribuir · Discutir

SysKnife in Claude Code via MCP on Ubuntu 24.04: UfwAllow, AptInstall and UfwStatus through terminal-issued receipts

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:

HerramientaQué hace
sysknife_planConvierte lenguaje natural en pasos tipados, cada uno con nivel de riesgo, comando resuelto e ID de transacción del daemon
sysknife_executeEjecuta pasos que llevan un recibo de un solo uso, y nada más
sysknife_historyLee ejecuciones pasadas del registro de auditoría firmado
sysknife_doctorInforma sobre la salud del daemon, el proveedor y la cadena de auditoría
sysknife_audit_verifyRecorre la cadena Ed25519 y dice si está intacta
sysknife_get_disk_usage, y el resto del catálogo de solo lecturaConsultas 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.

npm version

Qué hace esto:

  1. Descarga los binarios precompilados de sysknife + sysknife-daemon para 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-binary para omitir la descarga y compilar desde el código fuente en su lugar.

  2. 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.

  3. 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.

  4. 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 como sysknife_get_disk_usage — como herramientas de primera clase.

  5. 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|skip para elegir sin prompt. --daemon-mode=system no instala el servicio de sistema desde el asistente — necesita sudoers propiedad de root, políticas polkit y helpers privilegiados que sudo make install posee — 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.

ClienteArchivos 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.

sysknife CLI — plan, approve, and execute in the terminal

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.

  1. Escribes una solicitud en lenguaje natural.
  2. El cerebro propone un plan — cada paso es una acción tipada con un nivel de riesgo (Low · Medium · High).
  3. El shell muestra el plan con vistas previas, efectos secundarios y metadatos de reversión.
  4. Apruebas cada paso explícitamente (o configuras --yes hasta un límite de riesgo).
  5. El daemon ejecuta, transmite la salida en vivo y revierte automáticamente los cambios de host atómico (rpm-ostree) en caso de fallo.
  6. 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?

HerramientaLa brecha
Open InterpreterEjecuta Python/Shell arbitrario. Sin modelo de riesgo formal. Sin cadena de auditoría.
Goose / ContinueDe propósito general. Confirmación ad hoc, no niveles de riesgo tipados.
Claude Computer UseAutomatización de escritorio no controlada, no administración de sistemas.
AnsibleYAML escrito con antelación. No conversacional. Sin clasificación de riesgo.
shell-gpt / CopilotSugiere comandos de shell crudos. Tú aún ejecutas shell crudo.
AIShell-GateEl 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.
ManualSin 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.

ComponenteEstado
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):

→ lacs-project/specification

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

Dónde encontrar SysKnife

CanalInstalaciónNotas
npmnpx sysknife-setupnpmjs.com/package/sysknife-setup — asistente de configuración; requiere Node 22+, sin compilación
crates.iocargo install sysknife-cli / cargo install sysknife-daemonRequiere build-essential; compilación de ~7-12 min. Publicado por etiquetas de versión revisadas; consulta docs/release.md
Registro MCPio.github.lacs-project/syskniferegistry.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 ReleasesDescarga desde ReleasesBinarios 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.