|
Download shell-plugin/README.md from SaylorTwift/forgecode: direct link, hf CLI and curl.
- Browser
- Download file 8.11 kB
-
https://huggingface.co/SaylorTwift/forgecode/resolve/main/shell-plugin/README.md
- Command line
-
hf download hf://SaylorTwift/forgecode/shell-plugin/README.md
-
curl -L -o README.md https://huggingface.co/SaylorTwift/forgecode/resolve/main/shell-plugin/README.md
8.11 kB
| # Forge ZSH Plugin | |
| A powerful ZSH plugin that provides intelligent command transformation, file tagging, and conversation management for the Forge AI assistant. | |
| ## Features | |
| - **Smart Command Transformation**: Convert `:command` syntax into forge executions | |
| - **Agent Selection**: Tab completion for available agents using `:agent_name` | |
| - **File Tagging**: Interactive file selection with `@[filename]` syntax | |
| - **Syntax Highlighting**: Visual feedback for commands and tagged files | |
| - **Conversation Continuity**: Automatic session management across commands | |
| - **Interactive Completion**: Fuzzy finding for files and agents via built-in picker | |
| ## Prerequisites | |
| Before using this plugin, ensure you have the following tools installed: | |
| - **fd** - Fast file finder (alternative to find) | |
| - **forge** - The Forge CLI tool | |
| ### Installation of Prerequisites | |
| ```bash | |
| # macOS (using Homebrew) | |
| brew install fd | |
| # Ubuntu/Debian | |
| sudo apt install fd-find | |
| # Arch Linux | |
| sudo pacman -S fd | |
| ``` | |
| ## Usage | |
| ### Starting a Conversation | |
| Begin any command with `:` followed by your prompt: | |
| ```bash | |
| : Get the current time | |
| ``` | |
| This automatically starts a new conversation with the default Forge agent. | |
| ### Using Specific Agents | |
| Specify an agent by name after the colon: | |
| ```bash | |
| :sage How does caching work in this system? | |
| :muse Create a deployment strategy for my app | |
| ``` | |
| **Tab Completion**: Type `:` followed by partial agent name and press `TAB` for interactive selection. | |
| ### File Tagging | |
| Tag files in your commands using the `@[filename]` syntax: | |
| ```bash | |
| : Review this code @[src/main.rs] | |
| : Explain the configuration in @[config.yaml] | |
| ``` | |
| **Interactive Selection**: Type `@` and press `TAB` to search and select files interactively using fuzzy finder. | |
| ### Conversation Continuity | |
| Commands within the same session maintain context: | |
| ```bash | |
| # First command | |
| : My project uses React and TypeScript | |
| # Second command (remembers previous context) | |
| : How can I optimize the build process? | |
| ``` | |
| The plugin automatically manages conversation IDs to maintain context across related commands. | |
| ### Command Naming | |
| Shell commands should follow the **Object-Action** format. | |
| Examples: | |
| - `:provider-login` | |
| - `:sync-status` | |
| For backward compatibility, `:login` remains available as an alias for `:provider-login`. | |
| ### Session Management | |
| #### Starting New Sessions | |
| Clear the current conversation context and start fresh: | |
| ```bash | |
| :new | |
| # or use the alias | |
| :n | |
| ``` | |
| This will: | |
| - Clear the current conversation ID | |
| - Show the banner with helpful information | |
| - Reset the session state | |
| - Display a confirmation message with timestamp | |
| #### System Information | |
| View system and project information: | |
| ```bash | |
| :info | |
| # or use the alias | |
| :i | |
| ``` | |
| This displays: | |
| - System information | |
| - Project details | |
| - Current configuration | |
| - Current configuration | |
| #### Switching Conversations | |
| Browse and switch between conversations interactively: | |
| ```bash | |
| :conversation | |
| # or use the alias | |
| :c | |
| ``` | |
| This will display an interactive list of all conversations with preview, allowing you to select and switch. | |
| Switch to a specific conversation by ID: | |
| ```bash | |
| :conversation <conversation_id> | |
| ``` | |
| Toggle between current and previous conversation (like `cd -`): | |
| ```bash | |
| :conversation - | |
| # or | |
| :c - | |
| ``` | |
| The plugin remembers your previous conversation, allowing you to quickly toggle back and forth. This works just like `cd -` in your shell, and **also works with `:new`** - when you start a new conversation, you can toggle back to your previous one. | |
| If there's no previous conversation tracked (e.g., first time using the plugin), `:c -` will show the conversation list popup, allowing you to select a conversation. | |
| This is useful when: | |
| - You need to temporarily check another conversation and come back | |
| - You're comparing or referencing information between two conversations | |
| - You want to quickly switch context between related tasks | |
| - You started a new conversation but want to reference the previous one | |
| #### Cloning Conversations | |
| Create a copy of an existing conversation with interactive selection: | |
| ```bash | |
| :clone | |
| ``` | |
| This will: | |
| - Display an interactive list of all conversations with preview | |
| - Allow you to select a conversation to clone | |
| - Create a new conversation with the same content | |
| - Automatically switch to the cloned conversation | |
| - Show the cloned conversation content and details | |
| You can also clone a specific conversation by providing its ID: | |
| ```bash | |
| :clone <conversation_id> | |
| ``` | |
| This is useful when you want to: | |
| - Create a backup before making significant changes | |
| - Start a new conversation branch from an existing context | |
| - Experiment with different approaches while preserving the original | |
| #### Session Status | |
| The plugin automatically displays session information including: | |
| - Conversation ID when starting new sessions | |
| - Active agent information | |
| - New session confirmations with timestamps | |
| ## Syntax Highlighting | |
| The plugin provides visual feedback through syntax highlighting: | |
| - **Tagged Files** (`@[filename]`): Displayed in **green bold** | |
| - **Agent Commands** (`:agent`): Agent names in **yellow bold** | |
| - **Command Text**: Remaining text in **white bold** | |
| ## Configuration | |
| Customize the plugin behavior by setting these variables before loading the plugin: | |
| ```bash | |
| # Custom forge binary location | |
| export FORGE_BIN="/path/to/custom/forge" | |
| ``` | |
| ### Available Configuration Variables | |
| - `FORGE_BIN`: Path to the forge executable (default: `forge`) | |
| - `FORGE_EDITOR`: Editor command to use for `:edit` command (default: `$EDITOR` or `nano`) | |
| - `FORGE_SYNC_ENABLED`: Enable/disable automatic workspace sync (default: `true`) | |
| - `FORGE_MAX_COMMIT_DIFF`: Maximum diff size for commit message generation in bytes (default: `100000`) | |
| - `FORGE_SKIP_INTERACTIVE`: Skip interactive prompts (internal use) | |
| - `FORGE_CURRENCY_SYMBOL`: Currency symbol for cost display in ZSH theme (default: `"$"`) | |
| - `FORGE_CURRENCY_CONVERSION_RATE`: Conversion rate for currency display (default: `1.0`) | |
| - `NERD_FONT`: Enable Nerd Font icons in ZSH theme (default: auto-detected, set to `"1"` or `"true"` to enable, `"0"` or `"false"` to disable) | |
| - `USE_NERD_FONT`: Alternative variable for enabling Nerd Font icons (same behavior as `NERD_FONT`) | |
| - Internal pattern matching for conversation syntax (`:`) | |
| - New session command keyword: `:new` or `:n` | |
| ### Codebase Indexing | |
| Sync your codebase for semantic search: | |
| ```bash | |
| :sync | |
| ``` | |
| This will index the current directory for semantic code search. | |
| ### Environment Diagnostics | |
| Run comprehensive environment diagnostics to check your Forge setup: | |
| ```bash | |
| :doctor | |
| ``` | |
| This will check: | |
| - ZSH version and terminal information | |
| - Forge installation and version | |
| - Plugin and theme loading status | |
| - Completions availability | |
| - Dependencies (fd, bat) | |
| - ZSH plugins (autosuggestions, syntax-highlighting) | |
| - Editor configuration and PATH setup | |
| - Nerd Font support for icons | |
| ### .forge Directory | |
| The plugin creates a `.forge` directory in your current working directory (similar to `.git`) for temporary files: | |
| - `FORGE_EDITMSG.md`: Temporary file used when opening an external editor with `:edit` | |
| ## Advanced Features | |
| ### Command History | |
| All transformed commands are properly saved to ZSH history, allowing you to: | |
| - Navigate command history with arrow keys | |
| - Search previous forge commands with `Ctrl+R` | |
| - Reuse complex commands with file tags | |
| ### Keyboard Shortcuts | |
| - **Tab**: Interactive completion for files (`@`) and agents (`:`) | |
| - **Enter**: Transform and execute `:commands` | |
| - **Ctrl+C**: Interrupt running forge commands | |
| ## Examples | |
| ### Basic Usage | |
| ```bash | |
| : What's the weather like? | |
| :sage Explain the MVC pattern | |
| :planner Help me structure this project | |
| ``` | |
| ### With File Tagging | |
| ```bash | |
| : Review this implementation @[src/auth.rs] | |
| : Debug the issue in @[logs/error.log] @[config/app.yml] | |
| ``` | |
| ### Session Flow | |
| ```bash | |
| : I'm working on a Rust web API | |
| : What are the best practices for error handling? | |
| : Show me an example with @[src/errors.rs] | |
| :info | |
| :new | |
| : New conversation starts here | |
| ``` | |
| ### Codebase Indexing | |
| ```bash | |
| # Sync current directory for semantic search | |
| :sync | |
| ``` |