prompt-optimizer README

The project's README from github.com/linshenkx/prompt-optimizer. As one markdown file: README.md.

Prompt Optimizer 🚀

English | 中文

GitHub stars Chrome Web Store Users

linshenkx%2Fprompt-optimizer | Trendshift

License Docker Pulls GitHub forks Deploy with Vercel

Website | Online Optimizer | Prompt Garden | Docs | Quick Start | Chrome Extension | 💖 Support

First-time Tutorial | Development Docs | Vercel Deployment Guide | Cloudflare Deployment Guide | MCP Deployment Guide | DeepWiki Docs | ZRead Docs

📖 Project Introduction

Prompt Optimizer is a powerful AI prompt optimization tool that helps you write better AI prompts and improve the quality of AI outputs. It supports four usage methods: web application, desktop application, Chrome extension, and Docker deployment.

Prompts can start from manual writing, templates, local imports, or sources such as Prompt Garden. Prompt Optimizer is where those prompts are optimized, tested, evaluated, and saved as reusable prompt assets.

🎥 Feature Demonstration

1. Hard-Nosed Reviewer: Turn Agreement into Useful Critique

Starting from a minimal English role prompt, optimization pushes a small model away from generic pushback and toward a clearer, more structured review that surfaces weak assumptions, evidence gaps, and concrete revision advice.

Hard-nosed reviewer full-page demo

2. Marketplace Bargaining Reply: Let Variables Change the Strategy

With a single reusable prompt template, you can swap in item details, price anchors, buyer offers, tone, and negotiation goals for different marketplace conversations. After optimization, the same small model does a better job turning those variables into a clearer, more transaction-ready reply instead of a generic helper-style response.

Marketplace bargaining reply variable-mode demo

3. Text-to-Image: Optimize a One-Line Idea into a More Directable Key Visual Prompt

This is not just prompt expansion. Starting from a vague one-line idea, Prompt Optimizer adds clearer subject cues, spatial relationships, and mood anchors. The left side is simply “a floating library in the night sky,” while the optimized version gives the model a more directed fantasy composition that feels closer to a reusable key visual than a lucky generic image.

Floating library text-to-image demo

✨ Core Features

🚀 Advanced Features

Image Generation Mode

Prompt Sources & Smart Favorites

Advanced Testing Mode

For detailed usage instructions, please refer to the Image Mode Documentation

Quick Start

Direct access: https://prompt.always200.com

The online app stores its app data in your browser. Model requests go directly to the provider you configure. For your first run, connect one working text model in Model Manager, then follow the first-time tutorial to improve and copy a prompt.

2. Web Deployment

Vercel Deployment

Method 1: One-click deployment to your own Vercel: Deploy with Vercel

Method 2: Fork the project and import to Vercel (Recommended):

For more detailed deployment steps and important notes, please check:

Cloudflare Deployment

Deploy to Cloudflare

Use the Deploy to Cloudflare button for the quickest public-repository setup. It creates a repository under your GitHub/GitLab account and deploys with Workers Builds. For private repositories or stricter repository-access control, import your own repository manually; keep the default deploy commands and clear the build command if Cloudflare auto-fills pnpm run build, because wrangler.jsonc builds the Web frontend and publishes packages/web/dist as static assets.

For access control and analytics on Cloudflare, configure Cloudflare Access and Cloudflare Web Analytics in the Cloudflare dashboard. No frontend dependency or application-code change is required.

3. Download Desktop Application

Download the latest version from GitHub Releases. We provide both installer and archive formats for each platform.

Core Advantages of Desktop Application:

4. Install Chrome Extension

  1. Install from Chrome Web Store (may not be the latest version due to approval delays): Chrome Web Store
  2. Click the icon to open the Prompt Optimizer

5. Docker Deployment

Click to view Docker deployment commands ```bash # Run container (default configuration) docker run -d -p 8081:80 --restart unless-stopped --name prompt-optimizer linshen/prompt-optimizer

Run container (with API key configuration and password protection)

docker run -d -p 8081:80
-e VITE_OPENAI_API_KEY=your_key
-e ACCESS_USERNAME=your_username \ # Optional, defaults to "admin" -e ACCESS_PASSWORD=your_password \ # Set access password --restart unless-stopped
--name prompt-optimizer
linshen/prompt-optimizer

</details>

### 6. Docker Compose Deployment
<details>
<summary>Click to view Docker Compose deployment steps</summary>
```bash
# 1. Clone the repository
git clone https://github.com/linshenkx/prompt-optimizer.git
cd prompt-optimizer

