Skip to main content

A drop-in shell execution wrapper for LLM agents that prevents hallucinated/destructive commands.

Project description

SecureShell (Alpha)

A "sudo for LLMs" - drop-in shell execution wrapper that prevents hallucinated/destructive commands through AI-powered gatekeeping.

Table of Contents

Installation

pip install secureshell

Quick Start

See examples/quickstart.py for a complete, production-ready example using OpenAI.

# 1. Set your API Key
export OPENAI_API_KEY=sk-...

# 2. Run the Quickstart Agent
python examples/quickstart.py

What happens?

  1. The Agent asks to list files (or whatever you prompt it to do).
  2. SecureShell intercepts the command.
  3. Green Tier commands (like ls, dir) run immediately.
  4. Yellow/Red Tier commands (like rm, git push) trigger the Gatekeeper LLM.
  5. The command runs (or is blocked) and output is returned to the Agent.

Security Templates

No YAML configuration required! Use pre-built security templates for common use cases:

from secureshell import SecureShell

# Choose a template that fits your use case
shell = SecureShell(template="paranoid")     # 🔒 Maximum security
shell = SecureShell(template="development")  # 🛠️  Local dev friendly
shell = SecureShell(template="production")   # 🏭 Production safe
shell = SecureShell(template="ci_cd")        # 🚀 CI/CD optimized

Template Quick Reference

Template Best For Allowlist Highlights Blocklist Highlights
🔒 paranoid Untrusted agents ls, pwd, echo, cat rm, dd, chmod, sudo, curl, wget
🛠️ development Local development git, npm, pip, node, python dd, mkfs, sudo
🏭 production Production systems ls, pwd, echo, cat rm, dd, chmod, sudo, mkfs
🚀 ci_cd CI/CD pipelines git, npm, pip, docker, node dd, mkfs, sudo

📖 Full documentation: examples/SECURITY_TEMPLATES.md
🎯 Try it: Run python examples/templates_demo.py to see all templates in action.

Features

  • Risk Tiers: Regex-based instantaneous classification (Green/Yellow/Red).
  • Gatekeeper LLM: Uses a separate LLM call to evaluate intent and safety for risky commands.
  • Challenge Mode: Gatekeeper can request clarification for ambiguous commands (ALLOW/DENY/CHALLENGE).
  • Security Templates: Pre-built configurations for common use cases (paranoid, development, production, ci_cd).
  • YAML Configuration: Customize allowlist/blocklist rules via secureshell.yaml.
  • Multi-Provider Support: OpenAI, Anthropic, Gemini, DeepSeek, Groq, Ollama, llama.cpp.
  • Framework Integrations: OpenAI tools, LangChain, LangGraph, and Anthropic MCP.
  • Sandboxing: Prevents directory traversal (..) and restricts access to allowed paths.
  • Audit Logging: JSONL logs of every attempt, reasoning, and decision.

For detailed configuration and usage, see the sections below.

Configuration

YAML Configuration

SecureShell supports YAML-based configuration via a secureshell.yaml file in your working directory. This allows you to customize allowlist and blocklist rules without modifying code.

Example Configuration

allowlist:
  - "echo"
  - "ls"

blocklist:
  - "rm"
  - "dd"

See examples/config_test.py for a demonstration.

How It Works

  1. Allowlist: Command types (first word) matching these patterns bypass ALL security checks (including risk tiers and gatekeeper). Use with extreme caution!
  2. Blocklist: Command types matching these patterns are immediately blocked, regardless of risk tier or reasoning.
  3. Pattern Matching: Extracts the command type (first word) and matches exactly. For example, "rm" in the blocklist will block rm file.txt, rm -rf /, etc.

Environment Variables

SecureShell can be configured via environment variables with the SECURESHELL_ prefix:

  • SECURESHELL_OPENAI_API_KEY (or OPENAI_API_KEY) - API key for OpenAI provider
  • SECURESHELL_ANTHROPIC_API_KEY (or ANTHROPIC_API_KEY) - API key for Anthropic provider
  • SECURESHELL_GEMINI_API_KEY (or GEMINI_API_KEY) - API key for Google Gemini
  • SECURESHELL_DEBUG_MODE - Enable verbose debugging output (true/false)
  • SECURESHELL_PROVIDER - Default provider to use (openai, anthropic, gemini, ollama, etc.)

Programmatic Configuration:

You can also configure OS information programmatically:

shell = SecureShell(
    template="production",
    os_info="Windows  11 Enterprise"  # Tell the gatekeeper what OS you're on
)

The os_info parameter helps the LLM gatekeeper make OS-specific decisions (e.g., knowing that dir is Windows equivalent of ls).

See secureshell/config.py for all available options.

Challenge Mode

