Skip to main content

StorageOps — S3-compatible object storage diagnostic toolkit. A Pi Coding Agent extension + skill pack.

Project description

StorageOps

StorageOps is a Pi Coding Agent extension and skill pack for diagnosing S3-compatible object storage problems.

It is designed for cases like AccessDenied, SlowDown, SignatureDoesNotMatch, checksum mismatches, stale reads, broken lifecycle rules, failed notifications, and migration surprises. You provide logs, errors, configs, or a short description; Pi loads the StorageOps skills and tools to produce an evidence-based diagnosis.

What You Get

  • 15 diagnostic skills covering security, protocol compatibility, CLI/SDK behavior, performance, network access, lifecycle cost, replication, mount/workspace usage, migration, data consistency, access logs, big-data pipelines, notifications, reporting, and triage, plus 1 eval skill pack (16 packs total).
  • 4 Pi extension tools:
    • scan_secrets redacts credential values and returns safe fingerprints.
    • detect_domain ranks likely diagnostic domains and recommends the next skill.
    • search_memory searches prior Pi sessions with scored, redacted snippets.
    • capture_http_trace wraps one bounded read-only command through httpmon and returns a sanitized HTTP summary.
  • Deterministic helper scripts for access logs, policy analysis, throttling, ETags, small-object cost, migration estimates, SigV4 parsing, endpoint reachability, and golden-case eval.
  • A regression suite with 33 compact golden cases and size gates to keep the repository lean.

Quick Start

Prerequisites: Node.js 22.19+, Python 3.11+, and a model provider key. (Pi Coding Agent 0.78+ requires Node 22.19+; on older Node, npm installs an incompatible legacy Pi and storageops install will refuse it.)

# 1. Install Pi Coding Agent (the runtime engine)
#    storageops install does this automatically, but you can also install manually:
npm install -g @earendil-works/pi-coding-agent

# 2. Install StorageOps
python3 -m pip install storageops -i https://pypi.org/simple
storageops install

# 3. Configure a model key (pick one)
export ANTHROPIC_API_KEY=sk-...
export DEEPSEEK_API_KEY=sk-...
export OPENAI_API_KEY=sk-...

# 4. Run a diagnosis
storageops --print 's5cmd sync reports 429 SlowDown; diagnose likely cause'

Ubuntu / Debian: If pip install storageops fails with "externally-managed-environment", use python3 -m pip install storageops --break-system-packages -i https://pypi.org/simple on an isolated VM, or create a virtualenv first.

Cloud or regional PyPI mirrors: If your default mirror reports "No matching distribution found for storageops", install from the official PyPI index:

python3 -m pip install --upgrade storageops -i https://pypi.org/simple

storageops install automatically installs Pi Coding Agent via npm if it is not already present. It stops before deployment when an older Pi version is detected and prints the manual upgrade command, avoiding both auto-upgrades and half-ready StorageOps installs. It also prepares the managed httpmon helper for capture_http_trace under ~/.storageops/bin/. PyPI release packages include the verified Linux amd64 helper used by common cloud VMs, so those users do not need to install httpmon, install Go, or edit PATH manually. Other supported platforms use the bounded download fallback when the bundled helper does not match.

Configure a Model Key

Use any one of these patterns:

export DEEPSEEK_API_KEY=sk-...
export ANTHROPIC_API_KEY=sk-...
export OPENAI_API_KEY=sk-...

Or store a local key for the selected StorageOps/Pi agent directory:

echo sk-... > ~/.storageops/agent/api-key
chmod 600 ~/.storageops/agent/api-key

A bare key in that file defaults to DeepSeek, then Anthropic, then OpenAI. To bind it to a specific provider, prefix it with provider::

echo anthropic:sk-ant-... > ~/.storageops/agent/api-key   # also: gemini:, groq:, ...

Supported prefixes: anthropic/claude, deepseek, openai, google/gemini, mistral, groq, cerebras. (Without a prefix, a non-DeepSeek key would be misrouted to DEEPSEEK_API_KEY.)

