Publish your agent or skill to make it available on the platform.Documentation Index
Fetch the complete documentation index at: https://docs.orchagent.io/llms.txt
Use this file to discover all available pages before exploring further.
Prerequisites
- orchagent account with API key
- CLI installed and authenticated
- For agents:
orchagent.jsonmanifest in your directory - For skills:
SKILL.mdfile in your directory
Quick Start
Publishing Skills
Skills use a different workflow from agents. Instead oforchagent.json, skills are defined as a single SKILL.md file with YAML frontmatter.
Step 1: Create the Skill
Useorch skill create to scaffold a new skill:
SKILL.md file with the template structure.
Step 2: Write Your SKILL.md
TheSKILL.md file has two parts: YAML frontmatter (metadata) and markdown body (the skill content).
| Field | Required | Description |
|---|---|---|
name | Yes | Skill name (lowercase, hyphens allowed) |
description | Yes | What this skill teaches — also used as the trigger description for AI tools |
license | No | License identifier (e.g., MIT, Apache-2.0) |
metadata | No | Arbitrary key-value pairs (author, version notes, etc.) |
Step 3: Publish
SKILL.md (no orchagent.json needed) and publishes as a skill.
Skills vs Agents: Key Differences
| Skills | Agents | |
|---|---|---|
| Config file | SKILL.md (YAML frontmatter + markdown) | orchagent.json + prompt.md + schema.json |
| What it is | Passive knowledge injected into prompts | Active executor that runs code or calls LLMs |
| Create command | orch skill create <name> | orch init <name> |
| Install command | orch skill install org/name | orch install org/name |
| Runnable | No — skills teach, agents do | Yes — orch run org/name |
Publishing Agents
Step 1: Initialize Your Agent
Create a new agent project:orchagent.json, prompt.md, and schema.json. For tool types with --language javascript, it creates main.js and package.json instead. The manifest uses the specified type (defaulting to "prompt") with canonical fields.
Step 2: Configure Your Manifest
Editorchagent.json with your agent’s configuration:
required_secrets field declares which env vars your code needs at runtime. These are matched by name against your workspace secrets vault. See Manifest Format for all options.
Step 3: Test Locally
Before publishing, test your agent locally:.py or .js entrypoints and runs them with the correct interpreter (python3 or node).
Step 4: Publish
Step 5: Deploy as a Service (Optional)
For agents withruntime.command or loop config that need to run continuously (Discord bots, webhook listeners, background workers), deploy as an always-on service:
required_secrets from the agent and injects them from your workspace vault. See Always-On Services for full documentation.
What Happens on Publish
The platform runs several checks:- Manifest validation — verifies
orchagent.jsonis valid - Schema validation — validates input/output schemas
- Secrets declaration — tool and agent types must declare
required_secrets(use--no-required-secretsto bypass) - Secrets validation — warns if any
required_secretsare not yet set in the target workspace - Dependency check — verifies all dependencies exist (for orchestrators)
- Cycle detection — ensures no circular dependencies
loop config), the platform also:
- Stores your
prompt.mdas the agent’s system prompt - Stores
custom_toolsandloop.max_turnsfrom your manifest - On each call, spins up an E2B sandbox with an agent runner
- The runner gives the LLM your prompt, built-in tools, and custom tools
- The LLM iterates until it calls
submit_resultor hitsmax_turns
runtime.command), the platform also:
- Creates a ZIP bundle of your code
- Stores the bundle securely
- On each call, spins up an E2B sandbox
- Runs your command with input via stdin
- Returns stdout as the response
Versioning
Versions are automatically assigned by the server each time you publish. The first publish createsv1, the next creates v2, and so on.
How It Works
- Every
orch publishcreates a new version - v1, v2, v3, etc. - Authors cannot control version numbers - this is intentional for simplicity
- All versions remain accessible - old versions stay available indefinitely
Running a Specific Version
Use the@version syntax to pin to a specific version:
Source Available vs Server Only
Agents have two distribution modes that control what non-owners can see and do:| Mode | Prompt/code visible? | orch run --local | Badge |
|---|---|---|---|
| Source Available (default) | Yes | Yes | ”Source Available” |
| Server Only (default) | No — redacted | No — cloud only (orch run) | “Server Only” |
orch run (cloud execution).
Source-available agents expose the full prompt and code. Users can inspect, run locally, and fork into their own workspace. Use this for open/community agents where transparency builds trust.
Code Bundling
For code runtime agents (those withruntime.command), the CLI automatically creates a ZIP bundle of your project.
Auto-Detection
The CLI detects code runtime projects by looking for:- Python files (
.py) withrequirements.txt - JavaScript files (
.js) withpackage.json
Entrypoint Detection
The CLI looks for entrypoints in this order: Python:main.py, app.py, agent.py, run.py, __main__.py
JavaScript: main.js, index.js, agent.js, main.ts, index.ts, agent.ts
Override in your manifest:
Bundle Exclusions
These files/directories are automatically excluded: Python:**/__pycache__/,**/*.pyc,**/*.pyo,**/*.egg-info/venv/,.venv/,env/,.envdist/,build/,.eggs/pyproject.toml,setup.py,setup.cfg.mypy_cache/,.pytest_cache/,.ruff_cache/
node_modules/yarn.lock,bun.lockbtsconfig.json
package.json and package-lock.json are automatically included when a JavaScript entrypoint is detected. They are excluded from Python-only bundles to prevent monorepo conflicts. This ensures npm install runs correctly in the sandbox..git/,.gitignore,.gitattributes.idea/,.vscode/,.DS_Store
README.md,CHANGELOG.md,LICENSEdocs/
Dockerfile,docker-compose.yml,.dockerignore.github/,.gitlab-ci.yml,.circleci/
tests/,test/,__tests__/*_test.py,test_*.py,*.test.js,*.spec.tsconftest.py,pytest.ini,coverage/
orchagent.json(read separately)*.zip,bundle.zipscripts/,Makefile
bundle section to your manifest:
Size Limits
- Maximum bundle size: 50MB
- Keep bundles small for faster cold starts
Dry Run
Preview your bundle and canonical fields without publishing:- Files that will be included
- Total bundle size
- Detected entrypoint
Web UI Upload
You can also upload code bundles through the web dashboard as an alternative to the CLI.Upload via Dashboard
- Go to orchagent Dashboard
- Navigate to Agents → My Agents
- Click Upload Bundle on your agent card
- Drag and drop your ZIP file or click to select
Bundle Requirements
When uploading manually, ensure your ZIP contains:orchagent.jsonat the root- Your entrypoint file (
main.py, etc.) requirements.txtorpackage.json(if needed)
Bundle Status
Agent cards show bundle status indicators:- ✓ Active - Bundle uploaded and ready
- ⏳ Processing - Bundle being validated
- ✗ Error - Bundle validation failed (check logs)
Service Keys
When you publish an agent that has dependencies, the platform issues a service key:Publish Options
| Flag | Description |
|---|---|
--all | Publish all agents in subdirectories in dependency order |
--dry-run | Validate and preview bundle without publishing |
--entrypoint <file> | Override entrypoint for tools |
--skills <list> | Default skills (comma-separated, e.g., org/skill@v1,org/other@v1) |
--skills-locked | Lock default skills (callers cannot override via flags) |
--no-local-download | Prevent users from downloading and running locally (server-only). Local download is enabled by default. |
Distribution
By default, new agents allow local download — users can download and run them withorch run --local. To make an agent server-only (cloud execution only):
Agent owners can always download their own agents regardless of this setting.
Troubleshooting
”Manifest validation failed”
Check yourorchagent.json for:
- Valid JSON syntax
- Required fields present
- Correct field types
”Dependency not found”
Verify all dependencies in your manifest exist:- Check org/agent names are correct
- Ensure dependencies are published
- Verify version strings match
”Bundle too large”
Tool bundles have a 50MB size limit. To reduce size:- Check for large files that shouldn’t be included
- Remove
node_modules/orvenv/directories - Use
bundle.excludein your manifest to exclude files
”Entrypoint not found”
The CLI auto-detects entrypoints:main.py, app.py, agent.py, run.py for Python; main.js, index.js, agent.js for JavaScript. If your entrypoint has a different name:
CI/CD Integration
GitHub Actions
Environment Variables
For CI/CD, use environment variables instead of config files:| Variable | Description |
|---|---|
ORCHAGENT_API_KEY | Your API key |
ORCHAGENT_API_URL | API URL (defaults to production) |
Next Steps
Orchestration
Build agents that call other agents
CLI Reference
All CLI commands
Billing
Platform credits and usage