tf4fun/watchcow/watchcow-labels-skill
Claude Code and agent skill by tf4fun/watchcow
- community
Checking that the SKILL.md file is still in the repository.
Convert Docker Compose files to WatchCow format for fnOS by adding the correct `watchcow.*` labels. Use this skill whenever a user wants to deploy a Docker container on fnOS (飞牛OS), convert a compose.yaml to WatchCow format, add WatchCow labels, create an fnOS native app from Docker, or asks about watchcow label configuration. Also trigger when the user mentions "飞牛", "fnOS app", or wants a Docker container to show up in the fnOS App Center.
Install
npx vskill@latest install tf4fun/watchcow/watchcow-labels-skillSKILL.md
WatchCow Labels — Docker to fnOS App Conversion
WatchCow monitors Docker container events and automatically converts containers with watchcow.enable=true into native fnOS applications. Your job is to add the right labels to a Docker Compose service so WatchCow can pick it up.
The Golden Rule
All label values MUST be quoted strings in YAML — "true", "8080", not bare true or 8080.
Quick Start — Minimal Config
The only required label is watchcow.enable: "true". Everything else has sensible defaults:
WatchCow will auto-detect the port (first exposed port), use the container name as display name, and try to find an icon from CDN based on the image name.
Label Reference
App-Level Labels
| Label | Required | Default | Purpose | |
|---|---|---|---|---|
watchcow.enable | YES | — | Must be "true" to activate | |
watchcow.appname | no | watchcow.<container> | Unique app ID; 3-32 ASCII characters, starting with a letter or number; letters, numbers, ., _, and - only | |
watchcow.display_name | no | container name | Name shown on desktop & app store | |
watchcow.desc | no | image name | Short description | |
watchcow.version | no | 1.0.0 | App version string | |
watchcow.maintainer | no | WatchCow | Maintainer name | |
watchcow.install_volume | no | system default volume or 1 | fnOS install volume index; overrides appcenter-cli default-volume |
Entry Labels (Default Entry)
These control how the app appears and opens in fnOS:
| Label | Default | Purpose | |
|---|---|---|---|
watchcow.service_port | first exposed port | Host-side port (left side of ports mapping) | |
watchcow.protocol | http | http or https | |
watchcow.path | / | URL path | |
watchcow.redirect | — | External URL; when set, port/protocol/path are ignored and the app opens this URL directly | |
watchcow.redirect_force_external | false | "true" skips local network detection and always redirects to the external URL (useful for apps like Vaultwarden that require HTTPS via domain) | |
watchcow.ui_type | url | url (new browser tab) or iframe (desktop window) | |
watchcow.all_users | true | "true" = all users, "false" = admin only | |
watchcow.title | same as display_name | Entry title | |
watchcow.icon | auto-guessed from image name via CDN | Icon URL (https://...) or local file (file://...) | |
watchcow.file_types | — | Comma-separated file extensions for right-click menu (e.g. "txt,md,json") | |
watchcow.no_display | false | "true" hides from desktop (useful for right-click-only entries) |
Entry Control Permissions
| Label | Default | Values | |
|---|---|---|---|
watchcow.control.access_perm | readonly | editable / readonly / hidden | |
watchcow.control.port_perm | readonly | editable / readonly / hidden | |
watchcow.control.path_perm | readonly | editable / readonly / hidden |
Multi-Entry Labels
For apps with multiple web UIs (e.g. user-facing + admin panel), use named entries with watchcow.<entry>.<field> format. All entry-level fields are supported:
Entry names must NOT conflict with reserved top-level fields (enable, appname, display_name, desc, version, maintainer).
Common Patterns
Pattern 1: Simple Web App
A single-port web service — the most common case.
Pattern 2: Different Host and Container Ports
When the host port differs from container port, service_port must be the host port.
Pattern 3: External Redirect (Bookmark/Shortcut)
Use watchcow.redirect to create an app that simply opens an external URL. No real web server needed in the container — a lightweight busybox HTTP redirect works:
Pattern 4: Multi-Entry App
An app with a user portal and an admin panel on different ports:
Pattern 5: File Handler (Right-Click Menu)
Register an app as a file handler so users can right-click files in fnOS file manager:
Pattern 6: Multi-Bookmark with Local Icons
Multiple entries sharing one container, each entry with its own local icon:
file:// relative paths resolve relative to the compose file's directory.
Icon Lookup Priority
- User-specified
watchcow.iconorwatchcow.<entry>.icon - Local icon library: fnOS File Manager → App Files →
icons/folder - CDN:
https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/<name>.png
Icon naming: default entry uses image name (e.g. nginx:alpine → nginx), named entries use the entry name.
Supported formats: PNG, JPEG, WebP, BMP, ICO — all auto-converted to 256x256 PNG.
Conversion Checklist
When converting a plain Docker Compose file to WatchCow format:
- Add
watchcow.enable: "true"to the main service (the one with a web UI) - Set
watchcow.display_nameandwatchcow.descfor a good user experience - Set
watchcow.service_portto the host port (left side ofportsmapping) — only needed if the container exposes multiple ports or you want to be explicit - Find an icon: check Dashboard Icons for the app name, or let WatchCow auto-guess
- Add
restart: unless-stoppedandnetwork_mode: bridgeif not already present - For multi-service stacks (e.g. app + database), only label the service with a web UI
- Quote all label values as strings
Gotchas
- Labels are immutable after container creation. Changing labels requires
docker compose down && docker compose up -d(destroy and recreate), not just restart. - `service_port` is the host port, not the container port. If
ports: "8080:80", use"8080". - `appname` must be 3-32 ASCII characters. It must start with a letter or number and may contain only letters, numbers,
.,_, and-. Use the formatwatchcow.<name>. - When using `watchcow.redirect`, the
service_port,protocol, andpathlabels are ignored — the app opens the redirect URL directly. - Multi-entry names must avoid reserved words:
enable,appname,display_name,desc,version,maintainercannot be used as entry names.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingwatchcow-labels-skill/SKILL.md
Popularity
- Repository stars
- 153
- Repository forks
- 11
- 7-day trend score
- 25
Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 18 Mar 2026, 7 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/tf4fun/watchcow/watchcow-labels-skill)