You can also pass Pi-native options through storageops, for example --provider, --model, --api-key, --print, --resume, or @file inputs.

DeepSeek smoke test:

storageops --provider deepseek --model deepseek-v4-pro --print 'hello'

deepseek-v4-pro and deepseek-v4-flash are known-good DeepSeek choices with Pi 0.78.0. If you keep a key in ~/.storageops/agent/api-key, StorageOps reads it and exposes it to Pi; you do not need to pass --api-key for normal use.

Install Modes

Independent mode is the default:

storageops install

It writes:

~/.storageops/
├── agent/
│   ├── settings.json
│   ├── api-key
│   ├── extensions/storageops.ts
│   └── sessions/
└── skills/

Merge mode installs into an existing Pi setup:

storageops install --merge

It writes the extension to ~/.pi/agent/extensions/, skills to ~/.pi/skills/, and backs up settings.json before merging StorageOps settings.

Typical Workflows

Single-shot diagnosis:

storageops --print @rclone-debug.log 'Explain the checksum mismatch and safe next steps'

Interactive diagnosis:

storageops

Refresh an install after upgrade:

python3 -m pip install --upgrade storageops -i https://pypi.org/simple
storageops install --force

storageops install --force redeploys files from the currently installed local package. During install, StorageOps prints the local package version and package path, warns if PyPI has a newer version, and records deployment provenance in ~/.storageops/install.json.

For Ubuntu/Debian cloud hosts, or right after a fresh release when pip cache may lag:

python3 -m pip install --upgrade storageops --break-system-packages --no-cache-dir -i https://pypi.org/simple
storageops install --force
storageops --version

If the installer still prints an old StorageOps package: v..., the Python package did not upgrade and old bundled skills were redeployed.

Run quality gates from a checkout:

python3 scripts/skill_integrity_check.py
python3 skills/storageops-eval-golden-cases/scripts/golden_case_validator.py \
  skills/storageops-eval-golden-cases/cases
make validate

Documentation Map

Repository Note

The source tree keeps canonical skills at repository root and exposes them through storageops_cli/skills -> ../skills for packaging. The installer expects packaged skills to be available next to storageops_cli; review distribution changes carefully.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

storageops-0.4.37.tar.gz (3.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

storageops-0.4.37-py3-none-any.whl (3.5 MB view details)

Uploaded Python 3

File details

Details for the file storageops-0.4.37.tar.gz.

File metadata

  • Download URL: storageops-0.4.37.tar.gz
  • Upload date:
  • Size: 3.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for storageops-0.4.37.tar.gz
Algorithm Hash digest
SHA256 0580602518b0d1682f13b65eb5140bf9cb75df22f63b28dadc74b79a640624bd
MD5 ee97b93591e9c9d084a0e8ee827d6853
BLAKE2b-256 8b40d041f2c453459b36ce7c82915c74877b83764eacef7eeac4ccfff37f3e3b

See more details on using hashes here.

Provenance

The following attestation bundles were made for storageops-0.4.37.tar.gz:

Publisher: publish.yml on hxddh/storageops

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file storageops-0.4.37-py3-none-any.whl.

File metadata

  • Download URL: storageops-0.4.37-py3-none-any.whl
  • Upload date:
  • Size: 3.5 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for storageops-0.4.37-py3-none-any.whl
Algorithm Hash digest
SHA256 fbac5eb01acf7bf8b56d1d9368e5e22a4b27b9d84b655a6bfdad488e07f8b7ca
MD5 04b03f93f5a5c79674efe0dbb6f7897c
BLAKE2b-256 f649e59f1b4342595a976567a636fed41b79eaaa865a400c5de8b92505053893

See more details on using hashes here.

Provenance

The following attestation bundles were made for storageops-0.4.37-py3-none-any.whl:

Publisher: publish.yml on hxddh/storageops

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page