SecureShell's gatekeeper can return three decision types:

  • ALLOW - Command is safe and will be executed
  • DENY - Command is rejected due to safety concerns
  • CHALLENGE - Gatekeeper needs more information or clarification

When CHALLENGE is Returned

The gatekeeper returns CHALLENGE when:

  • Reasoning provided is vague or unclear
  • Intent is ambiguous or missing context
  • More information is needed to make a safe decision
  • The scope of the command is uncertain

Example

See examples/challenge_demo.py for a full demonstration.

Providers

SecureShell supports multiple LLM providers for the gatekeeper. All providers implement the same interface, making it easy to switch between them.

Supported Providers

Cloud-Based

  • OpenAI - GPT-4.1, GPT-4.1-mini, GPT-5.2
  • Anthropic - Claude Sonnet 4.5, Claude Haiku 4.5
  • Google Gemini - Gemini 2.5 Flash, Gemini 2.5 Flash Lite
  • DeepSeek - DeepSeek models (OpenAI-compatible)
  • Groq - Fast inference (OpenAI-compatible)

Local Models

  • Ollama - Easiest local setup (llama3.1, mistral, codellama, etc.)
  • llama.cpp - Maximum control for advanced users

Quick Provider Examples

# OpenAI
from secureshell.providers.openai import OpenAI
provider = OpenAI(api_key="sk-...", model="gpt-4.1-mini")

# Anthropic
from secureshell.providers.anthropic import Anthropic
provider = Anthropic(api_key="sk-ant-...", model="claude-sonnet-4-5")

# Google Gemini
from secureshell.providers.gemini import Gemini
provider = Gemini(api_key="AIza...", model="gemini-2.5-flash")

# Ollama (local)
from secureshell.providers.ollama import Ollama
provider = Ollama(model="llama3.1", base_url="http://localhost:11434")

# llama.cpp (local)
from secureshell.providers.llama_cpp import LlamaCpp
provider = LlamaCpp(model="llama-3.1-8b", base_url="http://localhost:8080")

# Use with SecureShell
shell = SecureShell(provider=provider)

For detailed provider examples, see examples/providers/.

Integrations

SecureShell integrates with popular LLM frameworks and tools:

OpenAI Function Calling

from secureshell import SecureShell
from secureshell.providers.openai import OpenAITools

tools = [OpenAITools.get_tool_definition()]

# Pass 'tools' to your OpenAI client...

LangChain

from secureshell import SecureShell
from secureshell.integrations.langchain import SecureShellTool

# Create tool
shell_tool = SecureShellTool(provider=...)

# Use with LangChain agents

See examples/langchain_example.py for details.

LangGraph

SecureShell works seamlessly with LangGraph for multi-agent workflows.

See examples/langgraph_example.py for a complete example.

Anthropic MCP (Claude Desktop)

To use SecureShell with Claude Desktop:

  1. Install with MCP extras:
    pip install secureshell[anthropic]
    
  2. Configure claude_desktop_config.json:
    {
      "mcpServers": {
        "secureshell": {
          "command": "python",
          "args": ["-m", "secureshell.integrations.mcp"]
        }
      }
    }
    

See MCP.md for detailed setup instructions.

Customizing Rules

Risk Tiers

Commands are automatically classified into risk tiers:

  • GREEN: Auto-allow (ls, pwd, echo)
  • YELLOW: Gatekeeper review (rm, git push)
  • RED: Strict review (rm -rf, sudo)
  • BLOCKED: Always deny (dd, mkfs, fork bombs)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

secureshell-0.2.0.tar.gz (72.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

secureshell-0.2.0-py3-none-any.whl (39.0 kB view details)

Uploaded Python 3

File details

Details for the file secureshell-0.2.0.tar.gz.

File metadata

  • Download URL: secureshell-0.2.0.tar.gz
  • Upload date:
  • Size: 72.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.2

File hashes

Hashes for secureshell-0.2.0.tar.gz
Algorithm Hash digest
SHA256 1ee2be4874384fe9bb217c9a75b2dc0ebc5bda0ecfac31b03246ec8cacbb2a73
MD5 c22fd80e3e6c5a627ac43867fb1a4737
BLAKE2b-256 b75a5e2c8c7b31dbbab27b5572166430cb5400a49b85dbb06803bbdafcd00220

See more details on using hashes here.

File details

Details for the file secureshell-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: secureshell-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 39.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.2

File hashes

Hashes for secureshell-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fec2e0c7bf81180776bce3c8afb38b094274553a8c821772152a8613c8a3f268
MD5 71eb566297def95cff972a9b45cb282f
BLAKE2b-256 3a15594c22128f961dff42165a692acfa4d905df2149355dddcf175a75ac6af5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page