Metadata-Version: 2.4
Name: autoops-sre
Version: 0.1.4
Summary: An agentic ops harness for AIOps — SRE, cloud, Kubernetes, observability, and security automation.
Project-URL: Container image, https://github.com/users/epappas/packages/container/package/autoops
Author-email: Evangelos Pappas <epappas@evalonlabs.com>
License: MIT
License-File: LICENSE
Keywords: agent,aiops,harness,kubernetes,observability,sre
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: System :: Systems Administration
Requires-Python: >=3.12
Requires-Dist: anthropic>=0.121.0
Requires-Dist: cedarpy<5,>=4.8.7
Requires-Dist: cryptography>=50
Requires-Dist: mcp>=2.1.1
Requires-Dist: openai>=2.53.0
Requires-Dist: opentelemetry-api>=1.43.0
Requires-Dist: opentelemetry-sdk>=1.44.0
Requires-Dist: pydantic>=2.7
Requires-Dist: pyyaml>=6.0
Requires-Dist: starlette>=1.6.0
Requires-Dist: typer>=0.27.1
Requires-Dist: uvicorn>=0.52.4
Requires-Dist: websockets>=17.1
Description-Content-Type: text/markdown

# autoOps

An autonomous SRE agent. Point it at a Kubernetes namespace and it models the estate, names the
service that is broken, shows the evidence it used, and re-reads the cluster to check its own
answer — or hands a human a briefing saying why it could not.

Distribution **`autoops-sre`**; the command it installs is **`autoops`**.

> ⚑ The bare name `autoops` on PyPI is an unrelated project. Install `autoops-sre`.

## Install

```bash
uv tool install autoops-sre          # or: pip install autoops-sre
autoops version && autoops --help
```

Or as a container — the entrypoint is `autoops`:

```bash
docker pull ghcr.io/epappas/autoops:latest
docker run --rm ghcr.io/epappas/autoops:latest version
```

Requires Python 3.12+.

## What It Does

```
recall -> understand -> [detect -> map topology -> map services -> localize] -> rca -> mitigate -> remember
```

The bracket is the investigation. Perception is deterministic and comes first: senses read the
cluster's own declared state and nominate what looks broken, while metrics, traces and logs supply
the evidence that either confirms a candidate or refuses it. A sense never votes on its own
nomination. Diagnosis then reaches a confident answer or escalates, and says which.

```bash
autoops diagnose --namespace <ns> --results-dir ./out
```

**exit 0** is a confident answer · **exit 3** is an escalation briefing for a human · **exit 4**
means every sense came back without a read, so no answer above it can be trusted.

### It deliberately does not act

Stage 8 emits an incident note or a remediation proposal, never a change. The one typed mutation
verb that exists has an executor that raises unconditionally and is reachable from no live path —
the boundary is code, not policy. It stays locked until the reasoning earns it.

## The Command Surface

Seven verbs, plus `version`.

| Verb | What it is for |
|---|---|
| `init` | Onboard an estate and check the setup |
| `diagnose` | Diagnose a live namespace read-only — the product path |
| `watch` | Continuous mode: scheduled panels, cadence floor, budget, delivered escalations |
| `offline` | One committed fixture problem, no cluster, recorded telemetry only |
| `export` | Bundle a finished run for a ticket; turn recorded misses into replayable scenarios |
| `serve` | Serve over the network: REST + websockets + MCP, or MCP over stdio |
| `eval` | Evaluation and campaign instrumentation |

`autoops --help` and `autoops <verb> --help` carry the full flag surface; the CLI is the
documentation of record for this distribution.

## Safety

autoOps is built to run against real infrastructure, so the constraints come first.

- **The model is never the authorization boundary.** Every tool call passes a deny-by-default
  policy gate before execution, and gets a structured reason it can replan on rather than a bare
  refusal.
- **Read-only by construction on the shipped path.** A read-only policy profile plus a destructive
  re-check; a diagnosis cannot mutate.
- **Any cluster that is not loopback is refused** before a single read, until it is named in an
  allowlist signed out of band. That refusal lives in the loader, not in the model.
- **Approvals are short-lived, target-scoped and re-checked** before every target contact.
- **Secrets never enter the model context or the logs.**

## Verifying What You Installed

Both distribution files carry PEP 740 publish attestations, generated by the release workflow over
OIDC with no long-lived token:

```bash
curl -s https://pypi.org/integrity/autoops-sre/0.1.3/autoops_sre-0.1.3-py3-none-any.whl/provenance
```

The container image carries a BuildKit SBOM and a max-detail provenance record on its manifest:

```bash
docker buildx imagetools inspect ghcr.io/epappas/autoops:latest
```

## Source And Support

The development repository is **private**, so this package page and the container package page are
the public surfaces. The sdist on PyPI (`autoops_sre-<version>.tar.gz`) contains the complete
`src/` tree under the MIT licence — that is the source for this distribution.

Container package: <https://github.com/users/epappas/packages/container/package/autoops>

## Licence

MIT.
