Skip to main content

Zero-Config AI-Powered Web UIs for ANY CLI Tool

Project description

Termify Logo

Termify

The Zero-Config, AI-Powered Web UI Engine for ANY CLI Tool.

Stars Forks Issues License

Stop writing Web UIs for your scripts. Let AI do it in less than 1 second.


🚀 The Massive Problem

Developers write thousands of incredibly useful CLI scripts (Python, Bash, Node.js, Go). However, non-technical teammates (PMs, Marketers, Sales, Designers) often can't use them because:

  1. The terminal is intimidating.
  2. They don't know how to install package dependencies.
  3. Passing complex arguments (flags, paths, enums) is highly error-prone.

Building a dedicated web dashboard (using React, Vue, Next.js, or even Streamlit) for every single internal script is a massive waste of engineering time. It takes days to build, style, and maintain.

⚡ The Solution: Termify

Termify solves this instantly and automatically.

By simply prepending termify to your command (e.g., termify python my_script.py), Termify uses a Large Language Model (Google Gemini) to dynamically execute your script's --help output, generates a structured JSON schema of all arguments, and instantly boots a gorgeous, interactive Glassmorphism Web UI on localhost:8000.

Your teammates can fill out a beautiful UI form, hit "Execute", and watch the terminal output stream live in their browser via WebSockets.

ZERO code changes required to your original script.

🎬 See it in action:

Your browser does not support the video tag.

✨ Why Termify is World-Class

  • 🪄 Absolute Zero-Config: No decorators (unlike @Gooey), no forced UI frameworks (unlike Gradio/Streamlit). It just works out of the box with your existing code.
  • 🌍 100% Language Agnostic: It doesn't care if you wrote your script in Bash, Go, Rust, Python, Node, or Ruby. If it responds to --help, Termify can webify it.
  • 🧠 AI-Powered Introspection: Uses Gemini 2.5 Flash to perfectly understand argument constraints, types, choices, and descriptions, mapping them perfectly to web UI elements (Toggles, Dropdowns, Date-pickers, Number inputs).
  • Real-time Streaming Engine: Streams stdout and stderr via WebSockets directly to an embedded, syntax-highlighted web terminal. It forces unbuffered execution so the text streams character-by-character exactly like a real terminal.
  • 🎨 Ultra-Premium UI: Ships with a visually stunning, responsive, dark-mode Glassmorphism UI built with Tailwind CSS. Complete with ambient glowing backgrounds and animated interactions.

🏗️ Deep Dive: How the Architecture Works

Termify operates in 5 distinct asynchronous stages:

graph TD
    A[User runs: termify ./script.sh] --> B(Introspection Phase);
    B -->|Executes ./script.sh --help| C(LLM Parsing Engine);
    C -->|Pipes raw text to Gemini AI| D{JSON Schema Generation};
    D -->|Identifies flags, types, defaults| E[FastAPI Server Boot];
    E -->|Serves Glassmorphism React UI| F(User Web Dashboard);
    F -->|User hits 'Execute'| G[WebSocket Command Reassembly];
    G -->|asyncio.subprocess unbuffered execution| H((Live Terminal Streaming));
    H -->|Pipes stdout/stderr| F;
  1. Introspection: Termify executes your command appended with --help (e.g., python script.py --help).
  2. AI Translation: The raw, unstructured help text is piped to Gemini, which is prompted to act as a strict structured data extractor. It returns a definitive JSON array of objects representing form fields (name, type, required, default, choices).
  3. Web Server Boot: A lightweight Python FastAPI server spins up on localhost.
  4. Dynamic Frontend Rendering: The frontend fetches the schema and dynamically constructs the UI. Booleans become toggle switches, enums become dropdowns, and strings become styled inputs.
  5. Execution & Streaming: When the user clicks Execute, the payload is sent back via WebSockets. asyncio.subprocess executes the reconstructed command with PYTHONUNBUFFERED=1 and streams the raw terminal output directly back to the browser's embedded terminal window.

📦 Installation

pip install termify-ai

🛠️ Advanced Usage Guide

1. Set your API Key

