

Also from Kynth Studios


Also from Kynth Studios


Also from Kynth Studios
12345678# Agent-PC — Cursor Rules910## Project Identity1112Agent-PC is an AI-powered remote Linux control system. Users control their Linux machine from any device (iPhone PWA, browser) via natural language. The system uses Open WebUI as the multi-model LLM brain and a Python FastAPI server as the tool execution engine, all orchestrated with Docker Compose behind a Tailscale VPN.1314## Architecture (CRITICAL)1516```17User Device (PWA) → Tailscale VPN → Open WebUI (port 3000) → Agent-PC (port 8765) → SSH → Host Machine18```19201. **Agent-PC server is a TOOL EXECUTION ENGINE ONLY** — no LLM, no chat, no WebSocket212. **Open WebUI handles ALL LLM logic** — multi-model, streaming, tool calling, admin panel223. Communication between services is HTTP (REST)234. Auth between Open WebUI and Agent-PC uses `AUTH_SECRET` query parameter2425## Code Conventions2627### Python28- **Language:** English for all code, comments, and docstrings29- **Style:** PEP 8, 4 spaces, snake_case, PascalCase for classes30- **Type hints:** Use where they improve clarity31- **Tool return format:** `{"ok": bool, "error"?: str, ...}`3233### Files You'll Edit Most34- `server/main.py` — FastAPI app (3 endpoints only: GET /health, GET /tools, POST /tool)35- `server/tools.py` — Tool definitions (TOOL_DEFINITIONS + TOOL_MAP + implementations)36- `server/config.py` — Environment configuration (SSH_HOST, AUTH_SECRET, etc.)37- `docker-compose.yml` — Service orchestration38- `docker/agent-pc/Dockerfile` — Container image definition3940### What NOT to Do41- ❌ Do NOT add chat/streaming/WebSocket endpoints to Agent-PC server42- ❌ Do NOT add LLM client libraries (openai, anthropic, etc.) to server43- ❌ Do NOT hardcode API keys — use env vars or Open WebUI admin panel44- ❌ Do NOT bypass the tool format — always return `{"ok": bool, ...}`45- ❌ Do NOT modify `ios/` Swift code (legacy, not maintained)46- ❌ Do NOT use `server/agent.py` (legacy LLM client, no longer imported)4748## Adding a New Tool49501. Add definition to `TOOL_DEFINITIONS` in `server/tools.py`512. Implement `tool_<name>()` function523. Register in `TOOL_MAP` dict534. Add to `open-webui/tools/agent-pc-tools.json`545. Rebuild Docker: `docker compose build agent-pc && docker compose up -d`5556## Environment Variables5758Key env vars (set in `.env` for Docker Compose):59- `AUTH_SECRET` — Shared secret between Open WebUI and Agent-PC60- `SSH_HOST` — Host for SSH (default: `host.docker.internal`)61- `SSH_USER` — SSH username62- `WORKSPACE_ROOT` — Root directory agent can access63- `OPENWEBUI_PORT` — External port for Open WebUI (default: 3000)64- `AGENTPC_PORT` — External port for Agent-PC (default: 8765)6566## Commands6768```bash69# Dev (no Docker)70cd server && pip install -r requirements.txt && python main.py7172# Docker73docker compose up -d # Base services74docker compose --profile ollama up -d # With local LLMs75docker compose logs -f agent-pc # Agent-PC logs76docker compose build agent-pc && docker compose up -d # Rebuild7778# Test79curl http://localhost:8765/health80curl "http://localhost:8765/tools?secret=agent-pc-local-secret-change-me"81```82
One repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| electricpants01/agent-pc.clinerules/project.md · 0 | Cline rules | setupteststyledo-not+1 | 80/100 | 14 days ago |
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| TechSquidTV/Hermes.cursor/rules/10-hermes-api.mdc · 46 | Cursor rules | testlint-formatstylearch+5 | 100/100 | 14 days ago | |
| TechSquidTV/Hermes.cursor/rules/20-hermes-api-tests.mdc · 46 | Cursor rules | teststyletesting-strategysecurity+3 | 97/100 | 14 days ago | |
| langflow-ai/langflow.cursor/rules/docs_development.mdc · 153k | Cursor rules | setupbuildtestlint-format+7 | 97/100 | 14 days ago | |
| pr-pm/prpm.cursor/rules/github-actions-testing.mdc · 121 | Cursor rules | setupbuildstylearch+4 | 93/100 | 14 days ago | |
| enuno/unifi-mcp-server.cursor/rules/common-mistakes.mdc · 226 | Cursor rules | testlint-formatgitdo-not | 93/100 | today | |
| duckduckgo/content-scope-scripts.cursor/rules/strict-broker-protection-actions.mdc · 70 | Cursor rules | buildteststyletypes+4 | 93/100 | 14 days ago | |
| pr-pm/prpm.cursor/rules/creating-agents-md.mdc · 121 | Cursor rules | testlint-formatstylearch+7 | 92/100 | 14 days ago | |
| coollabsio/coolify.cursor/rules/coolify-ai-docs.mdc · 61k | Cursor rules | buildteststylearch+5 | 92/100 | 14 days ago |
A badge carrying the measured quality of the strongest agent config file in this repository, out of 100. It reads from this index every time somebody loads your page, so it changes when the measurement changes and there is nothing to keep up to date. Free, no account, and the value is not something you or we can set by hand.
[](https://rulestack.kynth.studio/configs/electricpants01-agent-pc-cursor-rules-project)Would rather not hotlink us? Every badge is also served in shields.io’s endpoint schema, so shields renders the image and your readers never talk to our domain:
Published by Toolproof, the masthead over this index and eight others. The method behind the number is at toolproof.kynth.studio/methodology, and the whole thing is readable as JSON with no key at /api.