Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

🤖 RunShell - A secure command execution framework designed for AI/LLM agents to safely interact with system operations.

Notifications You must be signed in to change notification settings

iamlongalong/runshell

Repository files navigation

RunShell

A secure command execution framework designed for AI/LLM agents to safely interact with system operations.

English 中文

CI Status Release Status Go Report Card codecov

Features

  • AI/LLM Integration

    • AI-friendly command interface
    • Secure execution environment
    • Perfect for LLM tool chains
    • Comprehensive audit logging
  • Execution Modes

    • Local command execution
    • Docker container isolation
    • Interactive shell
    • HTTP API service
  • Security Features

    • Command execution auditing
    • User permission control
    • Resource usage monitoring
    • Timeout control
  • Additional Features

    • Environment variable management
    • Working directory control
    • I/O stream handling
    • Error management

Quick Start

Installation

From Source

# Clone repository
git clone https://github.com/iamlongalong/runshell.git
cd runshell
# Install dependencies
make deps
# Build project
make build-local

Using Docker

# Build and run Docker container
make docker-build docker-run

Usage

Command Line

# Execute simple command
runshell exec -- ls -l
# Set working directory
runshell exec --workdir /tmp -- ls -l
# Set environment variables
runshell exec --env KEY=VALUE env
# Example of using Docker image
runshell exec --docker-image ubuntu:latest -- ls -l
runshell exec --docker-image busybox:latest --env KEY=VALUE env
runshell exec --docker-image busybox:latest --workdir /app -- python3 script.py
# Start HTTP server
runshell server --http :8080

HTTP API Examples

# Health check
curl http://localhost:8080/api/v1/health
# Execute command
curl -X POST http://localhost:8080/api/v1/exec \
 -H "Content-Type: application/json" \
 -d '{
 "command": "ls",
 "args": ["-l"],
 "workdir": "/tmp",
 "env": {"KEY": "VALUE"}
 }'
# List available commands
curl http://localhost:8080/api/v1/commands
# Get command help
curl http://localhost:8080/api/v1/help?command=ls
# Session Management
# Create new session, info: now does not support docker_config, only support options
curl -X POST http://localhost:8080/api/v1/sessions \
 -H "Content-Type: application/json" \
 -d '{
 "executor_type": "docker",
 "docker_config": {
 "image": "golang:1.20",
 "workdir": "/workspace",
 "bind_mount": "/local/path:/workspace"
 },
 "options": {
 "workdir": "/workspace",
 "env": {"GOPROXY": "https://goproxy.cn,direct"}
 }
 }'
# List all sessions
curl http://localhost:8080/api/v1/sessions
# Execute command in session
curl -X POST http://localhost:8080/api/v1/sessions/{session_id}/exec \
 -H "Content-Type: application/json" \
 -d '{
 "command": "ls",
 "args": ["-al"],
 "options": {
 "workdir": "/"
 }
 }'
# Delete session
curl -X DELETE http://localhost:8080/api/v1/sessions/{session_id}
# Interactive shell (WebSocket)
# npm install -g wscat
wscat -c ws://localhost:8080/api/v1/exec/interactive
# after connected, you can use the following commands:
# ls -al
# exit

Development Guide

Make Commands

The project provides a series of Make commands to simplify development and deployment:

Basic Operations

  • make - Run default operations (clean, test, build)
  • make clean - Clean build artifacts
  • make deps - Update dependencies
  • make help - Show all available commands

Testing

  • make test - Run all tests
  • make test-unit - Run unit tests only
  • make coverage - Generate coverage report

Building

  • make build - Build for all platforms
  • make build-local - Build for current platform only

Docker Operations

  • make docker-build - Build Docker image
  • make docker-run - Run Docker container
  • make docker-stop - Stop Docker container

Development Tools

  • make fmt - Format code
  • make lint - Check code style
  • make run - Run local server
  • make tag - Create new Git tag

Release Process

  1. Create Release Candidate:

    # Create RC tag
    git tag -a v1.0.0-rc.1 -m "Release candidate 1 for version 1.0.0"
    git push origin v1.0.0-rc.1
  2. Test Release Candidate:

    • GitHub Actions will automatically:
      • Create pre-release GitHub Release
      • Build and upload binaries
      • Build and push Docker RC image (:rc tag)
    • Download and test pre-release version
    • If issues found, fix and repeat steps 1-2, incrementing RC version
  3. Create Official Release:

    # Create release tag
    git tag -a v1.0.0 -m "Release version 1.0.0"
    git push origin v1.0.0

Docker Images

Docker images are available on Docker Hub:

# Use latest stable version
docker pull iamlongalong/runshell:latest
# Use pre-release version
docker pull iamlongalong/runshell:rc
# Use specific version
docker pull iamlongalong/runshell:v1.0.0

Contributing

  1. Fork the project
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Create a Pull Request

Before submitting code, please ensure:

  1. All tests pass (make test)
  2. Code meets standards (make lint)
  3. Documentation is updated
  4. Test cases are added

License

This project is licensed under the MIT License - see the LICENSE file for details.

Author

  • iamlongalong

Acknowledgments

Thanks to the following open source projects:

About

🤖 RunShell - A secure command execution framework designed for AI/LLM agents to safely interact with system operations.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /