Codync
免费开源的 1:1 Grok Bot 与 Muse 替代方案。可在 iPhone、Mac 或 Linux 桌面上将 Claude 代码、Codex、Cursor 以及 40 多个编码代理作为持久机器人使用。支持群组聊天、线程、应用。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证AI Playground by OwnYourWebsite
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗A developer-first, local-first LLM playground that integrates the Model Context Protocol (MCP) directly into your browser. Configure models, connect remote/hosted MCP servers, trace request/response payloads in raw JSON, and export production-ready snippets in seconds.
https://api.githubcopilot.com/mcp/) natively using your GitHub PAT.Use Node.js 22.23.3, pinned in .node-version, and install the locked dependency versions:
npm ci
cp .env.example .env.local # optional: configure environment variables (see below)
npm run dev
Open http://localhost:3000 to view the workspace.
RATE_LIMIT_REQUIRED=1, and keep RATE_LIMIT_FAIL_OPEN=0. Never enable ALLOW_PRIVATE_NETWORK on a public deployment. Keep Fluid compute enabled so long chat turns are not cut off at 60 seconds.Chats and keys belong to the browser and origin where they were saved; they do not automatically transfer from localhost or the demo to your deployment. The recovery import transfers backed-up chats/files, not provider keys. A hosted instance also cannot reach Ollama on your computer through its own localhost.
Click Settings in the bottom-left corner.
Configure a Custom Provider (Base URL, API Key, Model ID) for any OpenAI-compatible API, or expand Popular Providers to set keys and override default model IDs for:
sk-...)sk-ant-...)gsk_...)http://127.0.0.1:11434/api)Default models: gpt-5.6-luna (OpenAI), claude-sonnet-5 (Anthropic), qwen/qwen3.8-27b (Groq), llama3 (Ollama). Focusing a model field fetches the provider's current model list with the key/URL entered so far and offers it as suggestions; any ID can still be typed. A retired or misspelled ID produces an explicit model not found error. Custom providers and Ollama are called through the OpenAI-compatible /chat/completions endpoint (vLLM, LM Studio, OpenRouter, llama.cpp and similar servers).
Remember keys on this device defaults on and stores secrets as plain text in IndexedDB. Turn it off to keep secrets in this tab only; saved provider definitions remain, without their keys. Expiry is checked on load, not a background deletion timer. Saving a top-level key field refreshes its 30-day timestamp; older keys without a timestamp are preserved. Saved custom-provider keys have no per-key expiry.
get_me, get_file_contents, etc.) will load instantly!Connect any remote MCP server — not just the built-in GitHub preset — by adding it directly in the right sidebar.
Tavily Search).https://mcp.tavily.com/mcp).Authorization: Bearer <your-key>. Use "+ Add header" to add more than
one (e.g. an API key header plus a version header).Example: Tavily's remote MCP (
https://mcp.tavily.com/mcp) works with a singleAuthorization: Bearer <your Tavily key>header. This is just one example among many — the app is intentionally vendor-neutral, so you can plug in any Streamable HTTP / SSE MCP server.
Security note: MCP tool output is untrusted content. The model should treat tool results as data, never as instructions. Review tool arguments before approving, and only connect servers you trust.
13k / 131k tokens). The limit comes from the provider's model list when it reports one (Anthropic, Groq, OpenRouter-style servers); OpenAI does not, so only the used part is shown.Use Add attachments beside the message field, preview or remove files, then send with or without a text message. Text is read locally; images are sent as real multimodal input, not just filenames. Nothing is sent during selection/preview.
When a model "thinks" before answering, that hidden reasoning is surfaced in the Thought process accordion above each assistant reply. It is collapsed by default and shows a live "Thinking…" placeholder while it is still streaming.
The accordion is fed from two sources:
<think>, <thinking>, <reasoning>, and
<thought> are parsed client-side, stripped from the visible answer, and
shown under the accordion instead — with a fallback if a tag opens but never
closes.Reasoning content never bleeds into the main reply — the visible answer always stays clean.
store: false, so responses are not retained by OpenAI
for later retrieval and nothing depends on server-side conversation state.Skills are reusable instruction presets / prompt templates shown in the left sidebar with an icon. Four built-in skills are seeded on first run:
| Skill | Icon |
|---|---|
| Repo Explorer | folder-tree |
| Code Reviewer | code |
| Debugger | bug |
| Data Analyst | database |
Clicking a skill opens an editable instruction preview and a "use GitHub MCP"
toggle. Apply places the instructions into the input box for your next
message. You can create custom skills (choose a name, an icon including
sparkles, instructions, and an optional GitHub MCP toggle) and delete custom
ones. Everything is stored locally in IndexedDB via getSkills / saveSkill /
deleteSkill.
For local development, all environment variables are optional — the app works out of the box with an empty .env.local. Public deployments must configure abuse protection; see .env.example for placeholders and the security guidance for the trust boundary.
| Variable | Default | Description |
|---|---|---|
ALLOW_PRIVATE_NETWORK | (empty) | Private/LAN/localhost and http:// targets (MCP servers, Ollama, custom provider URLs, model lists) are allowed automatically under npm run dev and blocked in production builds (Vercel, Docker, next start). Set to 1 only on a self-hosted instance that must reach your own LAN; never on a public deployment. ALLOW_PRIVATE_MCP=1 is a deprecated alias. |
UPSTASH_REDIS_REST_URL | (empty) | Base HTTPS Upstash REST URL, without /pipeline or /multi-exec. With both credentials empty and RATE_LIMIT_REQUIRED=0, rate limiting is disabled for local use. |
UPSTASH_REDIS_REST_TOKEN | (empty) | Upstash Redis REST token (kept server-side only). |
RATE_LIMIT_CHAT_PER_MINUTE | 20 | Chat requests per 60-second window, per trusted IP or shared bucket. |
RATE_LIMIT_MCP_PER_MINUTE | 60 | MCP proxy requests per 60-second window, per trusted IP or shared bucket. |
RATE_LIMIT_MODELS_PER_MINUTE | 30 | Model-list requests (Settings suggestions, context limit) per 60-second window, per trusted IP or shared bucket. |
RATE_LIMIT_REQUIRED | 0 | Set to 1 on public deployments: absent/incomplete Redis credentials then produce HTTP 503 instead of silently disabling protection. |
RATE_LIMIT_FAIL_OPEN | 0 | Configured Redis failures return 503 by default. 1 explicitly permits requests during Redis failures; not recommended for public use. Invalid configuration still fails closed. |
RATE_LIMIT_IP_HEADER | (empty) | Operator-selected header containing one IP, overwritten by a trusted edge. No header means one shared bucket per scope; visitor forwarding headers are ignored. |
RATE_LIMIT_TIMEOUT_MS | 2000 |
Rate limiting uses one atomic Upstash REST transaction for the counter and TTL, with no extra npm dependencies or automatic retries. The 60-second window starts with the first request and is not extended by later requests. Quota exhaustion returns 429 with the remaining window in
Retry-After; Redis failures return 503 by default. Invalid/incomplete configuration is never silently accepted. All attempts consume quota, including requests later rejected by the handler.
Public deployment: set
RATE_LIMIT_REQUIRED=1, provide both Redis credentials and leaveRATE_LIMIT_FAIL_OPEN=0. WithoutRATE_LIMIT_IP_HEADER, all users share the chat, MCP and model-list limits separately. For per-IP quotas, choose a header only after verifying that your proxy/hosting edge overwrites it with one actual client IP and the origin cannot be reached directly. Comma-separated forwarding chains and missing/invalid selected headers are rejected with 503. The application cannot verify that your reverse proxy is trustworthy; rate limiting does not replace access control or edge-level abuse protection.
Private-network protection (SSRF): in production every server-side outbound request — MCP proxy, provider base URLs (Ollama, custom) and model lists — must target a public address; DNS answers are re-checked at connect time and redirects are not followed. A hosted app therefore cannot reach Ollama on your computer. For a self-hosted instance next to a local Ollama or LAN server, set
ALLOW_PRIVATE_NETWORK=1.
Function duration: the chat route declares
maxDuration = 300seconds and the MCP proxy90(a tool call waits up to 60 s). On Vercel Hobby this requires Fluid compute (enabled by default on new projects); without it Hobby caps functions at 60 s and long reasoning/tool turns are cut off.
Contributions are welcome! Please read our Contributing Guide for details on our code of conduct and the process for submitting pull requests.
This project is licensed under the MIT License - see the LICENSE file for details.
If you build something cool with this tool, please let us know! Open an issue or submit a PR to be featured here.
🌐 Brought to you by Own Your Website This playground is an open-source tool built and maintained by OwnYourWebsite - empowering developers and businesses with ready-to-deploy web solutions, embedded AI architectures, and full code ownership.
Main Ecosystem: ownyourwebsite.app
Live Playground: ai-playground.ownyourwebsite.app
| Absolute Redis deadline including response body, in milliseconds; positive integer up to 10000. |