eve-manifest-authoring
npx skills add https://github.com/incept5/eve-skillpacks --skill eve-manifest-authoring
Agent 安装分布
Skill 文档
Eve Manifest Authoring
Keep the manifest as the single source of truth for build and deploy behavior.
Minimal skeleton (v2)
schema: eve/compose/v1
project: my-project
registry:
host: ghcr.io
namespace: myorg
auth:
username_secret: GHCR_USERNAME
token_secret: GHCR_TOKEN
services:
api:
build:
context: ./apps/api # Build context directory
dockerfile: Dockerfile # Optional, defaults to context/Dockerfile
image: ghcr.io/myorg/my-api # Target image (no tag needed - managed by Eve)
ports: [3000]
environment:
NODE_ENV: production
x-eve:
ingress:
public: true
port: 3000
environments:
staging:
pipeline: deploy
pipeline_inputs:
some_key: default_value
pipelines:
deploy:
steps:
- name: build
action:
type: build # Builds all services with build: config
- name: release
depends_on: [build]
action:
type: release
- name: deploy
depends_on: [release]
action:
type: deploy
OCI Image Labels (GHCR Auto-Linking)
GHCR requires packages to be linked to a repository for proper permission inheritance. Add these labels to your Dockerfiles to enable automatic linking:
LABEL org.opencontainers.image.source="https://github.com/YOUR_ORG/YOUR_REPO"
LABEL org.opencontainers.image.description="Service description"
Why this matters: Without this label, GHCR creates “orphaned” packages that only org admins can push to. The Eve builder injects this label automatically at build time, but including it in your Dockerfile is recommended as defense-in-depth.
For multi-stage Dockerfiles, add the labels to the final stage (the production image).
Legacy manifests
If the repo still uses components: from older manifests, migrate to services:
and add schema: eve/compose/v1. Keep ports and env keys the same.
Services
- Provide
imageand optionallybuild(context and dockerfile). - Use
ports,environment,healthcheck,depends_onas needed. - Use
x-eve.external: trueandx-eve.connection_urlfor externally hosted services. - Use
x-eve.role: jobfor one-off services (migrations, seeds).
Build configuration
Services with Docker images should define their build configuration:
services:
api:
build:
context: ./apps/api # Build context directory
dockerfile: Dockerfile # Optional, defaults to context/Dockerfile
image: ghcr.io/org/my-api # Target image (no tag needed - managed by Eve)
ports: [3000]
Note: Every deploy pipeline should include a build step before release. The build step creates tracked BuildSpec/BuildRun records and produces image digests that releases use for deterministic deployments.
Local dev alignment
- Keep service names and ports aligned with Docker Compose.
- Prefer
${secret.KEY}and use.eve/dev-secrets.yamlfor local values.
Environments, pipelines, workflows
- Link each environment to a pipeline via
environments.<env>.pipeline. - When
pipelineis set,eve env deploy <env>triggers that pipeline instead of direct deploy. - Use
environments.<env>.pipeline_inputsto provide default inputs for pipeline runs. - Override inputs at runtime with
eve env deploy <env> --ref <sha> --inputs '{"key":"value"}' --repo-dir ./my-app. - Use
--directflag to bypass pipeline and do direct deploy:eve env deploy <env> --ref <sha> --direct --repo-dir ./my-app. - Pipeline steps can be
action,script, oragent. - Use
action.type: create-prfor PR automation when configured. - Workflows live under
workflowsand are invoked via CLI;db_accessis honored.
Platform-Injected Environment Variables
Eve automatically injects these into all deployed service containers:
| Variable | Description |
|---|---|
EVE_API_URL |
Internal cluster URL for server-to-server calls |
EVE_PUBLIC_API_URL |
Public ingress URL for browser-facing apps |
EVE_PROJECT_ID |
The project ID |
EVE_ORG_ID |
The organization ID |
EVE_ENV_NAME |
The environment name |
Use EVE_API_URL for backend calls from your container. Use EVE_PUBLIC_API_URL for
browser/client-side code. Services can override these in their environment section.
Interpolation and secrets
- Env interpolation:
${ENV_NAME},${PROJECT_ID},${ORG_ID},${ORG_SLUG},${COMPONENT_NAME}. - Secret interpolation:
${secret.KEY}pulls from Eve secrets or.eve/dev-secrets.yaml. - Use
.eve/dev-secrets.yamlfor local overrides; set real secrets via the API for production.
Eve extensions
- Top-level defaults via
x-eve.defaults(env, harness, harness_profile, harness_options, hints, git, workspace). - Top-level agent policy via
x-eve.agents(profiles, councils, availability rules). - Agent packs via
x-eve.packswith optionalx-eve.install_agentsdefaults. - Agent config paths via
x-eve.agents.config_pathandx-eve.agents.teams_path. - Chat routing config via
x-eve.chat.config_path. - Service extensions under
x-eve(ingress, role, api specs, worker pools). - API specs:
x-eve.api_specorx-eve.api_specs(spec URL relative to service by default).
Example:
x-eve:
agents:
version: 1
config_path: agents/agents.yaml
teams_path: agents/teams.yaml
chat:
config_path: agents/chat.yaml
install_agents: [claude-code, codex]
packs:
- source: ./skillpacks/my-pack
Recursive skill distillation
- Add new manifest patterns and pitfalls as they emerge.
- Split deep details into a
references/file if this skill grows. - Update the eve-skillpacks README and ARCHITECTURE listings after changes.