apexe¶
Outside-In CLI-to-Agent Bridge — automatically wraps existing CLI tools into governed apcore modules, served via MCP.
What is apexe?¶
apexe scans any CLI tool on your system (e.g., git, curl, ls, jq), deterministically extracts its command structure, flags, and arguments — then exposes them as governed MCP tools that AI agents can invoke safely.
No LLM required for scanning. No changes to the CLI tools. Zero-config governance.
Key capabilities¶
- Scan — Three-tier deterministic engine (--help → man pages → shell completions) with 4 built-in parsers (GNU, Click, Cobra, Clap)
- Schema — Generates JSON Schema with type mapping, format hints (
path,uri), defaults, enums, and required fields - Serve — MCP server via apcore-mcp (stdio / streamable-http / SSE) with JWT auth and Explorer UI
- Govern — Behavioral annotations (readonly/destructive/idempotent), flag boosting (
--force→ requires_approval), default-deny ACL, audit logging - AI Guidance — Every error includes
ai_guidanceto help agents self-correct; non-zero exit codes return stderr context
Built on the apcore ecosystem¶
| Crate | Role |
|---|---|
| apcore 0.14 | Module trait, Registry, ACL, ModuleError, Context |
| apcore-toolkit 0.4 | ScannedModule, YAMLWriter, DisplayResolver |
| apcore-mcp 0.11 | MCP server with middleware, auth, Explorer UI |
| apcore-cli 0.3 | AuditLogger, Sandbox |
Installation¶
Requires Rust 1.75+ and Cargo.
git clone https://github.com/aiperceivable/apexe.git
cd apexe
cargo install --path .
apexe --version
Quick Start¶
# Scan git — extracts commands, flags, types, annotations
apexe scan git
# See what was generated
apexe list
# Start MCP server (Claude Desktop / Cursor)
apexe serve
# Or HTTP with browser-based tool explorer
apexe serve --transport http --port 8000 --explorer
Claude Desktop integration¶
apexe serve --show-config claude-desktop
# Copy output to ~/Library/Application Support/Claude/claude_desktop_config.json
# Restart Claude Desktop — git commands appear as MCP tools
Cursor integration¶
Commands¶
apexe scan <TOOLS>...¶
Scan CLI tools and generate binding files + ACL rules.
apexe scan ls jq curl # Scan multiple tools
apexe scan git --depth 3 # 3 levels of subcommands (default: 2, max: 5)
apexe scan git --no-cache # Force re-scan
apexe scan git --format json # Output as JSON (also: yaml, table)
apexe scan git --output-dir ./out # Custom output directory
apexe serve¶
Start MCP server for scanned tools.
apexe serve # stdio (default)
apexe serve --transport http --port 8000 # HTTP
apexe serve --transport http --port 8000 --explorer # HTTP + browser UI
apexe serve --transport sse --port 8000 # Server-Sent Events
apexe serve --show-config claude-desktop # Print integration config
apexe serve --name my-tools # Custom server name
apexe list¶
List registered modules.
apexe config¶
Show or initialize configuration.
apexe config --show # Print resolved config (YAML)
apexe config --init # Create ~/.apexe/config.yaml
How It Works¶
CLI Tool Binary
|
v
+--------------------+
| Scanner Engine | <-- Tier 1: --help (GNU/Click/Cobra/Clap)
| | <-- Tier 2: man pages (DESCRIPTION + OPTIONS)
| | <-- Tier 3: shell completions (subcommand discovery)
+---------+----------+
| ScannedCLITool
v
+--------------------+
| Adapter Layer | <-- module IDs, JSON Schema, annotations, display metadata
+---------+----------+
| ScannedModule (apcore-toolkit)
|
+-----+-----+
| |
v v
+--------+ +------------------+
| Output | | MCP Server |
| .yaml | | apcore-mcp |
| ACL | | stdio/http/sse |
| Audit | | middleware+auth |
+--------+ +------------------+
Behavioral annotations¶
| Signal | Inference |
|---|---|
Command list, show, status, get |
readonly: true, cacheable: true |
Command delete, rm, kill, destroy |
destructive: true, requires_approval: true |
Flag --force, -f, --hard |
Escalates to requires_approval: true |
Flag --dry-run, --check, --simulate |
idempotent: true |
Schema generation¶
| CLI Type | JSON Schema |
|---|---|
--message "hello" |
"type": "string" |
--count 5 |
"type": "integer" |
--config /path |
"type": "string", "format": "path" |
--url https://... |
"type": "string", "format": "uri" |
--format json\|yaml |
"type": "string", "enum": ["json","yaml"] |
--include a --include b |
"type": "array", "items": {"type":"string"} |
Configuration¶
Resolved in 4 tiers (highest wins): CLI flags > env vars > config file > defaults
| Env Variable | Default | Description |
|---|---|---|
APEXE_MODULES_DIR |
~/.apexe/modules |
Binding file storage |
APEXE_CACHE_DIR |
~/.apexe/cache |
Scan cache |
APEXE_LOG_LEVEL |
info |
Log level |
APEXE_TIMEOUT |
30 |
CLI subprocess timeout (seconds) |
APEXE_SCAN_DEPTH |
2 |
Subcommand recursion depth |
File Locations¶
| Path | Purpose |
|---|---|
~/.apexe/config.yaml |
Configuration |
~/.apexe/modules/*.binding.yaml |
Generated tool bindings |
~/.apexe/cache/ |
Scan result cache |
~/.apexe/acl.yaml |
Access control rules |
~/.apexe/audit.jsonl |
Audit trail |
Examples¶
See examples/README.md for full details.
| Example | Description | Run |
|---|---|---|
| basic | Shell script: scan → list → serve | ./examples/basic/run.sh |
| programmatic | Rust library: scan → convert → export OpenAI tools → build MCP server | cargo run --example programmatic |
Developer Guide¶
Build & Test¶
cargo build # Build
cargo test --all-features # Run tests (~338)
cargo test -- --include-ignored # Include integration tests
cargo clippy --all-targets --all-features -- -D warnings # Lint
cargo fmt --all -- --check # Format check
cargo run --example programmatic # Run example
Adding a Custom Parser¶
Implement the CliParser trait in src/scanner/protocol.rs:
pub trait CliParser: Send + Sync {
fn name(&self) -> &str;
fn can_parse(&self, help_text: &str) -> bool;
fn parse(&self, help_text: &str, tool_name: &str) -> anyhow::Result<ParsedHelp>;
fn priority(&self) -> u32; // lower = tried first
}
Logging¶
Documentation¶
| Document | Description |
|---|---|
| Quick Start | Get running in 30 seconds |
| User Manual | Full reference — commands, config, scanning, schema generation, annotations, governance, MCP server, AI integration, error handling |
| Examples | Shell script walkthrough + Rust library API usage |
| Changelog | Release history and migration notes |
Architecture & Design¶
| Document | Description |
|---|---|
| Technical Design | v0.1.0 architecture with apcore ecosystem integration |
| Feature Manifest | Module map, crate dependencies, project status |
| Feature Specs | Detailed specifications for features F1-F7 |
Feature Specs¶
| Spec | Description |
|---|---|
| F1: Scanner Adapter | ScannedCLITool → ScannedModule conversion |
| F2: Module Executor | apcore Module trait for CLI subprocess execution |
| F3: Binding Output | apcore-toolkit YAMLWriter integration |
| F4: MCP Server | apcore-mcp server builder |
| F5: Governance | ACL + AuditLogger + Sandbox wrappers |
| F6: Error Migration | ApexeError → ModuleError conversion |
| F7: Config Integration | apcore Config integration |
License¶
Apache-2.0