# 2. Create .env file for API keys and authentication
cat > .env << EOF
# API Key Configuration
VITE_OPENAI_API_KEY=your_openai_api_key
VITE_GEMINI_API_KEY=your_gemini_api_key
VITE_DEEPSEEK_API_KEY=your_deepseek_api_key
VITE_GROK_API_KEY=your_xai_api_key
VITE_ZHIPU_API_KEY=your_zhipu_api_key
VITE_SILICONFLOW_API_KEY=your_siliconflow_api_key

# Basic Authentication (Password Protection)
ACCESS_USERNAME=your_username  # Optional, defaults to "admin"
ACCESS_PASSWORD=your_password  # Set access password
EOF

# Because the compose file is under docker/, pass the root .env explicitly.

# 3. Start the service
docker compose --env-file .env -f docker/docker-compose.yml up -d

# 4. View logs
docker compose --env-file .env -f docker/docker-compose.yml logs -f

# 5. Access the service
Web Interface: http://localhost:8081
MCP Server: http://localhost:8081/mcp

You can also directly edit the docker/docker-compose.yml file to customize your configuration:

Click to view docker/docker-compose.yml example
services:
  prompt-optimizer:
    # Use Docker Hub image
    image: linshen/prompt-optimizer:latest
    container_name: prompt-optimizer
    restart: unless-stopped
    ports:
      - "8081:80"  # Web application port (MCP server accessible via /mcp path)
    environment:
      - VITE_OPENAI_API_KEY=your_openai_key
      - VITE_GEMINI_API_KEY=your_gemini_key
      - VITE_GROK_API_KEY=your_xai_key
      # Access Control (Optional)
      - ACCESS_USERNAME=admin
      - ACCESS_PASSWORD=your_password

7. MCP Server Usage Instructions

Click to view MCP Server usage instructions

Prompt Optimizer now supports the Model Context Protocol (MCP), enabling integration with AI applications that support MCP such as Claude Desktop.

When running via Docker, the MCP Server automatically starts and can be accessed via http://ip:port/mcp.

Environment Variable Configuration

MCP Server requires API key configuration to function properly. Main MCP-specific configurations:

# MCP Server Configuration
MCP_DEFAULT_MODEL_PROVIDER=openai  # Options: openai, gemini, anthropic, deepseek, grok, siliconflow, zhipu, dashscope, openrouter, modelscope, custom
MCP_LOG_LEVEL=info                 # Log level

Using MCP in Docker Environment

In a Docker environment, the MCP Server runs alongside the web application. You can access the MCP service through the same port as the web application at the /mcp path.

For example, if you map the container's port 80 to port 8081 on the host:

docker run -d -p 8081:80 \
  -e VITE_OPENAI_API_KEY=your-openai-key \
  -e MCP_DEFAULT_MODEL_PROVIDER=openai \
  --name prompt-optimizer \
  linshen/prompt-optimizer

The MCP Server will then be accessible at http://localhost:8081/mcp.

Claude Desktop Integration Example

To use Prompt Optimizer in Claude Desktop, you need to add the service configuration to Claude Desktop's configuration file.

  1. Find Claude Desktop's configuration directory:

    • Windows: %APPDATA%\Claude\services
    • macOS: ~/Library/Application Support/Claude/services
    • Linux: ~/.config/Claude/services
  2. Edit or create the services.json file, adding the following content:

{
  "services": [
    {
      "name": "Prompt Optimizer",
      "url": "http://localhost:8081/mcp"
    }
  ]
}

Make sure to replace localhost:8081 with the actual address and port where you've deployed Prompt Optimizer.

Available Tools

  • optimize-user-prompt: Optimize user prompts to improve LLM performance
  • optimize-system-prompt: Optimize system prompts to improve LLM performance
  • iterate-prompt: Iteratively improve mature prompts based on specific requirements

For more detailed information, please refer to the MCP Server User Guide.

⚙️ API Key Configuration

Click to view API key configuration methods
  1. Click the "⚙️Settings" button in the upper right corner
  2. Select the "Model Management" tab
  3. Click on the model you need to configure (such as OpenAI, Gemini, DeepSeek, Grok, etc.)
  4. Enter the corresponding API key in the configuration box
  5. Click "Save"

