This directory contains usage examples for Bubblewrap.
# Build first
npm run build
# Run an example
npm run dev examples/generic-command.ts
# or
node --loader tsx examples/generic-command.tsShows how to run any command in the sandbox.
npm run dev examples/generic-command.tsExamples of running:
- ls, ls -la
- python scripts
- npm commands
- git commands
- Any other CLI tool
Demonstrates convenience wrappers for common tools:
GenericToolWrapper- npm, git, python, nodeAiderWrapper- Aider-specific wrapperCodePuppyWrapper- code-puppy-specific wrapper
npm run dev examples/tool-wrappers.tsOriginal example showing Aider-specific usage.
npm run dev examples/basic.tsNote: Requires Aider to be installed (pip install aider-chat).
Shows advanced configuration:
- Custom allowed/denied domains
- Custom allowed/denied paths
- Auto-approval settings
- Event listeners
npm run dev examples/custom-config.tsDemonstrates the permission system:
- Different permission types
- Approval flows
- Time-limited permissions
- Permission revocation
npm run dev examples/permissions.tsimport { CommandWrapper } from 'bubblewrap';
const wrapper = new CommandWrapper({ workingDir: process.cwd() });
await wrapper.initialize();
const result = await wrapper.execute(['ls', '-la']);
console.log(result.stdout);
await wrapper.shutdown();import { GenericToolWrapper } from 'bubblewrap';
const tool = new GenericToolWrapper({ workingDir: process.cwd() });
await tool.initialize();
await tool.runNpm('test');
await tool.runGit(['status']);
await tool.shutdown();wrapper.on('permission-required', (data) => {
console.log(`Permission: ${data.type} for ${data.resource}`);
data.approve(); // or data.deny()
});
wrapper.on('network-approval-required', (data) => {
console.log(`Network: ${data.domain}`);
data.approve(); // or data.deny()
});- Create a new
.tsfile in this directory - Import from
'../src/index.js' - Use CommandWrapper or tool-specific wrappers
- Handle events (permission-required, network-approval-required)
- Always call
shutdown()in finally block