Documentation Index
Fetch the complete documentation index at: https://docs.in10nt.ai/llms.txt
Use this file to discover all available pages before exploring further.
Overview
Instances are VMs running the in10nt agent server. They provide isolated environments for executing AI coding tasks.
Create Instance
Static method (zero-config)
import { Instance } from '@in10nt/sdk';
const instance = await Instance.create({
name: 'my-agent',
description: 'My coding agent',
agentType: 'opencode', // 'opencode' or 'moltbot'
containerTemplateId: 'tmpl_12345', // Optional: custom template
vmSize: 'shared-cpu-4x', // Optional: VM size
region: 'iad', // Optional: region
env: { API_KEY: 'secret' } // Optional: env vars
});
Via client
import { In10ntClient } from '@in10nt/sdk';
const client = new In10ntClient();
const instance = await client.instances.create({
name: 'my-agent',
description: 'My coding agent'
});
Agent Types
| Type | Description | Min Size |
|---|
opencode | Default agent (OpenCode) | shared-cpu-1x |
moltbot | Moltbot/Clawdbot agent | shared-cpu-8x (2GB) |
Moltbot requires at least 2GB RAM and automatically upgrades to shared-cpu-8x if needed
Parameters
| Parameter | Type | Description |
|---|
name | string | Required - Instance name |
description | string | Required - Description |
agentType | string | Agent type: opencode or moltbot (default: opencode) |
containerTemplateId | string | Container template ID |
vmSize | string | VM size (default: shared-cpu-4x) |
region | string | Region code (default: iad) |
env | object | Environment variables |
Response
{
instanceId: "inst_abc123",
name: "my-agent",
status: "healthy",
agentUrl: "http://machine-id.vm.app.internal:3000",
createdAt: "2025-01-06T..."
}
Connect to Existing Instance
const instance = await Instance.connect('inst_abc123');
// Or via client
const instance = await client.instances.get('inst_abc123');
const instance = await client.instances.getByName('my-agent');
Integrations
Connect your agent to external services:
const instance = await client.instances.create({
name: 'discord-bot',
description: 'Discord bot agent',
agentType: 'moltbot', // Required for Discord
integrations: ['Discord', 'GitHub'],
integrationEnv: {
DISCORD_BOT_TOKEN: 'xxx',
DISCORD_GUILD_ID: 'xxx',
DISCORD_CHANNEL_ID: 'xxx',
GITHUB_TOKEN: 'xxx'
}
});
Supported Integrations
| Integration | Required Env Vars |
|---|
Discord | DISCORD_BOT_TOKEN, DISCORD_GUILD_ID, DISCORD_CHANNEL_ID |
Slack | SLACK_BOT_TOKEN |
GitHub | GITHUB_TOKEN |
Notion | NOTION_API_TOKEN |
Telegram | TELEGRAM_BOT_TOKEN |
Jira | JIRA_BASE_URL, JIRA_EMAIL, JIRA_API_TOKEN |
Voice | TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, TWILIO_FROM_NUMBER |
Voice integration supports both Twilio (required) and ElevenLabs (optional). Add ELEVENLABS_API_KEY, ELEVENLABS_VOICE_ID for text-to-speech.
Discord integration only works with agentType: 'moltbot'
Update Integrations
await instance.integrations.set({
integrations: ['GitHub', 'Notion'],
integrationEnv: { GITHUB_TOKEN: 'new_token' }
});
// Read current integrations
const config = await instance.integrations.get();
List Instances
// Static
const instances = await Instance.list();
// Via client
const instances = await client.instances.list();
instances.forEach(instance => {
console.log(`${instance.name}: ${instance.status}`);
});
Get Instance
Retrieve a specific instance by ID:
const instance = await Instance.connect('inst_abc123');
// or
const instance = await client.instances.get('inst_abc123');
Or by name:
const instance = await client.instances.getByName('my-agent');
Run Task
Execute a coding task on an instance (works for both OpenCode and Moltbot):
const result = await instance.run(
'Build a REST API with user CRUD operations',
{
model: 'anthropic/claude-sonnet-4.5', // Optional
timeout: 300_000, // Optional
maxTokens: 8000, // Optional
system: 'Custom system prompt' // Optional
}
);
console.log(result.response);
console.log(`Tokens used: ${result.tokensUsed}`);
console.log(`Duration: ${result.duration_ms}ms`);
The same .run() method works for both OpenCode and Moltbot instances. Moltbot instances automatically use optimized internal routing.
Complete Example with All Options
const result = await instance.run(
'Build a REST API with authentication',
{
model: 'anthropic/claude-sonnet-4.5',
timeout: 300_000,
pollInterval: 5_000,
maxPollTime: 120_000,
healthCheckRetries: 20,
healthCheckDelay: 3_000,
waitForHealth: true,
maxTokens: 8000,
system: 'You are a senior backend engineer',
background: false
}
);
Options
| Option | Type | Default | Description |
|---|
model | string | anthropic/claude-sonnet-4.5 | LLM model |
provider | string | openrouter | Model provider |
maxTokens | number | - | Max response tokens |
system | string | - | Custom system prompt |
timeout | number | 480000 | Timeout in ms |
pollInterval | number | 2000 | Poll interval in ms |
maxPollTime | number | 600000 | Max poll time in ms |
healthCheckRetries | number | 40 | Health check retry count |
healthCheckDelay | number | 5000 | Delay between health checks in ms |
waitForHealth | boolean | true | Wait for health before running |
background | boolean | false | Return taskId immediately |
tools | array | - | Custom tools for the agent |
autoTools | boolean | true | Enable automatic tool usage |
Background Mode
Run a task in the background and poll later:
const { taskId } = await instance.run('Build a web app', { background: true });
// ... do other work ...
// Poll when ready
const result = await instance.tasks.poll(taskId!);
console.log(result.response);
Tasks Namespace
List Tasks
const tasks = await instance.tasks.list();
Get Task Status
const status = await instance.tasks.getStatus(taskId);
// Returns: { status: 'processing' | 'completed' | 'failed', ... }
Poll Task
const result = await instance.tasks.poll(taskId, {
pollInterval: 2000, // Check every 2s
maxPollTime: 600000 // Timeout after 10min
});
Conversation Context
Instance maintains conversation history automatically. You can send multiple prompts:
const instance = await Instance.create({
name: 'web-builder',
description: 'Web project'
});
// First prompt
await instance.run('Create a simple REST API with user CRUD');
// Follow-up prompts (context maintained)
await instance.run('Add JWT authentication');
await instance.run('Add rate limiting middleware');
await instance.run('Write integration tests');
Instance Management
Health Check
Check if instance is ready:
const health = await instance.health();
console.log(health.status); // "healthy"
Execute Command
Run a command directly on the instance:
const output = await instance.execute('ls -la /workspace');
Refresh Status
Update instance data:
await instance.refresh();
console.log(`Current status: ${instance.status}`);
Stop Instance
Restart Instance
await instance.restart();
Destroy Instance
await instance.destroy();
Destroy is permanent. Use stop() if you plan to restart later.
Files Namespace
Get Changes
Get files modified by the agent:
const changes = await instance.files.getChanges();
console.log('Modified files:', changes.files);
Filesystem Tree
const tree = await instance.files.tree();
Ports Namespace
Access dev servers running in your instance:
// List active ports
const ports = await instance.ports.list();
// Get proxy URL for a port
const url = instance.ports.getProxyUrl(5173);
// or shorthand
const url = instance.getProxyUrl(5173);
// Register ports manually
await instance.ports.open([5173, 3000, 8080]);
// List available tools
const tools = await instance.tools.list();
// Get MCP config
const mcp = await instance.tools.getMcpConfig();
Integrations Namespace
// Get current integrations
const config = await instance.integrations.get();
// Set / update integrations
await instance.integrations.set({
integrations: ['GitHub'],
integrationEnv: { GITHUB_TOKEN: 'xxx' }
});
Snapshots
Save and restore workspace state:
// Create snapshot
const { snapshotId } = await instance.snapshot();
// Restore from snapshot (via create with snapshotId)
const restored = await Instance.create({
name: 'restored',
description: 'Restored workspace'
});
Save & Clone Instance
Clone from saved templates (workspace snapshots):
// Snapshot an instance
await instance.snapshot();
// List saved templates
const saved = await client.savedTemplates.list();
// Clone from saved template
const clone = await client.instances.createFromSavedTemplate({
templateName: 'my-template',
newInstanceName: 'new-instance'
});
// Delete a saved template
await client.savedTemplates.delete('old-template');
Stream Logs
// Node.js: install 'eventsource' package first
const stopStreaming = await instance.streamLogs((log) => {
console.log(`[${log.type}] ${log.message}`);
});
await instance.run('Build a web app');
stopStreaming();
Quick Examples
Basic Usage
const instance = await Instance.create({
name: 'my-agent',
description: 'Quick task'
});
await instance.run('Create a REST API');
await instance.destroy();
Multi-Step Session
const instance = await Instance.create({
name: 'session',
description: 'Multi-step project'
});
await instance.run('Initialize project');
await instance.run('Add authentication');
await instance.run('Write tests');
const changes = await instance.files.getChanges();
await instance.destroy();
Discord Bot (Moltbot)
const bot = await client.instances.create({
name: 'discord-bot',
description: 'My Discord bot',
agentType: 'moltbot',
integrations: ['Discord'],
integrationEnv: {
DISCORD_BOT_TOKEN: process.env.DISCORD_TOKEN,
DISCORD_GUILD_ID: '123456',
DISCORD_CHANNEL_ID: '789012'
}
});
// Bot automatically responds to Discord messages
// You can also run tasks directly via HTTP:
await bot.run('Add a /help command that lists all available features');
Voice Agent (Twilio + ElevenLabs)
const voiceAgent = await client.instances.create({
name: 'voice-assistant',
description: 'Voice-enabled AI agent',
integrations: ['Voice'],
integrationEnv: {
TWILIO_ACCOUNT_SID: process.env.TWILIO_ACCOUNT_SID,
TWILIO_AUTH_TOKEN: process.env.TWILIO_AUTH_TOKEN,
TWILIO_FROM_NUMBER: '+1234567890',
ELEVENLABS_API_KEY: process.env.ELEVENLABS_KEY,
ELEVENLABS_VOICE_ID: 'voice_id_here'
}
});
Moltbot with Custom Options
const moltbot = await client.instances.create({
name: 'custom-moltbot',
description: 'Moltbot with custom settings',
agentType: 'moltbot'
});
// Run task with custom options (same API as OpenCode)
const result = await moltbot.run(
'Analyze this codebase and suggest improvements',
{
model: 'anthropic/claude-sonnet-4.5',
maxTokens: 16000,
timeout: 900000 // 15 minutes for complex tasks
}
);
HTTP API Reference
Base URL: https://in10t-api-v2.fly.dev
Auth: Authorization: Bearer YOUR_API_KEY or X-API-Key: YOUR_API_KEY
Create Instance
curl -X POST https://in10t-api-v2.fly.dev/instances \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "my-agent",
"description": "My coding agent",
"agentType": "opencode",
"region": "iad",
"vmSize": "shared-cpu-4x"
}'
List Instances
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://in10t-api-v2.fly.dev/instances
Get Instance
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://in10t-api-v2.fly.dev/instances/{instanceId}
Run Task (OpenCode & Moltbot)
curl -X POST https://in10t-api-v2.fly.dev/instances/{instanceId}/run \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Build a REST API with user CRUD",
"model": "anthropic/claude-sonnet-4.5",
"timeout": 480000,
"max_tokens": 8000
}'
| Body Param | Type | Required | Description |
|---|
prompt | string | Yes | Task prompt |
model | string | No | LLM model (default: anthropic/claude-sonnet-4.5) |
provider | string | No | Model provider (default: openrouter) |
timeout | number | No | Timeout in ms (default: 480000) |
max_tokens | number | No | Max response tokens |
system | string | No | Custom system prompt |
async | boolean | No | Run asynchronously |
Stop Instance
curl -X POST https://in10t-api-v2.fly.dev/instances/{instanceId}/stop \
-H "Authorization: Bearer YOUR_API_KEY"
Destroy Instance
curl -X DELETE https://in10t-api-v2.fly.dev/instances/{instanceId} \
-H "Authorization: Bearer YOUR_API_KEY"
Restart Instance
curl -X POST https://in10t-api-v2.fly.dev/instances/{instanceId}/restart \
-H "Authorization: Bearer YOUR_API_KEY"
Get Health
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://in10t-api-v2.fly.dev/instances/{instanceId}/health
Get Changes
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://in10t-api-v2.fly.dev/instances/{instanceId}/changes"
Execute Command
curl -X POST https://in10t-api-v2.fly.dev/instances/{instanceId}/execute \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"command": "ls -la /workspace"}'
Create Snapshot
curl -X POST https://in10t-api-v2.fly.dev/instances/{instanceId}/snapshot \
-H "Authorization: Bearer YOUR_API_KEY"
List Ports
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://in10t-api-v2.fly.dev/instances/{instanceId}/ports
Open Ports
curl -X POST https://in10t-api-v2.fly.dev/instances/{instanceId}/open-ports \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"ports": [5173, 3000]}'
List Tasks
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://in10t-api-v2.fly.dev/instances/{instanceId}/tasks
Get Task Status
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://in10t-api-v2.fly.dev/instances/{instanceId}/tasks/{taskId}