POST /agents/configs/{config_id}/link
Move an agent into a repository, by id or by the agent's name.
Opens a pull request adding the agent's config file. The agent keeps running unchanged meanwhile; merging hands it over to the file, after which the file is what changes it. Nothing happens if the pull request is never merged.
curl -X POST "https://api.ellipsis.dev/v1/agents/configs/{config_id}/link" \
-H "Authorization: Bearer $ELLIPSIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"repository":"..."}'{
"config": {
"agent_config": {
"budget": {
"day": 0,
"month": 0,
"session": 0,
"week": 0
},
"claude": {
"effort": "low",
"fallback_model": "string",
"max_turns": 0,
"model": "claude-opus-5",
"settings": {
"path": "string",
"repository": {
"name": "string",
"owner": "string",
"ref": "string"
}
},
"system": "string"
},
"codex": {
"model": "gpt-5.6-terra",
"system": "string"
},
"ellipsis": {
"description": "string",
"enabled": true,
"interactive": true,
"metadata": {
"annotations": {},
"labels": []
},
"name": "string",
"version": "v1"
},
"environment": {
"compute": {
"cpu": 0,
"memory": "string",
"timeout": "string"
},
"hooks": {
"post_clone": "string",
"post_start": "string"
},
"image": {
"dockerfile_append": "string",
"setup": "string"
},
"repositories": [],
"variables": []
},
"input": {
"json_schema": {},
"message": "string"
},
"mcp_servers": [],
"output": {
"json_schema": {}
},
"permissions": {
"ellipsis": true,
"github": {
"permissions": "string",
"repositories": [
"string"
]
}
},
"skills": [],
"trigger": "string"
},
"agent_config_source_details": {
"branch": "string",
"path": "string",
"repo_id": 0
},
"created_at": "2026-01-01T00:00:00Z",
"display_name": "string",
"edited_by": {
"avatar_url": "string",
"id": 0,
"login": "string",
"type": "User"
},
"id": "string",
"last_session_created_at": "2026-01-01T00:00:00Z",
"last_session_id": "string",
"last_sync_error": "string",
"last_synced_commit_sha": "string",
"managed_by": "github",
"name": "string",
"pending_pull_request_url": "string",
"sha": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"path": "string",
"pull_request_url": "string"
}import os
from ellipsis import Ellipsis
client = Ellipsis(api_key=os.environ["ELLIPSIS_API_TOKEN"])
result = client.agents.configs.link("...", "...")
print(result){
"config": {
"agent_config": {
"budget": {
"day": 0,
"month": 0,
"session": 0,
"week": 0
},
"claude": {
"effort": "low",
"fallback_model": "string",
"max_turns": 0,
"model": "claude-opus-5",
"settings": {
"path": "string",
"repository": {
"name": "string",
"owner": "string",
"ref": "string"
}
},
"system": "string"
},
"codex": {
"model": "gpt-5.6-terra",
"system": "string"
},
"ellipsis": {
"description": "string",
"enabled": true,
"interactive": true,
"metadata": {
"annotations": {},
"labels": []
},
"name": "string",
"version": "v1"
},
"environment": {
"compute": {
"cpu": 0,
"memory": "string",
"timeout": "string"
},
"hooks": {
"post_clone": "string",
"post_start": "string"
},
"image": {
"dockerfile_append": "string",
"setup": "string"
},
"repositories": [],
"variables": []
},
"input": {
"json_schema": {},
"message": "string"
},
"mcp_servers": [],
"output": {
"json_schema": {}
},
"permissions": {
"ellipsis": true,
"github": {
"permissions": "string",
"repositories": [
"string"
]
}
},
"skills": [],
"trigger": "string"
},
"agent_config_source_details": {
"branch": "string",
"path": "string",
"repo_id": 0
},
"created_at": "2026-01-01T00:00:00Z",
"display_name": "string",
"edited_by": {
"avatar_url": "string",
"id": 0,
"login": "string",
"type": "User"
},
"id": "string",
"last_session_created_at": "2026-01-01T00:00:00Z",
"last_session_id": "string",
"last_sync_error": "string",
"last_synced_commit_sha": "string",
"managed_by": "github",
"name": "string",
"pending_pull_request_url": "string",
"sha": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"path": "string",
"pull_request_url": "string"
}import { Ellipsis } from '@ellipsis-dev/sdk';
const client = new Ellipsis({
apiKey: process.env.ELLIPSIS_API_TOKEN!,
});
const result = await client.agents.configs.link('...', { repository: '...' });
console.log(result);{
"config": {
"agent_config": {
"budget": {
"day": 0,
"month": 0,
"session": 0,
"week": 0
},
"claude": {
"effort": "low",
"fallback_model": "string",
"max_turns": 0,
"model": "claude-opus-5",
"settings": {
"path": "string",
"repository": {
"name": "string",
"owner": "string",
"ref": "string"
}
},
"system": "string"
},
"codex": {
"model": "gpt-5.6-terra",
"system": "string"
},
"ellipsis": {
"description": "string",
"enabled": true,
"interactive": true,
"metadata": {
"annotations": {},
"labels": []
},
"name": "string",
"version": "v1"
},
"environment": {
"compute": {
"cpu": 0,
"memory": "string",
"timeout": "string"
},
"hooks": {
"post_clone": "string",
"post_start": "string"
},
"image": {
"dockerfile_append": "string",
"setup": "string"
},
"repositories": [],
"variables": []
},
"input": {
"json_schema": {},
"message": "string"
},
"mcp_servers": [],
"output": {
"json_schema": {}
},
"permissions": {
"ellipsis": true,
"github": {
"permissions": "string",
"repositories": [
"string"
]
}
},
"skills": [],
"trigger": "string"
},
"agent_config_source_details": {
"branch": "string",
"path": "string",
"repo_id": 0
},
"created_at": "2026-01-01T00:00:00Z",
"display_name": "string",
"edited_by": {
"avatar_url": "string",
"id": 0,
"login": "string",
"type": "User"
},
"id": "string",
"last_session_created_at": "2026-01-01T00:00:00Z",
"last_session_id": "string",
"last_sync_error": "string",
"last_synced_commit_sha": "string",
"managed_by": "github",
"name": "string",
"pending_pull_request_url": "string",
"sha": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"path": "string",
"pull_request_url": "string"
}{
"properties": {
"path": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"repository": {
"type": "string"
}
},
"required": [
"repository"
],
"type": "object"
}{
"properties": {
"config": {
"properties": {
"agent_config": {
"additionalProperties": false,
"properties": {
"budget": {
"additionalProperties": false,
"properties": {
"day": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"month": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"session": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"week": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
}
},
"type": "object"
},
"claude": {
"additionalProperties": false,
"properties": {
"effort": {
"anyOf": [
{
"enum": [
"low",
"medium",
"high",
"xhigh",
"max"
],
"type": "string"
},
{
"type": "null"
}
]
},
"fallback_model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"max_turns": {
"anyOf": [
{
"exclusiveMinimum": 0,
"type": "integer"
},
{
"type": "null"
}
]
},
"model": {
"default": "claude-opus-5",
"type": "string"
},
"settings": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"path": {
"type": "string"
},
"repository": {
"type": "object"
}
},
"required": [
"path"
],
"type": "object"
},
{
"type": "null"
}
]
},
"system": {
"anyOf": [
{
"type": "string"
},
{
"additionalProperties": false,
"properties": {
"file": {
"type": "string"
},
"repository": {
"type": "object"
}
},
"required": [
"file"
],
"type": "object"
},
{
"items": {
"type": "object"
},
"type": "array"
}
],
"default": ""
}
},
"type": "object"
},
"codex": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"model": {
"default": "gpt-5.6-terra",
"type": "string"
},
"system": {
"anyOf": [
{
"type": "string"
},
{
"type": "object"
},
{
"type": "array"
}
],
"default": ""
}
},
"type": "object"
},
{
"type": "null"
}
]
},
"ellipsis": {
"additionalProperties": false,
"properties": {
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"enabled": {
"default": true,
"type": "boolean"
},
"interactive": {
"default": true,
"type": "boolean"
},
"metadata": {
"additionalProperties": false,
"properties": {
"annotations": {
"additionalProperties": {
"type": "string"
},
"default": {},
"type": "object"
},
"labels": {
"default": [],
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"version": {
"default": "v1",
"type": "string"
}
},
"type": "object"
},
"environment": {
"additionalProperties": false,
"properties": {
"compute": {
"additionalProperties": false,
"properties": {
"cpu": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"memory": {
"anyOf": [
{
"type": "string"
},
{
"type": "object"
},
{
"type": "null"
}
]
},
"timeout": {
"anyOf": [
{
"type": "string"
},
{
"type": "object"
},
{
"type": "null"
}
]
}
},
"type": "object"
},
"hooks": {
"additionalProperties": false,
"properties": {
"post_clone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"post_start": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"type": "object"
},
"image": {
"additionalProperties": false,
"properties": {
"dockerfile_append": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"setup": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"type": "object"
},
"repositories": {
"default": [],
"items": {
"additionalProperties": false,
"properties": {
"name": {
"type": "string"
},
"owner": {
"type": "object"
},
"ref": {
"type": "object"
}
},
"required": [
"name"
],
"type": "object"
},
"type": "array"
},
"variables": {
"default": [],
"items": {
"additionalProperties": false,
"properties": {
"name": {
"type": "string"
},
"value": {
"type": "object"
}
},
"required": [
"name"
],
"type": "object"
},
"type": "array"
}
},
"type": "object"
},
"input": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"json_schema": {
"anyOf": [
{
"type": "object"
},
{
"type": "null"
}
]
},
"message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"type": "object"
},
{
"type": "null"
}
]
},
"mcp_servers": {
"default": [],
"items": {
"anyOf": [
{
"type": "string"
},
{
"additionalProperties": false,
"properties": {
"name": {
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
}
]
},
"type": "array"
},
"output": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"json_schema": {
"additionalProperties": true,
"type": "object"
}
},
"required": [
"json_schema"
],
"type": "object"
},
{
"type": "null"
}
]
},
"permissions": {
"additionalProperties": false,
"properties": {
"ellipsis": {
"anyOf": [
{
"enum": [
true,
"all"
]
},
{
"additionalProperties": {
"anyOf": [
{
"$ref": "#/components/schemas/Level"
},
{
"$ref": "#/components/schemas/EllipsisGrant"
},
{
"items": {
"anyOf": [
{
"$ref": "#/components/schemas/Level"
},
{
"$ref": "#/components/schemas/EllipsisGrant"
}
]
},
"type": "array"
}
]
},
"propertyNames": {
"$ref": "#/components/schemas/Resource"
},
"type": "object"
}
],
"default": true
},
"github": {
"additionalProperties": false,
"properties": {
"permissions": {
"anyOf": [
{
"type": "string"
},
{
"type": "object"
},
{
"type": "null"
}
]
},
"repositories": {
"anyOf": [
{
"type": "array"
},
{
"type": "null"
}
]
}
},
"type": "object"
}
},
"type": "object"
},
"skills": {
"default": [],
"items": {
"additionalProperties": false,
"properties": {
"path": {
"type": "string"
},
"repository": {
"anyOf": [
{
"type": "object"
},
{
"type": "null"
}
]
}
},
"required": [
"path"
],
"type": "object"
},
"type": "array"
},
"trigger": {
"anyOf": [
{
"oneOf": [
{
"additionalProperties": false,
"properties": {
"schedule": {
"type": "string"
},
"type": {
"type": "string"
}
},
"required": [
"schedule"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"issue": {
"type": "object"
},
"linear_issue": {
"type": "object"
},
"pull_request": {
"type": "object"
},
"push": {
"type": "object"
},
"sentry": {
"type": "object"
},
"slack_channel": {
"type": "object"
},
"type": {
"type": "string"
}
},
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"platforms": {
"type": "array"
},
"type": {
"type": "string"
}
},
"type": "object"
}
]
},
{
"type": "null"
}
]
}
},
"type": "object"
},
"agent_config_source_details": {
"anyOf": [
{
"properties": {
"branch": {
"type": "string"
},
"path": {
"type": "string"
},
"repo_id": {
"type": "integer"
}
},
"required": [
"repo_id",
"path",
"branch"
],
"type": "object"
},
{
"type": "null"
}
]
},
"created_at": {
"format": "date-time",
"type": "string"
},
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"edited_by": {
"anyOf": [
{
"properties": {
"avatar_url": {
"type": "string"
},
"id": {
"type": "integer"
},
"login": {
"type": "string"
},
"type": {
"enum": [
"User",
"Organization",
"Bot",
"Mannequin"
],
"type": "string"
}
},
"required": [
"id",
"login",
"type",
"avatar_url"
],
"type": "object"
},
{
"type": "null"
}
]
},
"id": {
"type": "string"
},
"last_session_created_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"last_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"last_sync_error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"last_synced_commit_sha": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"managed_by": {
"enum": [
"github",
"api"
],
"type": "string"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"pending_pull_request_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"sha": {
"type": "string"
},
"updated_at": {
"format": "date-time",
"type": "string"
}
},
"required": [
"id",
"sha",
"created_at",
"updated_at",
"managed_by",
"agent_config"
],
"type": "object"
},
"path": {
"type": "string"
},
"pull_request_url": {
"type": "string"
}
},
"required": [
"config",
"path",
"pull_request_url"
],
"type": "object"
}Request
config_idstringrequired
pathstring
File path within the repo. Omit for the default agents/<slug>.yaml; if set it must be a location the config sync scans (a .yaml/.yml file under agents/, .agents/, ellipsis/, or .ellipsis/ at any depth).
repositorystringrequired
Repository name within the caller's account; the owner is always the account, so pass a bare name (e.g. "my-service"), not "owner/my-service".