Script Magic 🪄
Command-line script utility toolkit that simplifies common scripting tasks!
Features
-
🤖 AI-Powered Script Generation: Create Python scripts from natural language prompts using LiteLLM and Instructor, supporting:
- OpenAI models
- Anthropic Claude models
- Google Gemini models
-
☁️ GitHub Gist Integration: Store and manage scripts in GitHub Gists for easy sharing and versioning.
-
🔄 Simple Script Management: Run, update, edit, list, and delete your scripts with simple commands.
-
📦 Automatic Dependency Management: Script execution with
uvhandles dependencies automatically, based on PEP 723 metadata. -
🚀 Interactive Mode: Refine generated scripts interactively before saving.
-
🖋️ Built-in Code Editor: Edit scripts directly in your terminal with a Textual-based editor, featuring syntax highlighting and AI-powered editing capabilities.
-
🔄 Cross-Device Synchronization: Automatically sync your script inventory across devices using GitHub Gists.
-
🔎 Smart Gist Detection: Automatically finds your existing script mappings on GitHub.
-
🌐 Multi-Environment Support: Works seamlessly across different machines with the same GitHub account.
-
📝 PEP 723 Metadata: Generated scripts include PEP 723 metadata for dependency and runtime information.
-
✨ Enhanced Editing with AI: Edit existing scripts using natural language instructions, powered by AI.
-
🎛️ Configurable Models: Choose different AI models for script generation and editing.
Installation
Script Magic now uses uv for package management. Install uv first:
curl -LsSf https://astral.sh/uv/install.sh | sh
Then, install Script Magic:
pip install script-magic
Or, for the latest version directly from GitHub:
uv pip install git+https://github.com/yourusername/script-magic.git
Replace yourusername with the actual username.
Quick Install and Tool Install (Recommended)
# Clone the repository (Optional, but useful for development/contributing)
git clone https://github.com/yourusername/script-magic.git
cd script-magic
# Install with uv (ensures correct environment)
uv venv
uv pip install -e .
# Install as a tool using uv, forcing Python 3.13:
uv tool install --force --python 3.13 script-magic@latest
# Set up your environment variables
export OPENAI_API_KEY="your-openai-api-key" # Or your LiteLLM provider key
export MY_GITHUB_PAT="your-github-personal-access-token"
# Optional: Set up additional model provider keys if needed
export ANTHROPIC_API_KEY="your-anthropic-key"
export GOOGLE_API_KEY="your-gemini-key"
Important: The uv tool install command creates a separate, isolated environment for Script Magic. This helps avoid dependency conflicts. You must use uv run to execute scripts that have dependencies installed via PEP 723.
Usage
sm --help
Creating Scripts
Generate a new script from a natural language prompt:
sm create hello-world "Create a script that prints 'Hello, World!' with a timestamp."
Generate with interactive preview:
sm create fibonacci --preview "Generate a script to print the first 10 Fibonacci numbers."
Specify a different AI model:
sm create list-files --model "anthropic/claude-3-opus" "List files in a directory."
Creating Script Stubs
Create a script stub with boilerplate code that you can fill in:
sm code script-name "Description of what the script does"
This will:
- Create a script stub with PEP 723 metadata, argument parsing, and basic structure
- Upload to GitHub Gist (if
--publishis used and GitHub PAT is configured) - Update your local script inventory
- Open the script in your preferred editor
Options:
# Skip GitHub publishing
sm code local-script "My offline script" --no-publish
# Specify a custom editor to use
sm code new-tool "Command line utility" --editor "vim"
If a script with the same name already exists, Script Magic will open the existing script in your editor instead of creating a new one.
Running Scripts
Run a script that has been previously created:
sm run hello-world
Pass parameters to the script (Script Magic intelligently separates its own options from the script's arguments):
sm run hello-world --name="John"
Script Magic will automatically use uv run to execute the script in the correct environment, handling any dependencies.
Force refresh from GitHub before running:
sm run hello-world --refresh
Run a script in a new terminal window:
sm run visualize-data --in-terminal
The --in-terminal (-t) option runs the script in a new terminal window. This is useful for scripts with interactive elements or those producing visual output.
Listing Scripts
View all scripts in your inventory:
sm list
Show detailed information:
sm list --verbose
Pull the latest scripts from GitHub before listing:
sm list --pull
Push local changes to Github before listing:
sm list --push
Syncing Scripts
Push your local inventory and scripts to GitHub:
sm push
Pull the latest scripts and mapping from GitHub:
sm pull
Deleting Scripts
Remove a script:
sm delete script-name
Force deletion without confirmation:
sm delete script-name --force
Editing Scripts
Edit a script using the built-in Textual editor:
sm edit myscript
Use AI to modify the script during editing (Ctrl+P within the editor):
- Press Ctrl+P in the editor.
- Enter instructions like "Add a function to calculate the average."
- The AI will modify the script based on your instructions.
Specify a different model for AI-assisted editing:
sm edit myscript --model "anthropic/claude-3-opus"
GitHub Integration
Script Magic automatically handles GitHub synchronization:
- First-time users: Creates a new private Gist to store your script inventory.
- Existing users: Finds your existing script inventory Gists automatically.
- Multiple devices: Detects existing mappings and asks which version to keep.
Configuration
Script Magic stores configuration in the ~/.sm directory:
~/.sm/mapping.json: Maps script names to GitHub Gist IDs.~/.sm/gist_id.txt: Stores the ID of the Gist containing your mapping file.~/.sm/logs/: Log files for debugging.~/.sm/scripts/: Local copies of your scripts.
Structure
script-magic/
├── src/
│ └── script_magic/
│ ├── __init__.py # CLI entry point & command registration.
│ ├── ai_integration.py # AI script generation and editing.
│ ├── create.py # `create` command implementation.
│ ├── delete.py # `delete` command implementation.
│ ├── edit.py # `edit` command implementation (Textual TUI).
│ ├── github_gist_finder.py # Finds existing mapping Gists.
│ ├── github_integration.py # GitHub Gist API interaction.
│ ├── list.py # `list` command implementation.
│ ├── logger.py # Logging setup.
│ ├── mapping_manager.py # Manages the script mapping (local & GitHub).
│ ├── mapping_setup.py # Initializes mapping with GitHub sync.
│ ├── pep723.py # PEP 723 metadata parsing and updating.
│ ├── rich_output.py # Rich-based console output utilities.
│ └── run.py # `run` command implementation.
├── README.md
└── ...
Environment Variables
OPENAI_API_KEY: Your OpenAI API key (or key for your chosen LiteLLM provider).MY_GITHUB_PAT: GitHub Personal Access Token withgistscope.
Contributing
Contributions are welcome! Please submit a Pull Request.
- Fork the repository.
- Create your feature branch (
git checkout -b feature/amazing-feature). - Commit your changes (
git commit -m 'Add some amazing feature'). - Push to the branch (
git push origin feature/amazing-feature). - Open a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Acknowledgments
Development
To install development dependencies:
uv pip install -e '.[dev,syntax]'
Metadata
Release files for script-magic 1.10.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 | |
|---|---|---|---|
| script_magic-1.10.0.tar.gz | 112.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| script_magic-1.10.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 159.8 kB
Release files / script_magic-1.10.0.tar.gz
| Download URL | script_magic-1.10.0.tar.gz |
|---|---|
| Size | 112.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
71f3031b347e4b77192c71400a86cadb723f015360fae0200f6340a53b996ac0
|
|
BLAKE2b-256 checksum How to use checksums |
df8a3010540e20c710618cbc500449214bc64518ac52a567241b6a25858c8fc9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.5.14
|
Release files / script_magic-1.10.0-py3-none-any.whl
| Download URL | script_magic-1.10.0-py3-none-any.whl |
|---|---|
| Size | 47.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
094a04d2ef4868bb8080a8fdfa6f68b640667e3852af93bafcc13c6ca49aaaa4
|
|
BLAKE2b-256 checksum How to use checksums |
c435deeb918f52b0fe86296acc77daf4257bc8540e042e50d4b5ac21c30807aa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.5.14
|