Termify uses Google Gemini to parse the CLI arguments dynamically. It is incredibly fast and highly cost-effective (often falling completely within the free tier).

export GEMINI_API_KEY="your_google_gemini_api_key"

(Tip: Add this to your ~/.zshrc or ~/.bashrc so it's always ready!)

2. Run Termify on ANY command

Just wrap your normal command with termify.

For Python Scripts:

termify python train_model.py

For Bash Scripts:

termify ./deploy_infrastructure.sh

For Node.js Apps:

termify node scrape_data.js

For Native Binaries (Go/Rust/C++):

termify ./my_go_binary

3. Open the Web UI

Navigate to http://localhost:8000. You will instantly see a fully styled Tailwind CSS form with all the arguments, dropdowns, and toggles inferred automatically from your script.


🗺️ Roadmap & Future Vision

Termify is just getting started. Here is what we are building next:

  • Multi-Page Apps: Support for CLI tools with subcommands (e.g., docker run vs docker build), generating a sidebar navigation for each subcommand.
  • Authentication Middleware: Built-in basic auth so you can safely expose your Termify server to the internet for remote teams.
  • History & Logging: A built-in SQLite database that tracks who ran what command, when, and saves the terminal output for auditing.
  • Custom Themes: Allow passing a --theme light or --theme cyberpunk flag to instantly change the UI aesthetic.

🤝 Contributing Guidelines

We welcome all contributions! Whether it's a bug fix, UI enhancement, or documentation update, we'd love to have you on board.

  1. Fork the repository on GitHub.
  2. Clone your fork locally: git clone https://github.com/your-username/Termify.git
  3. Create a feature branch: git checkout -b feature/AmazingFeature
  4. Make your changes: Ensure you write clean, documented code.
  5. Commit your changes: git commit -m 'feat: Add some AmazingFeature'
  6. Push to the branch: git push origin feature/AmazingFeature
  7. Open a Pull Request against the main branch.

Please ensure you test the frontend changes by running python termify/main.py python test_cli.py to verify the UI still dynamically generates correctly.


❓ FAQ

Q: Do I need to modify my Python/Bash code to use Termify? A: No. Zero code changes are required. Termify entirely relies on your script's standard --help output. If your script doesn't have a --help flag, Termify won't work.

Q: Why Gemini and not OpenAI? A: We currently use Gemini 2.5 Flash because it is incredibly fast (under 1 second inference) and highly accurate at structured JSON extraction. We plan to support OpenAI and local LLMs (Ollama) in a future release!

Q: Is the API call made every time I run a command in the Web UI? A: No. The LLM is only called once when you start the Termify server to generate the UI schema. Executing commands from the Web UI does not trigger any LLM API calls, making it completely free and instantaneous for end-users.


📜 License

Distributed under the MIT License. Built passionately for the open-source community to make internal tooling accessible to everyone.

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

termify_ai-1.0.0.tar.gz (8.9 kB view details)

Uploaded Source

Built Distribution

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

termify_ai-1.0.0-py3-none-any.whl (9.2 kB view details)

Uploaded Python 3

File details

Details for the file termify_ai-1.0.0.tar.gz.

File metadata

  • Download URL: termify_ai-1.0.0.tar.gz
  • Upload date:
  • Size: 8.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for termify_ai-1.0.0.tar.gz
Algorithm Hash digest
SHA256 942a6e12f2edcf9a3cfc65567322884761ad665a93878ac44d3010995dc2c007
MD5 b6e046f7bc2f29d5f765298c1c39dcf1
BLAKE2b-256 a67b540d7e4a89ca4f8c95cb67dbef853ce51061bd32c8d805dee806cc5211ef

See more details on using hashes here.

File details

Details for the file termify_ai-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: termify_ai-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 9.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for termify_ai-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3a7d78ba639c4cee5154b506cc972b4ea7c45d84dc568f4fb4f29d6a2860de9d
MD5 8316f56e307e9e28410a6fe59df01d73
BLAKE2b-256 9afb64974897f8827017acbb2930c55ea7ca7372d96f577bd0ad709ca6b534d8

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