This directory contains example sandbox configurations and tasks to help you get started with Aido.
A minimal read-only sandbox configuration for tasks that only need to analyze or inspect data.
Use cases:
- Log analysis
- Data inspection
- Report generation
- Code review
Run:
aido sandbox up -f sandbox.readonly.yaml
aido run tasks/analyze_logs.pyA sandbox configuration with write permissions for tasks that need to modify files.
--dangerous-allow-mutations flag
Use cases:
- File transformation
- Code generation
- Build processes
- Data migration
Run:
aido sandbox up -f sandbox.mutate.yaml
aido run tasks/transform.ts --dangerous-allow-mutationsA cloud-aware sandbox configuration for tasks that interact with AWS infrastructure.
Note: Cloud permissions are a stub in v0.1 and not yet functional.
Use cases:
- Infrastructure checks
- Resource auditing
- Configuration validation
- Cost analysis
A simple Python "Hello World" task that demonstrates:
- Reading from inputs (if available)
- Writing to outputs
- Logging to stdout
- Basic file operations
Run:
aido sandbox up
aido run examples/tasks/hello.py
aido logs
cat .aido/sandboxes/latest/outputs/hello.txtA Node.js/TypeScript version of the Hello World task.
Run:
aido sandbox up -f examples/sandbox.mutate.yaml
aido run examples/tasks/hello.tsA more realistic example that:
- Reads multiple log files from inputs
- Analyzes log levels and errors
- Generates JSON and Markdown reports
- Writes multiple outputs
Try it:
# Create sample log files
mkdir -p inputs
echo "[INFO] Application started" > inputs/app.log
echo "[ERROR] Database connection failed" >> inputs/app.log
echo "[WARN] Memory usage high" >> inputs/app.log
# Run analysis
aido sandbox up -f examples/sandbox.readonly.yaml
aido run examples/tasks/analyze_logs.py
# View results
cat .aido/sandboxes/latest/outputs/report.md
cat .aido/sandboxes/latest/outputs/analysis.json#!/usr/bin/env python3
import sys
from pathlib import Path
def main():
# Read inputs
inputs_dir = Path("/inputs")
# ... process inputs ...
# Write outputs
outputs_dir = Path("/outputs")
outputs_dir.mkdir(exist_ok=True)
output_file = outputs_dir / "result.txt"
output_file.write_text("Task complete!")
print("✓ Task completed successfully")
return 0
if __name__ == "__main__":
sys.exit(main())#!/usr/bin/env node
import { writeFileSync, mkdirSync } from 'fs';
import { join } from 'path';
function main(): number {
// Read inputs from /inputs
// Write outputs
const outputsDir = '/outputs';
mkdirSync(outputsDir, { recursive: true });
writeFileSync(
join(outputsDir, 'result.txt'),
'Task complete!',
'utf-8'
);
console.log('✓ Task completed successfully');
return 0;
}
process.exit(main());When your task runs inside a sandbox, it has access to:
/inputs/ # Read-only inputs (mounted from your workspace)
/work/ # Working directory (writable, ephemeral)
/outputs/ # Output directory (writable, persisted)
Tips:
- Always write results to
/outputs/ - Use
/work/for temporary files - Never try to write to
/inputs/(read-only)
- Try running the example tasks
- Modify them to suit your needs
- Create your own
sandbox.yamlconfigurations - Build custom tasks for your workflows
- Read
SANDBOX_SCHEMA.mdfor full schema documentation - Check
TECH_SPEC.mdfor implementation details - Open an issue if something's unclear
Remember: Trust comes from constraints. Start with readonly, graduate to mutations.