Supported models: OpenAI, Gemini, DeepSeek, Grok, Zhipu AI, SiliconFlow, Custom API (OpenAI compatible interface)

In addition to API keys, you can configure advanced LLM parameters for each model individually. These parameters are configured through a field called llmParams, which allows you to specify any parameters supported by the LLM SDK in key-value pairs for fine-grained control over model behavior.

Advanced LLM Parameter Configuration Examples:

  • OpenAI/Compatible APIs: {"temperature": 0.7, "max_tokens": 4096, "timeout": 60000}
  • Gemini: {"temperature": 0.8, "maxOutputTokens": 2048, "topP": 0.95}
  • DeepSeek: {"temperature": 0.5, "top_p": 0.9, "frequency_penalty": 0.1}

For more detailed information about llmParams configuration, please refer to the LLM Parameters Configuration Guide.

Method 2: Via Environment Variables

Configure environment variables through the -e parameter when deploying with Docker:

-e VITE_OPENAI_API_KEY=your_key
-e VITE_GEMINI_API_KEY=your_key
-e VITE_DEEPSEEK_API_KEY=your_key
-e VITE_GROK_API_KEY=your_key
-e VITE_ZHIPU_API_KEY=your_key
-e VITE_SILICONFLOW_API_KEY=your_key

# Multiple Custom Models Configuration (Unlimited Quantity)
-e VITE_CUSTOM_API_KEY_ollama=dummy_key
-e VITE_CUSTOM_API_BASE_URL_ollama=http://localhost:11434/v1
-e VITE_CUSTOM_API_MODEL_ollama=qwen2.5:7b

📖 Detailed Configuration Guide: See Multiple Custom Models Documentation for complete configuration methods and advanced usage

Local Development

For detailed documentation, see Development Documentation

Click to view local development commands
# 1. Clone the project
git clone https://github.com/linshenkx/prompt-optimizer.git
cd prompt-optimizer

# 2. Install dependencies
pnpm install

# 3. Start development server
pnpm dev               # Main development command: build core/ui and run web app
pnpm dev:web          # Run web app only
pnpm dev:fresh        # Complete reset and restart development environment

🗺️ Roadmap

For detailed project status, see Project Status Document

Star History

Star History Chart

FAQ

Click to view frequently asked questions

API Connection Issues

Q1: Why can't I connect to the model service after configuring the API key?

A: Most connection failures are caused by Cross-Origin Resource Sharing (CORS) issues. As this project is a pure frontend application, browsers block direct access to API services from different origins for security reasons. Model services will reject direct requests from browsers if CORS policies are not correctly configured.

Q2: How to solve Ollama connection issues?

A: Ollama fully supports the OpenAI standard interface, just configure the correct CORS policy:

  1. Set environment variable OLLAMA_ORIGINS=* to allow requests from any origin
  2. If issues persist, set OLLAMA_HOST=0.0.0.0:11434 to listen on any IP address

Q3: How to solve CORS issues with commercial APIs (such as Nvidia's DS API, ByteDance's Volcano API)?

A: These platforms typically have strict CORS restrictions. Recommended solutions:

  1. Use Desktop Application (Most Recommended)

    • Desktop app has no CORS restrictions as a native application
    • Can directly connect to any API service, including locally deployed models
    • Provides the most complete and stable feature experience
    • Download from GitHub Releases
  2. Use Self-deployed API Proxy Service (Professional solution)

    • Deploy open-source API aggregation/proxy tools like OneAPI, NewAPI
    • Configure as custom API endpoint in settings
    • Request flow: Browser → Proxy service → Model service provider
    • Full control over security policies and access permissions

Note: All web versions (including online version, Vercel deployment, Docker deployment) are pure frontend applications and subject to browser CORS restrictions. Only the desktop version or using an API proxy service can solve CORS issues.

Q4: I have correctly configured CORS policies for my local model (like Ollama), why can't I still connect using the online version?

A: This is caused by the browser's Mixed Content security policy. For security reasons, browsers block secure HTTPS pages (like the online version) from sending requests to insecure HTTP addresses (like your local Ollama service).

Solutions: To bypass this limitation, you need to have the application and API under the same protocol (e.g., both HTTP). We recommend the following approaches:

  1. Use the desktop version: Desktop applications have no browser restrictions and are the most stable and reliable way to connect to local models
  2. Use Docker deployment (HTTP): Access via http://localhost:8081, both the app and local Ollama use HTTP
  3. Use Chrome extension: Extensions can bypass some security restrictions in certain situations

