openoperator / spec.md
OpenOperator Deployer
Deploy source revision 1cd0489b8a5236bc1aaafbf7de01a93842d71896
412a75b
|
Raw History Blame Contribute Delete
4.97 kB
# Spynel Hugging Face Deployment and Integration Contract
## Scope
This document is the source of truth for the Spynel deployment branch. Changes
must remain modular and minimize invasive changes to Agent Zero core behavior.
## Hugging Face Docker Space
- The root Docker image must run Agent Zero as a non-root UID/GID 1000 process.
- The WebUI must listen on `0.0.0.0:7860`, and port 7860 must be the only
required published port.
- Startup must not require `chpasswd`, SSH, cron, supervisor, sudo, privileged
Docker flags, or another root-only service.
- The Space image must retain the base image's `/ins/*` installers and copy only
the HF-specific entrypoint from `docker/run/fs/`; installer and entrypoint
scripts must fail build-time integrity checks for Git LFS pointer text or a
missing shebang before any installer executes.
- Agent Zero application files must be readable by UID 1000. Runtime state and
Hugging Face, XDG, and Matplotlib cache directories must be writable by UID
1000.
- Kokoro, spaCy, their models, and other dependencies must be installed in a
writable image-build layer. Runtime dependency installation must not be used
to hide missing build dependencies or write into immutable image layers.
- Space startup errors must be fixed at their cause rather than suppressed.
## Administrative Profile Creation
- Provide an authenticated, CSRF-protected API for explicitly creating profiles
under `usr/agents/` through existing profile persistence helpers.
- Validate profile names and prompt filenames, reject traversal/nested paths,
reserved profiles, and duplicates, and preserve existing profile selection.
- Routing syntax must never invoke profile creation. An unknown routed profile
must fail explicitly without creating a context or profile directory.
## Spynel Profile and Routing
Ship a bundled `spynel` Agent Zero profile with this routing grammar:
- `@profile`: route to an agent profile.
- `/sdk`: route to an SDK gateway.
- `@profile /sdk`: send profile metadata through the selected SDK gateway.
- No routing tokens: Spynel handles the request locally.
External routing contracts:
- `/sdk` resolves only from `SPYNEL_SDK_<SDK>_URL`.
- A registered `@profile` resolves only from `SPYNEL_AGENT_<PROFILE>_URL`.
- External destinations must be credential-free HTTPS URLs registered through
environment variables; user text must never supply or override a destination.
- Dispatch uses shell-free curl argv execution, bounded connect/overall
timeouts, terminate/kill cleanup, structured polling, progress states, and
useful failure information.
Internal routing contracts:
- An unregistered `@profile` may select only an existing Agent Zero profile.
- Delegation uses configurable same-container loopback transport, preferably
`SPYNEL_AGENT_ZERO_URL=http://127.0.0.1:7860`, authenticated with
`SPYNEL_AGENT_ZERO_API_KEY`. HTTPS remains mandatory for non-loopback URLs.
- The Hugging Face entrypoint must configure Agent Zero's existing API-key
verifier from `SPYNEL_AGENT_ZERO_API_KEY` without printing the secret.
- Delegation creates a fresh context, selects the requested profile, submits the
stripped task asynchronously, polls with meaningful progression, and returns
the result.
- Unknown profiles fail before context creation and are never implicitly
created.
## Paperclip Skill
- Ship a Spynel-native Paperclip board-manager skill targeting
`https://leon4gr45-paperclip-founder.hf.space` by default.
- Configuration uses `PAPERCLIP_BASE_URL` and optional
`PAPERCLIP_API_TOKEN`.
- The helper permits credential-free HTTPS base URLs and confined `/api/*`
paths, bounds timeouts, avoids shell interpolation, does not leak tokens, and
preserves useful 401/403/404 response behavior.
- Live validation must use read-only requests unless disposable authenticated
test data is explicitly available.
## Colab Lifecycle CLI
Provide a CLI that starts Agent Zero in the background, checks `/api/health`,
and stops the process group. It must handle stale PID files, graceful shutdown,
and bounded forced termination fallback.
## Required Validation
- Clean-build the actual root Docker image and run it without development bind
mounts or privileged flags as UID/GID 1000.
- Verify `/api/health`, the UI root, authenticated API access, Spynel profile and
profile-scoped skill discovery, administrative profile auth/CSRF, writable
state/cache paths, and clean startup logs.
- Run internal Spynel delegation, explicit unknown-profile safety, controlled
immediate/async HTTPS external fixtures, read-only live Paperclip checks,
disposable profile creation, and the Colab lifecycle.
- Install the real framework dependencies and run the complete pytest suite plus
focused Spynel, Python compilation, shell syntax, and diff checks.
- Do not claim Hugging Face readiness unless the image builds and the resulting
non-root container successfully serves `/api/health`.