aim — one installable artifact
The packaged AI Monitoring CLI. One versioned wheel bundles every endpoint
collector (Claude Code, Cursor, Kilo Code, Kimi Code) and the local dashboard
behind a single aim command, so an engineer can install it with pipx and
run aim personal — no repo clone, no cd into subdirectories, no
infrastructure.
This is the foundation of the one-command install path: fleet enrolment, the
background watcher and aim doctor all build on this artifact.
Install
Distribution name is aimonitoring-security;
console script and import package remain aim. Do not
pipx install aim — that PyPI name is AimStack's unrelated tracker.
Package install is a versioned wheel/sdist (reproducible, auditable). For fleet
pilot enroll only, the dashboard also hosts a one-shot helper
(http://<aim-host>:8081/enroll.sh, AIM-1124) that installs this package via
pipx, then runs aim join + aim doctor --fix and fails closed if
token_file is missing. Prefer the wheel path for air-gapped mirrors.
Public (preferred)
pipx install aimonitoring-security
aim personal
aim --version
Signed GitHub Release (offline / private-repo mirror)
CI-built wheel + SHA256SUMS + keyless cosign (identity =
.github/workflows/release-cli.yml at the tag):
TAG=v0.1.3
REPO=hawikk/aim
WHEEL=aimonitoring_security-${TAG#v}-py3-none-any.whl
gh release download "$TAG" -R "$REPO" \
-p "$WHEEL" -p "SHA256SUMS" -p "${WHEEL}.sigstore"
sha256sum -c SHA256SUMS --ignore-missing
cosign verify-blob --bundle "${WHEEL}.sigstore" \
--certificate-identity-regexp "^https://github.com/${REPO}/\\.github/workflows/release-cli\\.yml@" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
"$WHEEL"
pipx install "./$WHEEL" # recommended (isolated)
# or: pip install "./$WHEEL"
Requires Python 3.11+. Packaging metadata (requires-python = ">=3.11")
refuses install on older interpreters; an import/CLI guard fails fast with a
human message and a link to the install docs if an old interpreter somehow
still loads the package.
Runtime dependencies: none. The wheel declares an empty dependency list, so install pulls no transitive packages. Collectors are written against the Python standard library.
Use
Individual mode — monitor your own AI usage, zero infra
aim personal # scan your local AI-tool data into SQLite and serve the
# dashboard on http://127.0.0.1:8787 — zero outbound calls
aim personal --watch # keep rescanning while the dashboard is up
aim personal --port 9000
aim version # CLI + bundled collector versions
aim personal binds 127.0.0.1 only and makes zero outbound network
calls. Content (prompts/responses) is matched for secrets/PII in memory and
discarded immediately — only detector names and usage metadata are stored,
in a local SQLite file under ~/.aim-collector/.
Fleet mode — one line hooks + enrolls every installed tool (AIM-138)
aim join <ingest-url> --token <enroll-token> # detect → hook → enroll → verify
aim status # per-tool hook / enroll / heartbeat / spool
aim uninstall # unhook every tool + remove all state
Private CA / split-horizon (AIM-238) — needed when the stack gateway serves
Caddy's internal CA, or when ingest.localhost does not resolve on the host:
aim join https://ingest.localhost:8443 --token <enroll-token> \
--ca-bundle secrets/stack-ca.crt \
--resolve ingest.localhost:8443:127.0.0.1
--ca-bundle (alias --ca-cert) and --resolve host:port:ip are persisted
into the per-user config.json so the watch daemon reuses them without
ambient SSL_CERT_FILE. SSL_CERT_FILE / AIM_CA_BUNDLE / AIM_RESOLVE
are still honoured when set.
aim join is the enterprise-engineer magic moment: it detects which supported
AI tools are present on the machine, registers the collector hook for the
hook-capable ones (Claude Code, Cursor, Copilot, Kimi, Grok), configures the
scan-based one (Kilo Code), enrolls the device once, and verifies connectivity with a
first heartbeat. Tools that aren't installed are reported as skipped, not
errors. It prints a per-tool summary and is idempotent — re-running repairs
or refreshes rather than duplicating hooks.
Ordering is a security property: enrollment (which validates the token against the ingest endpoint) happens before any hook is written, so a wrong or revoked token fails fast and leaves no partial hooks behind. One physical machine stays one device — Claude/Kilo/Kimi share a state dir, and Cursor's separate state dir is bridged onto the same device identity.
aim status is read-only (no network): it reports, per installed tool, whether
the hook is registered (or scan-based), enrollment state, last heartbeat age,
and local spool depth — exiting non-zero when an installed tool is unhooked or
the device is not enrolled, so it doubles as a health check.
Local end-to-end drive without the real ingest service:
python3 scripts/aim-138-stub-ingest.py 8799thenaim join http://127.0.0.1:8799 --token demo.
Build the artifact (developers / air-gapped mirrors)
Personal-mode users should install from the GitHub Release, not from a local build. This section is for developers and IT admins who need to rebuild.
One command, standard library only — builds on a bare Python with no pip, no setuptools, no network (so an IT admin can produce the mirror artifact on an air-gapped box):
python3 scripts/build_aim_cli.py # or: make aim-cli
Outputs to packaging/aim-cli/dist/:
aimonitoring_security-<version>-py3-none-any.whl— the install artifactaimonitoring_security-<version>.tar.gz— auditable source archive (sdist)
The version in pyproject.toml (kept in lockstep with src/aim/__init__.py)
is the single source of truth; it is embedded in the wheel and reported by
aim version / aim --version. Builds are deterministic — the same source
yields a byte-identical wheel (verify with sha256sum).
Tagged releases (v*) run .github/workflows/release-cli.yml, which builds
these artifacts on CI, writes SHA256SUMS, cosign-signs each blob keylessly,
attaches everything to the GitHub Release, publishes the same wheel to PyPI as
aimonitoring-security, and post-verifies install + aim --version against
the tag. Do not hand-upload release assets.
How the bundle is laid out
The build vendors the collector source verbatim (no binaries) into
src/aim/_vendor/, preserving the monorepo-relative layout the collectors
already walk up to discover:
aim/_vendor/
collectors/{claude-code,cursor,kilo-code,kimi-code,grok-build,github-copilot}/<pkg>/...
apps/web/public/... # the dashboard, served as static files
Because the relative shape is preserved, the collector code runs byte-for-byte
unchanged whether it's a git clone or an installed wheel — no import shims. The
_vendor/ tree is build output (git-ignored); it is regenerated on every build
and must never be hand-edited.
Security posture
Binding security bar for this artifact:
- Versioned, file-auditable wheel/sdist as the install artifact (reproducible
build). The optional dashboard
enroll.shone-shot (AIM-1124) wraps pipx +aim joinfor pilot UX; it never logs the enrollment token and fails closed withouttoken_file. - Stdlib-only runtime, unchanged from the collectors.
- No vendored binaries — only readable Python + static web assets.
- Least privilege / blast radius: everything is per-user, never root.
aim personalis loopback-only, zero egress;aim joinwrites only user-scoped hooks + config (never/etcor%ProgramData%). - Fail-fast, no partial state:
aim joinenrolls before hooking, so a bad/revoked token leaves nothing behind. - Clean uninstall:
aim uninstallunhooks every tool, clears the device identity, and removes all state aim wrote; it is idempotent and never touches a settings file it didn't contribute to.
Metadata
Release files for aimonitoring-security 0.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| aimonitoring_security-0.1.4.tar.gz | 731.2 kB | Without provenance | Details for aimonitoring_security-0.1.4.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| aimonitoring_security-0.1.4-py3-none-any.whl | Python 3 | none | any | Details for aimonitoring_security-0.1.4-py3-none-any.whl |
Total release size: 1.6 MB
Release files / aimonitoring_security-0.1.4.tar.gz
| Download URL | aimonitoring_security-0.1.4.tar.gz |
|---|---|
| Size | 731.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9a30cb6ea77baed79eb6d46cd8d5d2a835791524f3826b420cc556339af89b00
|
|
BLAKE2b-256 checksum How to use checksums |
25776245b2cf24a2ca6f2cdee7a636ad11bfc083d8405c763a4259ddea625412
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / aimonitoring_security-0.1.4-py3-none-any.whl
| Download URL | aimonitoring_security-0.1.4-py3-none-any.whl |
|---|---|
| Size | 889.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ee49b14b0a9659149c0a52c0f32b2ddcce91718a487266f2153df26436f9b07d
|
|
BLAKE2b-256 checksum How to use checksums |
aead9cdd67f7c0581f864a602eb6354c8c7a3be25f92f9d1698b20afddf15000
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for aimonitoring-security 0.1.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.