Skip to content

code_execute

Execute Node.js code on-demand in a secure Kubernetes sandbox environment.

Description

The code_execute tool runs your Node.js code as an isolated Kubernetes Job and returns the results. It supports NPM package installation, custom resource limits, and secret injection.

Parameters

ParameterTypeRequiredDescription
codestring✅ YesJavaScript/TypeScript code to execute
runtimestringNoRuntime version (default: node18)
paramsobjectNoExecution parameters
params.cpustringNoCPU limit (e.g., "500m", "1")
params.memorystringNoMemory limit (e.g., "512Mi", "1Gi")
params.timeoutSecondsnumberNoMax execution time (1-300 seconds)
params.secretsstring[]NoArray of secret names to inject as env vars

Response

typescript
{
  "executionId": "exec_abc123def456",
  "status": "running" | "completed" | "failed",
  "result": any, // Returned value from your code
  "logs": string, // stdout/stderr output
  "credits": {
    "used": 10,
    "remaining": 990
  },
  "timing": {
    "started": "2025-01-08T10:30:00Z",
    "completed": "2025-01-08T10:30:05Z",
    "duration": 5000 // milliseconds
  }
}

Examples

Basic Execution

typescript
{
  "code": "console.log('Hello, Actify!'); return { message: 'Success' };",
  "runtime": "node18"
}

With NPM Packages

typescript
{
  "code": `
    const axios = require('axios');
    const response = await axios.get('https://api.github.com/users/octocat');
    return response.data;
  `,
  "runtime": "node18",
  "params": {
    "timeoutSeconds": 30
  }
}

With Custom Resources

typescript
{
  "code": `
    // CPU-intensive task
    const result = Array.from({ length: 1000000 }, (_, i) => i * i);
    return result.length;
  `,
  "runtime": "node18",
  "params": {
    "cpu": "1",
    "memory": "1Gi",
    "timeoutSeconds": 60
  }
}

With Secrets

typescript
{
  "code": `
    const apiKey = process.env.OPENAI_API_KEY;
    const axios = require('axios');

    const response = await axios.post('https://api.openai.com/v1/chat/completions', {
      model: 'gpt-4',
      messages: [{ role: 'user', content: 'Hello!' }]
    }, {
      headers: { 'Authorization': \`Bearer \${apiKey}\` }
    });

    return response.data;
  `,
  "runtime": "node18",
  "params": {
    "timeoutSeconds": 30,
    "secrets": ["OPENAI_API_KEY"]
  }
}

File Operations

typescript
{
  "code": `
    const fs = require('fs').promises;

    // Write file
    await fs.writeFile('/tmp/output.json', JSON.stringify({
      timestamp: Date.now(),
      data: [1, 2, 3]
    }));

    // Read file
    const content = await fs.readFile('/tmp/output.json', 'utf-8');
    return JSON.parse(content);
  `,
  "runtime": "node18"
}

Credit Usage

Code execution consumes credits based on:

  • CPU usage: 1 credit per 100ms of CPU time
  • Memory usage: 1 credit per 100MB allocated
  • Duration: 1 credit per second of execution

Base cost: 10 credits minimum per execution

Runtime Specifications

node18 (Default)

  • Node.js 18.x LTS
  • Full npm package ecosystem
  • ES Modules and CommonJS support
  • Built-in modules: fs, path, crypto, http, etc.

Resource Limits

  • CPU: 100m to 2 cores
  • Memory: 128Mi to 2Gi
  • Timeout: 1 to 300 seconds
  • Disk: 1Gi ephemeral storage

Error Handling

Common Errors

Timeout Error

json
{
  "error": {
    "code": "EXECUTION_TIMEOUT",
    "message": "Execution exceeded 30 seconds timeout"
  }
}

Out of Memory

json
{
  "error": {
    "code": "OUT_OF_MEMORY",
    "message": "Container exceeded memory limit of 512Mi"
  }
}

Package Not Found

json
{
  "error": {
    "code": "NPM_INSTALL_FAILED",
    "message": "Failed to install package: axios@999.0.0"
  }
}

Insufficient Credits

json
{
  "error": {
    "code": "INSUFFICIENT_CREDITS",
    "message": "Not enough credits. Required: 100, Available: 50"
  }
}

Best Practices

1. Set Appropriate Timeouts

typescript
// For quick tasks
{ "params": { "timeoutSeconds": 10 } }

// For API calls
{ "params": { "timeoutSeconds": 30 } }

// For heavy processing
{ "params": { "timeoutSeconds": 120 } }

2. Use Resource Limits

typescript
// Prevent excessive usage
{
  "params": {
    "cpu": "500m",
    "memory": "512Mi",
    "timeoutSeconds": 30
  }
}

3. Handle Errors Gracefully

typescript
{
  "code": `
    try {
      const result = await riskyOperation();
      return { success: true, data: result };
    } catch (error) {
      return { success: false, error: error.message };
    }
  `
}

4. Clean Up Resources

typescript
{
  "code": `
    const fs = require('fs').promises;

    try {
      await fs.writeFile('/tmp/temp.txt', 'data');
      // ... do work ...
    } finally {
      await fs.unlink('/tmp/temp.txt').catch(() => {});
    }
  `
}

See Also