[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-93309":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":8,"htmlUrl":8,"language":9,"languages":8,"totalLinesOfCode":8,"stars":10,"forks":11,"watchers":12,"openIssues":11,"contributorsCount":11,"subscribersCount":11,"size":11,"stars1d":11,"stars7d":11,"stars30d":11,"stars90d":11,"forks30d":11,"starsTrendScore":11,"compositeScore":13,"rankGlobal":8,"rankLanguage":8,"license":8,"archived":14,"fork":14,"defaultBranch":15,"hasWiki":16,"hasPages":14,"topics":17,"createdAt":8,"pushedAt":8,"updatedAt":18,"readmeContent":19,"aiSummary":20,"trendingCount":11,"starSnapshotCount":11,"syncStatus":21,"lastSyncTime":22,"discoverSource":23},93309,"aegil","pro-deploy\u002Faegil","pro-deploy",null,"Python",111,0,178,34,false,"main",true,[],"2026-07-22 04:02:08","# Aegil\n\n> **English** | [Русский](README.ru.md)\n\nAn autonomous Site Reliability Engineering (SRE) and DevOps agent for Kubernetes with\ndeterministic log analysis. The product connects to any cluster and to logging and monitoring\nsystems, observes state on its own, diagnoses problems from facts and remediates infrastructure\nissues, while the operator talks to it through an ordinary natural-language chat. The language\nmodel acts through real tools (cluster commands and node commands), but operates within\ndeterministic bounds: a command-danger classifier, guards against looping, confirmation for\nirreversible actions, and a full audit trail.\n\nThe product was carved out as a standalone offering from an audio-processing platform where it\ngrew (decisions ADR-0032 logging and RCA, ADR-0033 the panel, ADR-0037\u002F0038 the autonomous agent,\nADR-0041 the command executor and node-agent, see docs\u002Fadr). The extraction boundary is described\nin docs\u002FBOUNDARY.md.\n\n## What it does\n\nIt observes the cluster (pods, nodes, events), the nodes (disks, processor, memory, processes via\nthe privileged node-agent), the logs (Loki) and the traces (Tempo, optional). The deterministic\nRoot Cause Analysis (RCA) pipeline normalizes logs, aggregates facts in a single pass, runs a\ncatalog of detectors, computes confidence and assembles a verdict with an evidence registry in\nwhich every assertion rests on a verbatim quote from a log line. A lightweight trained SetFit\nclassifier routes requests and is further trained on the hard cases escalated to the large model\n(active learning). Incidents are stored permanently with an explicit lifecycle. The chat agent\nunderstands an arbitrary request, inspects and repairs on its own, and explains every step.\n\n## Components\n\nThe product is four images plus an optional observability stack.\n\n`services\u002Fnode-agent` is a privileged DaemonSet that executes commands on node hosts through\nnsenter strictly as an argument list without a shell, is closed off by a token, and is not\npublished externally. It gives the agent root on the nodes for disk cleanup, process inspection\nand memory inspection.\n\n`services\u002Fagent-panel` is a FastAPI panel: the chat interface, the agentic tool-use loop\n(agent_exec), the deterministic policy classifier (policy), the anti-looping guards (guards), the\nincident center (incidents), the cluster client (k8s), the status summaries (status), and the\nalert catalog and autopilot (alerts, autopilot). Clients of external systems are separated into\nllm.py and rca_client.py, and the application actions of the target application into the optional\napp_adapter.py.\n\n`services\u002Frca` is the deterministic log-analysis service: normalization, aggregator, detectors,\nscoring, verdict, and the routing cascade with active learning.\n\n`services\u002Frca-trainer` is a CronJob that further trains the SetFit classifier on accumulated\nexamples and uploads the model to object storage.\n\nThe observability stack (Loki, Alloy, Tempo, OpenTelemetry Collector, Grafana) in deploy\u002Fk8s is\noptional: if you already have Loki and Grafana, connect the product to them rather than deploying\nyour own.\n\n## What it connects to\n\nKubernetes (in-cluster service account or kubeconfig), a Loki log store (query_range), a language\nmodel over a compatible protocol (vLLM, Ollama or another proxy that returns text on\nPOST \u002Fcompletion), optionally Tempo and OpenTelemetry for traces, and object storage for the\ntrained model. Everything is set through environment variables, see .env.example.\n\n## Autonomy model and safety\n\nBy default the agent runs in a dry run: it observes and escalates but does not act until\nAGENT_AUTONOMOUS is enabled. In autonomous mode, reads and safe repairs (restarting services from\nthe allowlist, cleaning up a node, returning tasks to the queue) run immediately, while finance\nand destructive actions (deleting data, dropping tables, tearing down volumes) always require\noperator confirmation. The class of every command is decided by the deterministic classifier in\npolicy.py outside the model, so the model cannot bypass confirmation, and an unknown mutating\ncommand is treated as dangerous. Guards limit the rate of actions, impose cooldowns, trip a\ncircuit breaker after a streak of failures, and an oscillation detector blocks cross pairs. Every\nexecution is written to the audit trail. There is a manual mode in which the agent gathers facts\nand proposes options, and the operator picks one or supplies their own command.\n\n## Deployment\n\nBuild and publish the images (set REGISTRY):\n\n```bash\nREGISTRY=registry.example.com:5000 deploy\u002Fbuild.sh\n```\n\nIn deploy\u002Fk8s\u002F*.yaml replace the REGISTRY_PLACEHOLDER placeholder with your registry, and check\nthe namespace, the storage class and the node-role label against your cluster (the manifests were\ncarried over from the original platform and need review). Create the panel and node-agent secrets:\n\n```bash\nkubectl -n aegil create secret generic panel-secrets \\\n  --from-literal=PANEL_OPERATORS=\"admin:$(openssl rand -hex 24)\"\nTOK=$(openssl rand -hex 24)\nkubectl -n aegil create secret generic nodeagent-secrets --from-literal=NODEAGENT_TOKEN=\"$TOK\"\nkubectl -n aegil patch secret panel-secrets --type merge \\\n  -p \"{\\\"stringData\\\":{\\\"NODEAGENT_TOKEN\\\":\\\"$TOK\\\"}}\"\nkubectl apply -f deploy\u002Fk8s\u002F\n```\n\nThe panel is not exposed externally. Access it through a tunnel:\n\n```bash\nkubectl -n aegil port-forward svc\u002Fagent-panel 9109:9109\n```\n\nand open http:\u002F\u002F127.0.0.1:9109 in a browser, logging in with an operator token.\n\n## Tests\n\nAll components are covered by tests that need no network and no external dependencies:\n\n```bash\ncd services\u002Fagent-panel && for t in test_*.py; do python3 \"$t\"; done\ncd ..\u002Frca && for t in test_*.py; do python3 \"$t\"; done\ncd ..\u002Fnode-agent && python3 test_node_agent.py\ncd ..\u002Frca-trainer && for t in test_*.py; do python3 \"$t\"; done\n```\n\n## Status\n\nVersion 0.1.0, extraction from the original platform. The core (observation, RCA, agent,\nnode-agent) works and is covered by tests. Still to be finished for a clean product: full\nparameterization of detectors and alert thresholds, review of the carried-over manifests against a\nspecific cluster, a Helm chart, and documentation of the application-adapter contract.\n","Aegil 是一个面向 Kubernetes 的自主站点可靠性工程（SRE）与 DevOps 智能代理系统，通过确定性日志分析实现问题诊断与自动修复。其核心能力包括：对接集群、节点、Loki 日志及 Tempo 追踪数据；基于归一化日志与预定义检测器执行可验证的根因分析（RCA），每项结论均锚定原始日志片段；结合轻量级 SetFit 分类器与大模型协同决策，并通过节点代理执行安全受限的底层操作（如磁盘清理、进程检查），辅以命令危险分级、防循环机制和完整审计日志。适用于中大型 Kubernetes 环境下的自动化故障响应、SRE 辅助值守与运维人机协作场景。",2,"2026-07-16 02:30:02","CREATED_QUERY"]