diff --git a/.gitea/ISSUE_TEMPLATE/bug_report.md b/.gitea/ISSUE_TEMPLATE/bug_report.md
index 9070ce0..1acad1e 100644
--- a/.gitea/ISSUE_TEMPLATE/bug_report.md
+++ b/.gitea/ISSUE_TEMPLATE/bug_report.md
@@ -21,7 +21,7 @@ What should have happened?
## Environment
- OS:
-- SmartTools version:
+- CmdForge version:
- Provider:
- Docker or native install?
diff --git a/.gitea/ISSUE_TEMPLATE/question.md b/.gitea/ISSUE_TEMPLATE/question.md
index 1291b8f..7bc0563 100644
--- a/.gitea/ISSUE_TEMPLATE/question.md
+++ b/.gitea/ISSUE_TEMPLATE/question.md
@@ -1,6 +1,6 @@
---
name: Question
-about: Ask a question about SmartTools
+about: Ask a question about CmdForge
labels: question
---
diff --git a/AGENTS.md b/AGENTS.md
index 7510abd..c915afd 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -1,7 +1,7 @@
# Repository Guidelines
## Project Structure & Module Organization
-- `src/smarttools/` contains the core Python package (CLI entry point, tool model, runner, providers, UI backends).
+- `src/cmdforge/` contains the core Python package (CLI entry point, tool model, runner, providers, UI backends).
- `tests/` holds pytest suites.
- `docs/` includes installation, provider setup, examples, and design notes.
- `examples/` provides sample tools and an installer script.
@@ -15,11 +15,11 @@
- `ui_urwid.py` and `ui_snack.py` provide the TUI implementations, selected by `ui.py`.
## Build, Test, and Development Commands
-- `pip install -e ".[dev]"` installs SmartTools in editable mode with dev dependencies.
+- `pip install -e ".[dev]"` installs CmdForge in editable mode with dev dependencies.
- `pytest` runs the full test suite.
- `pytest tests/test.py::test_name` runs a focused test.
-- `python -m smarttools.cli` runs the CLI module directly.
-- `smarttools ui` launches the TUI (requires `urwid` or `python-newt`).
+- `python -m cmdforge.cli` runs the CLI module directly.
+- `cmdforge ui` launches the TUI (requires `urwid` or `python-newt`).
- `docker-compose build` builds the dev container image.
- `docker-compose run --rm test` runs tests inside Docker.
@@ -38,5 +38,5 @@
- PRs should include a clear summary, test results (or rationale if tests are skipped), and screenshots when UI behavior changes.
## Security & Configuration Tips
-- Provider credentials live in `~/.smarttools/providers.yaml`; avoid committing secrets.
-- User tool configs live in `~/.smarttools/ SmartTools lets you build custom AI-powered CLI commands using simple YAML configuration.
+ CmdForge lets you build custom AI-powered CLI commands using simple YAML configuration.
Create tools that work with any AI provider and compose them like Unix pipes. SmartTools is a lightweight personal tool builder that lets you: CmdForge is a lightweight personal tool builder that lets you:smarttools run foo
+cmdforge run foo
```
- Background: Light gray (#F3F4F6)
- Font: Monospace
@@ -1011,14 +1011,14 @@ Publisher dashboard uses auth endpoints:
Landing page:
```html
-What is SmartTools?
-What is CmdForge?
+
Get up and running in under a minute:
-# Install SmartTools
-pip install smarttools
+# Install CmdForge
+pip install cmdforge
# Create your first tool (choose your style)
-smarttools ui # Visual builder with menus
-smarttools create # CLI wizard
+cmdforge ui # Visual builder with menus
+cmdforge create # CLI wizard
# Or install a tool from the registry
-smarttools registry install official/summarize
+cmdforge registry install official/summarize
# Use it!
cat article.txt | summarize
Two Ways to Build
- smarttools ui launches a visual builder with menus and forms.
- smarttools create uses a command-line wizard. Both create the same YAML config files.
+ cmdforge ui launches a visual builder with menus and forms.
+ cmdforge create uses a command-line wizard. Both create the same YAML config files.
How It Works
@@ -87,11 +87,11 @@ output: "{summary}"
SmartTools requires Python 3.8+ and works on Linux, macOS, and Windows.
+CmdForge requires Python 3.8+ and works on Linux, macOS, and Windows.
The simplest way to install SmartTools:
-pip install smarttools
+The simplest way to install CmdForge:
+pip install cmdforge
Or with pipx for isolated installation:
-pipx install smarttools
+pipx install cmdforge
smarttools --version
-smarttools --help
+cmdforge --version
+cmdforge --help
SmartTools needs at least one AI provider configured. The easiest is Claude CLI:
+CmdForge needs at least one AI provider configured. The easiest is Claude CLI:
# Install Claude CLI (if you have an Anthropic API key)
pip install claude-cli
@@ -127,17 +127,17 @@ pip install claude-cli
pip install openai
# Configure your provider
-smarttools config
+cmdforge config
SmartTools installs wrapper scripts to ~/.local/bin/. Make sure this is in your PATH:
CmdForge installs wrapper scripts to ~/.local/bin/. Make sure this is in your PATH:
# Add to ~/.bashrc or ~/.zshrc
export PATH="$HOME/.local/bin:$PATH"
To contribute or modify SmartTools:
-git clone https://gitea.brrd.tech/rob/SmartTools.git
-cd SmartTools
+To contribute or modify CmdForge:
+git clone https://gitea.brrd.tech/rob/CmdForge.git
+cd CmdForge
pip install -e ".[dev]"
""",
"headings": [
@@ -151,16 +151,16 @@ pip install -e ".[dev]"
"first-tool": {
"title": "Your First Tool",
- "description": "Create your first SmartTools command step by step",
+ "description": "Create your first CmdForge command step by step",
"parent": "getting-started",
"content": """
Let's create a simple tool that explains code. You'll learn the basics of tool configuration.
Run the interactive creator:
-smarttools create
+cmdforge create
-Or create the file manually at ~/.smarttools/explain/config.yaml:
Or create the file manually at ~/.cmdforge/explain/config.yaml:
name: explain
version: "1.0.0"
description: Explain code or concepts in simple terms
@@ -230,9 +230,9 @@ cat complex_algorithm.py | explain --level expert
"publishing": {
"title": "Publishing Tools",
- "description": "Share your tools with the SmartTools community",
+ "description": "Share your tools with the CmdForge community",
"content": """
-Share your tools with the community by publishing to the SmartTools Registry.
+Share your tools with the community by publishing to the CmdForge Registry.
Make sure your tool has:
@@ -255,20 +255,20 @@ cat complex_algorithm.py | explain --level expert# Navigate to your tool directory
-cd ~/.smarttools/my-tool/
+cd ~/.cmdforge/my-tool/
# First time: enter your token when prompted
-smarttools registry publish
+cmdforge registry publish
# Dry run to validate without publishing
-smarttools registry publish --dry-run
+cmdforge registry publish --dry-run
Published versions are immutable. To update a tool:
config.yamlsmarttools registry publishcmdforge registry publishSmartTools works with any AI provider that has a CLI interface. Configure providers in
-~/.smarttools/providers.yaml.
CmdForge works with any AI provider that has a CLI interface. Configure providers in
+~/.cmdforge/providers.yaml.
Create or edit ~/.smarttools/providers.yaml:
Create or edit ~/.cmdforge/providers.yaml:
providers:
- name: claude
@@ -397,9 +397,9 @@ providers:
"parallel-orchestration": {
"title": "Parallel Orchestration",
- "description": "Run multiple SmartTools concurrently for faster workflows",
+ "description": "Run multiple CmdForge concurrently for faster workflows",
"content": """
-SmartTools executes steps sequentially within a tool, but you can run
+
CmdForge executes steps sequentially within a tool, but you can run
multiple tools in parallel using Python's ThreadPoolExecutor. This pattern
is ideal for multi-agent workflows, parallel analysis, or any task where you need responses
from multiple AI providers simultaneously.
@@ -412,7 +412,7 @@ from multiple AI providers simultaneously.
Basic Pattern
-Use Python's concurrent.futures to run multiple SmartTools in parallel:
+Use Python's concurrent.futures to run multiple CmdForge in parallel:
import subprocess
from concurrent.futures import ThreadPoolExecutor, as_completed
@@ -604,11 +604,11 @@ def run_with_progress(tools: list[str], input_text: str):
Full Example: orchestrated-discussions
-For a complete implementation of parallel SmartTools orchestration, see the
+
For a complete implementation of parallel CmdForge orchestration, see the
orchestrated-discussions
project. It implements:
- - Multiple AI "participants" as SmartTools
+ - Multiple AI "participants" as CmdForge
- Parallel execution with live progress logging
- Shared log files for real-time monitoring
- Discussion workflows with voting and consensus
@@ -656,7 +656,7 @@ steps:
output: "{result}"
-Save this to ~/.smarttools/shout/config.yaml and you've got a working command:
+Save this to ~/.cmdforge/shout/config.yaml and you've got a working command:
$ echo "hello world" | shout
HELLO WORLD!!!
@@ -1697,7 +1697,7 @@ loops, and more.
Using different AI models for different tasks
Building tools that adapt to their input
Self-critiquing workflows that iterate to perfection
- Calling external tools from within your SmartTools
+ Calling external tools from within your CmdForge
@@ -1912,7 +1912,7 @@ output: "{result}"
SmartTools can wrap any command-line tool:
+CmdForge can wrap any command-line tool:
name: lint-explain
version: "1.0.0"
@@ -2087,7 +2087,7 @@ output: "{formatted}"
"title": "The Visual Builder",
"description": "Build tools without touching YAML using the terminal UI",
"content": """
-Not everyone wants to write YAML by hand. SmartTools includes a full-featured +
Not everyone wants to write YAML by hand. CmdForge includes a full-featured terminal UI that lets you create, edit, and test tools with menus and forms—no text editor required.
Start the UI with a single command:
-smarttools ui
+cmdforge ui
You'll see a menu-driven interface that works in any terminal:
┌─────────────────────────────────────────────────────────┐ -│ SmartTools Manager │ +│ CmdForge Manager │ ├─────────────────────────────────────────────────────────┤ │ │ │ [ List all tools ] │ @@ -2158,7 +2158,7 @@ terminal UI that lets you create, edit, and test tools with menus and forms—noStep-by-Step: Creating a Summarizer
-
- Launch: Run
+smarttools ui- Launch: Run
cmdforge ui- Select: Choose "Create new tool"
- Info: Go to "Info & Args", set name to
summarize- Add Argument: Click "Add Argument", set flag to
@@ -2243,7 +2243,7 @@ terminal UI that lets you create, edit, and test tools with menus and forms—no--length, default to100UI Backends
-SmartTools automatically uses the best available terminal UI library:
+CmdForge automatically uses the best available terminal UI library:
@@ -2276,7 +2276,7 @@ terminal UI that lets you create, edit, and test tools with menus and forms—no- You're new to SmartTools +You're new to CmdForge You're comfortable with YAML diff --git a/src/smarttools/web/filters.py b/src/cmdforge/web/filters.py similarity index 100% rename from src/smarttools/web/filters.py rename to src/cmdforge/web/filters.py diff --git a/src/cmdforge/web/forum/__init__.py b/src/cmdforge/web/forum/__init__.py new file mode 100644 index 0000000..c370e50 --- /dev/null +++ b/src/cmdforge/web/forum/__init__.py @@ -0,0 +1,5 @@ +"""Forum blueprint for CmdForge community discussions.""" + +from .routes import forum_bp + +__all__ = ["forum_bp"] diff --git a/src/smarttools/web/forum/models.py b/src/cmdforge/web/forum/models.py similarity index 97% rename from src/smarttools/web/forum/models.py rename to src/cmdforge/web/forum/models.py index 6638d36..624f6c6 100644 --- a/src/smarttools/web/forum/models.py +++ b/src/cmdforge/web/forum/models.py @@ -6,7 +6,7 @@ import re import sqlite3 from typing import Any -from smarttools.registry.db import connect_db, query_one, query_all +from cmdforge.registry.db import connect_db, query_one, query_all FORUM_SCHEMA = """ @@ -51,9 +51,9 @@ CREATE INDEX IF NOT EXISTS idx_forum_replies_topic ON forum_replies(topic_id); """ DEFAULT_CATEGORIES = [ - ("general", "General Discussion", "Chat about anything SmartTools related", "chat", 1), + ("general", "General Discussion", "Chat about anything CmdForge related", "chat", 1), ("help", "Help & Support", "Get help with installation, configuration, or usage", "question", 2), - ("showcase", "Showcase", "Share tools and projects you've built with SmartTools", "star", 3), + ("showcase", "Showcase", "Share tools and projects you've built with CmdForge", "star", 3), ("ideas", "Ideas & Feedback", "Suggest features and improvements", "lightbulb", 4), ("tutorials", "Tutorials & Guides", "Community-written guides and how-tos", "book", 5), ] diff --git a/src/smarttools/web/forum/routes.py b/src/cmdforge/web/forum/routes.py similarity index 99% rename from src/smarttools/web/forum/routes.py rename to src/cmdforge/web/forum/routes.py index e1a5954..d510248 100644 --- a/src/smarttools/web/forum/routes.py +++ b/src/cmdforge/web/forum/routes.py @@ -19,7 +19,7 @@ from flask import ( url_for, ) -from smarttools.registry.db import connect_db +from cmdforge.registry.db import connect_db from .models import ( create_reply, diff --git a/src/smarttools/web/routes.py b/src/cmdforge/web/routes.py similarity index 99% rename from src/smarttools/web/routes.py rename to src/cmdforge/web/routes.py index 9e9ad37..3d12640 100644 --- a/src/smarttools/web/routes.py +++ b/src/cmdforge/web/routes.py @@ -1,4 +1,4 @@ -"""Public web routes for the SmartTools UI.""" +"""Public web routes for the CmdForge UI.""" from __future__ import annotations @@ -8,7 +8,7 @@ from typing import Any, Dict, List, Optional, Tuple from markupsafe import Markup, escape from flask import current_app, redirect, render_template, request, session, url_for -from smarttools.registry.db import connect_db, query_all, query_one +from cmdforge.registry.db import connect_db, query_all, query_one from . import web_bp @@ -499,7 +499,7 @@ def docs(path: str): else: page = SimpleNamespace( title=_title_case(current), - description="SmartTools documentation", + description="CmdForge documentation", content_html=Markup(f" Documentation for {escape(current)} is coming soon.
"), headings=[], parent=None, diff --git a/src/smarttools/web/seo.py b/src/cmdforge/web/seo.py similarity index 97% rename from src/smarttools/web/seo.py rename to src/cmdforge/web/seo.py index 59e1950..ad257fd 100644 --- a/src/smarttools/web/seo.py +++ b/src/cmdforge/web/seo.py @@ -7,7 +7,7 @@ from typing import List from flask import Response, current_app, url_for -from smarttools.registry.db import connect_db, query_all +from cmdforge.registry.db import connect_db, query_all SITEMAP_TTL = timedelta(hours=6) _sitemap_cache = {"generated_at": None, "xml": ""} diff --git a/src/smarttools/web/sessions.py b/src/cmdforge/web/sessions.py similarity index 96% rename from src/smarttools/web/sessions.py rename to src/cmdforge/web/sessions.py index caef973..ad886d7 100644 --- a/src/smarttools/web/sessions.py +++ b/src/cmdforge/web/sessions.py @@ -10,7 +10,7 @@ from typing import Optional from flask.sessions import SessionInterface, SessionMixin from werkzeug.datastructures import CallbackDict -from smarttools.registry.db import connect_db +from cmdforge.registry.db import connect_db SESSION_TTL = timedelta(days=7) @@ -22,7 +22,7 @@ class SQLiteSession(CallbackDict, SessionMixin): class SQLiteSessionInterface(SessionInterface): - def __init__(self, cookie_name: str = "smarttools_session"): + def __init__(self, cookie_name: str = "cmdforge_session"): self.cookie_name = cookie_name def open_session(self, app, request): diff --git a/src/smarttools/web/static/css/main.css b/src/cmdforge/web/static/css/main.css similarity index 100% rename from src/smarttools/web/static/css/main.css rename to src/cmdforge/web/static/css/main.css diff --git a/src/smarttools/web/static/js/main.js b/src/cmdforge/web/static/js/main.js similarity index 99% rename from src/smarttools/web/static/js/main.js rename to src/cmdforge/web/static/js/main.js index 7c0e991..51ff060 100644 --- a/src/smarttools/web/static/js/main.js +++ b/src/cmdforge/web/static/js/main.js @@ -1,5 +1,5 @@ /** - * SmartTools Web UI - Main JavaScript + * CmdForge Web UI - Main JavaScript */ // Copy to clipboard utility diff --git a/src/smarttools/web/static/robots.txt b/src/cmdforge/web/static/robots.txt similarity index 76% rename from src/smarttools/web/static/robots.txt rename to src/cmdforge/web/static/robots.txt index f1002c3..8455670 100644 --- a/src/smarttools/web/static/robots.txt +++ b/src/cmdforge/web/static/robots.txt @@ -1,6 +1,6 @@ -# SmartTools Registry - robots.txt +# CmdForge Registry - robots.txt # We welcome all crawlers! Index everything to help users find us -# and enable AI assistants to help solve SmartTools issues. +# and enable AI assistants to help solve CmdForge issues. User-agent: * Allow: / @@ -11,7 +11,7 @@ Allow: /tutorials/ Allow: /tools/ Allow: /categories/ -# Allow AI crawlers explicitly (we want AI to learn about SmartTools) +# Allow AI crawlers explicitly (we want AI to learn about CmdForge) User-agent: GPTBot Allow: / @@ -42,6 +42,6 @@ Disallow: /api/v1/tokens Allow: /api/ # Sitemap location -Sitemap: https://registry.smarttools.dev/sitemap.xml +Sitemap: https://cmdforge.brrd.tech/sitemap.xml # Crawl-delay: none - crawl as fast as you want! diff --git a/src/smarttools/web/static/src/input.css b/src/cmdforge/web/static/src/input.css similarity index 100% rename from src/smarttools/web/static/src/input.css rename to src/cmdforge/web/static/src/input.css diff --git a/src/smarttools/web/templates/base.html b/src/cmdforge/web/templates/base.html similarity index 92% rename from src/smarttools/web/templates/base.html rename to src/cmdforge/web/templates/base.html index 397cb65..4608ca1 100644 --- a/src/smarttools/web/templates/base.html +++ b/src/cmdforge/web/templates/base.html @@ -3,14 +3,14 @@ -{% block title %}SmartTools{% endblock %} - Build Custom AI Commands +{% block title %}CmdForge{% endblock %} - Build Custom AI Commands {% block meta_extra %}{% endblock %} - + @@ -18,7 +18,7 @@ - + {% block twitter_extra %}{% endblock %} @@ -40,7 +40,7 @@ { "@context": "https://schema.org", "@type": "Organization", - "name": "SmartTools", + "name": "CmdForge", "url": "{{ request.host_url }}", "description": "Build custom AI commands in YAML" } diff --git a/src/smarttools/web/templates/components/callouts.html b/src/cmdforge/web/templates/components/callouts.html similarity index 100% rename from src/smarttools/web/templates/components/callouts.html rename to src/cmdforge/web/templates/components/callouts.html diff --git a/src/smarttools/web/templates/components/code_block.html b/src/cmdforge/web/templates/components/code_block.html similarity index 100% rename from src/smarttools/web/templates/components/code_block.html rename to src/cmdforge/web/templates/components/code_block.html diff --git a/src/smarttools/web/templates/components/consent_banner.html b/src/cmdforge/web/templates/components/consent_banner.html similarity index 100% rename from src/smarttools/web/templates/components/consent_banner.html rename to src/cmdforge/web/templates/components/consent_banner.html diff --git a/src/smarttools/web/templates/components/contributor_card.html b/src/cmdforge/web/templates/components/contributor_card.html similarity index 100% rename from src/smarttools/web/templates/components/contributor_card.html rename to src/cmdforge/web/templates/components/contributor_card.html diff --git a/src/smarttools/web/templates/components/footer.html b/src/cmdforge/web/templates/components/footer.html similarity index 93% rename from src/smarttools/web/templates/components/footer.html rename to src/cmdforge/web/templates/components/footer.html index 3511880..bed099f 100644 --- a/src/smarttools/web/templates/components/footer.html +++ b/src/cmdforge/web/templates/components/footer.html @@ -3,19 +3,19 @@- SmartTools + CmdForgeBuild custom AI commands in YAML. Create Unix-style pipeable tools that work with any AI provider. Provider-agnostic, composable, and community-driven.