Metadata-Version: 2.4
Name: execkit
Version: 0.6.1
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: POSIX :: Linux
Classifier: Operating System :: MacOS
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Rust
Classifier: Topic :: Software Development :: Libraries
Summary: Stateful, structured, safe shell sessions for AI agents - over local shells, SSH, and Docker.
Keywords: ai,agent,shell,ssh,docker,mcp
Home-Page: https://github.com/blinkingbit-oss/execkit
Author-email: Jayashankar R <56070307+jayashankarvr@users.noreply.github.com>
License-Expression: Apache-2.0
Requires-Python: >=3.8
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
Project-URL: Homepage, https://github.com/blinkingbit-oss/execkit
Project-URL: Repository, https://github.com/blinkingbit-oss/execkit

# execkit (Python)

Stateful, structured, **safe** shell sessions for AI agents - over local shells,
SSH, and Docker. Native bindings to the [execkit](https://github.com/blinkingbit-oss/execkit)
Rust core.

```python
import execkit
from execkit import Session, Policy

with Session.local(policy=Policy(deny=["rm"]), timeout=30.0) as s:
    r = s.exec("cd /app && npm ci")
    print(r.stdout, r.exit_code, r.cwd)
```

State (cwd, env) persists across `exec` calls. Every result is a structured
`ExecResult` (split stdout/stderr, exit code, cwd, duration), already
secret-redacted and output-bounded. Commands pass an advisory policy fence first.

Async callers: `r = await asyncio.to_thread(s.exec, "npm ci")` (the native call
releases the GIL).

Unix-only (local sessions need a POSIX shell). See the project README for the
full picture and the operator security model.

## License

Apache-2.0.

