Axle v1.3.0
A modular CLI platform for running Python microtools from a shared tools directory.
🚀 Quick Install
pip install git+https://github.com/skpaul82/axle-cli.git
Or clone manually:
git clone https://github.com/skpaul82/axle-cli.git
cd axle-cli
pip install -r requirements.txt
pip install -e .
Note: PyPI installation (
pip install axle-cli) is planned for a future release.
🎉 What's New in v1.3.0
🖱️ Interactive Arrow-Key Menu
Run axle with no arguments to get a full interactive tool picker — navigate with ↑↓ arrow keys, press Enter to select, then type your arguments:
axle # opens interactive menu
⚡ Direct Tool Execution (No axle run needed)
Run any tool directly by name or number — flags pass straight through to the tool:
axle competitor_analysis --urls https://rival.com --target-keyword "web developer"
axle 4 --urls https://rival.com --target-keyword "web developer"
axle content_optimizer --url https://mysite.com --target-keyword "cloud hosting"
axle 5 --url https://mysite.com --target-keyword "cloud hosting"
axle content_optimizer --file article.html --target-keyword "SaaS" --competitors c1.html c2.html
axle content_optimizer --text "Your content here..." --target-keyword "best crm software"
axle seo_keyword_checker "target keyword to analyse"
📌 Per-Tool Example Commands
Running axle tool_name or axle N with no extra args now shows that tool's own usage examples (pulled from its Usage: docstring, automatically converted to axle syntax):
axle competitor_analysis # shows examples for this tool
axle 4 # same — works by number too
axle help content_optimizer # same, via help command
🔍 Simplified axle help
axle help <tool> now shows only: name → summary → examples. Use --details for the full options list and function inventory:
axle help content_optimizer # clean summary + examples
axle help content_optimizer --details # full argparse options + functions
📦 Features
🖱️ Interactive Mode
- Launch
axlewith no arguments on a real terminal to get an arrow-key tool picker - Navigates with ↑↓ / j k, Enter to select, q to quit
- After selection: context-aware argument prompt (flags / prompt / function)
- Echoes the resolved command before running
⚡ Direct Execution
axle <tool_name> [flags]— run without going throughaxle runaxle <N> [flags]— run by tool numberaxle <tool_name> <function> [args]— call specific function in multi-function toolsaxle <tool_name>alone → shows tool examples, never errors
📌 Smart Per-Tool Help
- Examples extracted automatically from each tool's
Usage:docstring python tool.py --args→ shown asaxle tool_name --argsaxle help <tool> --detailsfor full argparse options + function list
🔒 Optional Security Validation
- Pre-execution security scan (disabled by default)
- Enable per-run:
axle run <tool> --security - Enable globally:
axle security --enable - Policies: strict / warn / permissive
🔍 Optional Code Review
- Automatic code quality checks before running (disabled by default)
- Enable per-run:
axle run <tool> --code-review - Enable globally:
axle review --enable - Auto-fixes formatting and import issues
🧠 Intelligent Tool Discovery
- Works with any Python script — no contract required
- Auto-detects argparse-based tools, contract tools, and multi-function scripts
- Extracts functions, docstrings, and usage examples automatically
🛠️ Commands
Running Tools
| Command | Description |
|---|---|
axle |
Interactive arrow-key tool picker |
axle <tool_name> |
Show tool examples (no args) or run directly |
axle <N> |
Same, by tool number |
axle <tool_name> [--flags] |
Run tool with flags passed through |
axle <N> [--flags] |
Same, by number |
Built-in Commands
| Command | Description |
|---|---|
axle list |
List all available tools |
axle run <tool> [args] |
Run a tool (classic syntax) |
axle run <tool> --security |
Run with security validation |
axle run <tool> --code-review |
Run with code review |
axle help <tool> |
Show tool examples |
axle help <tool> --details |
Show full options + function list |
axle info <tool> |
Show tool description |
axle scan |
Dependency vulnerability scan |
axle doctor |
Environment diagnostics |
axle path |
Show tools folder location |
axle security --enable/--disable/--show |
Configure security |
axle review --enable/--disable/--show |
Configure code review |
axle update |
Update to latest version |
axle update --check |
Check for updates |
axle metadata scan/show/search/list |
Tool metadata system |
axle -V |
Show version |
💡 Real-World Examples
# SEO competitor analysis
axle competitor_analysis --urls https://rival1.com https://rival2.com --target-keyword "web developer"
axle 4 --urls https://rival1.com https://rival2.com --target-keyword "web developer"
# Content optimization
axle content_optimizer --url https://mysite.com/blog --target-keyword "cloud hosting"
axle content_optimizer --file article.html --target-keyword "SaaS" --competitors c1.html c2.html
axle content_optimizer --text "Your content here..." --target-keyword "best crm software"
# SEO keyword analysis (prompt-based)
axle seo_keyword_checker "python is great for data science"
# See all tools interactively
axle
# Get help for a specific tool
axle help competitor_analysis
axle help competitor_analysis --details
🧱 Requirements
- Python 3.10+
- RAM: 8 GB minimum, 16 GB preferred
- Disk: 5–8 GB free (for ML models and caches)
🔧 Adding Your Own Tools
Axle works with any Python script. Just drop it in your tools/ directory.
Argparse-based tool (recommended for flag-driven tools)
import argparse
def main():
parser = argparse.ArgumentParser(description="My Tool")
parser.add_argument("--input", required=True)
parser.add_argument("--output", default="out.json")
args = parser.parse_args()
# your logic here
if __name__ == "__main__":
main()
Run it as:
axle my_tool --input data.csv
Contract-based tool (for prompt-driven tools)
def get_description() -> str:
return "Brief description of what this tool does"
def main(prompt: str) -> None:
print(f"Processing: {prompt}")
Run it as:
axle my_tool "your prompt here"
Tool numbering
Use XX_tool_name.py for ordering:
tools/
01_seo_keyword_checker.py
02_meta_tag_auditor.py
04_my_tool.py
Find your tools directory: axle path
📝 Docs
docs/index.md— overviewdocs/usage.md— how to use toolsdocs/commands.md— complete command referencedocs/security.md— security validationdocs/installation.md— step-by-step setupdocs/changelog.md— version history
🌐 Community & Support
- ⭐ Star on GitHub: skpaul82/axle-cli
- 🐦 Follow on X: @_skpaul82
- 🌐 Website: www.axle.sanjoypaul.com
- 🌐 FB Group: Agentic AIO
📄 License
MIT License – see LICENSE for details.
♥ Built for the community. ♥ Shared with love for creators, builders, and learners.
Metadata
Release files for axle-cli 1.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| axle_cli-1.3.0.tar.gz | 89.5 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| axle_cli-1.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 193.5 kB
Release files / axle_cli-1.3.0.tar.gz
| Download URL | axle_cli-1.3.0.tar.gz |
|---|---|
| Size | 89.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
34ddf9814d8df0cf12def84a6b51392a9c9ae71b0e56461e5b6b3821efc18a72
|
|
BLAKE2b-256 checksum How to use checksums |
3d6a28818a918ed39e401892d60ba21aec03ed5b728f850e4ed0ca5ce9442ac6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.20
|
Release files / axle_cli-1.3.0-py3-none-any.whl
| Download URL | axle_cli-1.3.0-py3-none-any.whl |
|---|---|
| Size | 104.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7b227e728b16f88498515647b080f791b0557ff653c33e79a7f5ead0cdaba786
|
|
BLAKE2b-256 checksum How to use checksums |
f91d0a81c8c5248c7ef9c99f3bdecfe6cf7229160a0a7f04e61891dcdaba3ce2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.20
|
Security for axle-cli 1.3.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.