Skip to content

feat: Coolify deployment support and Telegram UI/UX enhancements#239

Open
mrbeandev wants to merge 10 commits intosipeed:mainfrom
mrbeandev:feat/coolify-and-telegram-enhancements
Open

feat: Coolify deployment support and Telegram UI/UX enhancements#239
mrbeandev wants to merge 10 commits intosipeed:mainfrom
mrbeandev:feat/coolify-and-telegram-enhancements

Conversation

@mrbeandev
Copy link

@mrbeandev mrbeandev commented Feb 15, 2026

This PR introduces comprehensive support for Coolify deployment and several improvements to the Telegram channel to enhance the self-hosting experience.

☁️ Coolify Deployment

  • Adds COOLIFY.md guide with 3 configuration methods (JSON, Env Vars, File).
  • Adds entrypoint-coolify.sh to dynamically generate config.json from environment variables at runtime.
  • Adds Dockerfile.coolify and docker-compose-coolify.yml optimized for Coolify's environment.
  • Support for full JSON configuration via PICOCLAW_CONFIG_JSON environment variable.

🤖 Telegram Enhancements

  • Persistent Typing Indicator: Implemented a repeating goroutine that sends the 'typing' status every 4s while the AI is thinking, preventing the status from expiring (fixing the 5s Telegram API limit).
  • Auto-Command Registration: The bot now automatically registers its commands (/model, /models) with Telegram on startup using setMyCommands.
  • Unified /model Command: Supports a new provider/model syntax (e.g., /model vllm/qwen3-coder-next:cloud) to switch both the backend API and the model name in a single message.
  • Dynamic /models List: The /models command now dynamically reads the loaded configuration to show actually available providers and the currently active model.

⚙️ Core Improvements

  • Refactored AgentLoop to store a reference to the configuration, allowing for hot-switching of providers and models without needing to restart the container.

These changes make PicoClaw significantly easier to deploy on cloud platforms and improve the interactability of the Telegram bot.

🔗 Related Issues

cc @sipeed

This PR introduces comprehensive support for Coolify deployment and several
improvements to the Telegram channel:

Coolify Deployment:
- Added COOLIFY.md guide with 3 configuration methods.
- Added entrypoint-coolify.sh to generate config.json from environment variables.
- Added Dockerfile.coolify and docker-compose-coolify.yml optimized for Coolify.
- Support for full JSON configuration via PICOCLAW_CONFIG_JSON env var.

Telegram Enhancements:
- Persistent 'typing' indicator that repeats every 4s while AI is thinking.
- Automatic registration of bot commands (/model, /models) on startup.
- Consolidated /model command that supports 'provider/model' syntax for atomic switching.
- Dynamic /models command that shows actually configured providers and active model.

Configuration:
- Improved AgentLoop to support hot-switching models and providers without restart.

These changes improve cloud deployability and user experience in chat channels.
The root cause: Go's env.Parse() in LoadConfig reads PICOCLAW_*
environment variables AFTER loading config.json, silently overwriting
user-provided values. Dockerfile.coolify had hardcoded Gemini defaults
(PICOCLAW_AGENTS_DEFAULTS_PROVIDER=gemini) baked into the image layer,
so even when config.json correctly said 'vllm', the env vars won.

Fix:
- entrypoint-coolify.sh: When using PICOCLAW_CONFIG_JSON (Method 1), or
  mounted config (Method 2), unset all PICOCLAW_* env vars before
  calling picoclaw so the JSON file is the single source of truth.
- docker-compose-coolify.yml: Remove hardcoded gemini defaults from
  agent and doctor services.
- Updated docs header to recommend PICOCLAW_CONFIG_JSON as primary.
@mrbeandev mrbeandev force-pushed the feat/coolify-and-telegram-enhancements branch from 9ee5328 to 179527d Compare February 16, 2026 14:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

No way to explicitly select which provider is being used

1 participant