macOS Desktop Application Issues

Q5: macOS shows "damaged" or "unverified developer" when opening the app?

A: This is because the application has not been signed with an Apple Developer certificate. Due to the high cost of Apple Developer accounts, the desktop application is currently unsigned.

Solution: Run the following command in Terminal to remove the quarantine attribute:

# For installed applications
xattr -rd com.apple.quarantine /Applications/PromptOptimizer.app

# For downloaded .dmg files (run before installation)
xattr -rd com.apple.quarantine ~/Downloads/PromptOptimizer-*.dmg

After running the command, you can open the application normally.

🤝 Contributing

Click to view contribution guidelines
  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some feature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

Tip: When developing with Cursor tool, it is recommended to do the following before committing:

  1. Use the "CodeReview" rule for review
  2. Check according to the review report format:
    • Overall consistency of changes
    • Code quality and implementation method
    • Test coverage
    • Documentation completeness
  3. Optimize based on review results before submitting

👏 Contributors

Thanks to all the developers who have contributed to this project!

Contributors

🙏 Acknowledgements

This project was partly inspired by LangGPT in prompt engineering and structured prompt design. Thanks to the LangGPT project and community for their open-source sharing and continued exploration.

📄 License

This project is licensed under AGPL-3.0.

In simple terms: You can freely use, modify, and commercialize this project, but if you turn it into a website or service for others, you must share your source code.

👉 Click for detailed explanation

What you can do:

  • ✅ Personal use, learning, and research
  • ✅ Internal company use (not offering public services)
  • ✅ Modify code for commercial projects
  • ✅ Charge for products or services

What you must do:

  • 📖 If distributing software or offering network services, disclose source code
  • 📝 Preserve original author's copyright notices

Core principle: Commercial use is allowed, but not closed-source.


If this project is helpful to you, please consider giving it a Star ⭐️

👥 Contact Us

prompt-optimizer (linshenkx/prompt-optimizer)

Searching Database…

What is this?Prompt Optimizer is an AI tool that helps you write better prompts and get better results from AI models, available as a web app, desktop app, Chrome extension, and Docker deployment.
Is this a web app, a desktop app, or a browser extension?It's actually all of them plus a Docker option - the same optimizer ships as a web app, a native desktop app, a Chrome extension, and a self-hosted Docker container.
How do I start using it?Easiest is the hosted online version since it's a pure frontend app with no install needed. For self-hosting you can one-click deploy to Vercel or Cloudflare, download a desktop installer from GitHub Releases, install the Chrome extension, or run it via Docker/Docker Compose.
Do I need my own API key from an AI provider?Yes, you configure an API key for a supported provider like OpenAI, Gemini, DeepSeek, Grok, Zhipu AI, SiliconFlow, or MiniMax through the Settings panel, or via environment variables when running the Docker image.
Does the web version have any restrictions the desktop app doesn't?Yes, the browser-based web app and extension are subject to CORS restrictions, so connecting to things like a local Ollama instance or strict commercial APIs can fail; the desktop app removes that limit entirely.
Can I use the desktop app on Windows, Mac, and Linux?Yes, GitHub Releases provide installers and archives for each platform, such as .exe for Windows, .dmg for macOS, and .AppImage for Linux.
Where does my prompt and API key data go?Everything runs client-side in your browser or local app and talks directly to the AI provider's API, with no intermediate server seeing your prompts or keys.
What is Prompt Garden?Prompt Garden is one of the prompt sources you can import from, alongside manual writing, templates, and local files, to seed prompts that Prompt Optimizer then refines and lets you save as reusable favorites.
Can I use this inside Claude Desktop?Yes, it implements the Model Context Protocol (MCP) and exposes tools like optimize-user-prompt, optimize-system-prompt, and iterate-prompt that Claude Desktop or any MCP-compatible app can call directly.
Can it generate or edit images, not just text prompts?Yes, besides optimizing text prompts it supports Text-to-Image, Image-to-Image, and Multi-Image generation using models like Gemini, Seedream, and Grok, including style transfer from reference images.
What happens to prompts I mark as favorites?Smart Favorites save them as reusable assets with version history, reproducible examples, media support, and source binding, so you can reapply them to future work.
Creator
linshenkx
Size
45.5 MB
Stars
38.8K
Age
1y
Commits · 90 Days