{"id":50327635,"url":"https://github.com/zpoint/vibe-seller","last_synced_at":"2026-05-29T07:32:48.433Z","repository":{"id":357745579,"uuid":"1238353357","full_name":"zpoint/vibe-seller","owner":"zpoint","description":"Multi-store browser-automation framework for cross-border sellers (Ziniao + Chrome). Local-first, BYO LLM.","archived":false,"fork":false,"pushed_at":"2026-05-28T05:18:53.000Z","size":9005,"stargazers_count":5,"open_issues_count":1,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-28T05:20:14.634Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://github.com/zpoint/vibe-seller","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zpoint.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-14T03:36:15.000Z","updated_at":"2026-05-27T04:02:18.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/zpoint/vibe-seller","commit_stats":null,"previous_names":["zpoint/vibe-seller"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zpoint/vibe-seller","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zpoint%2Fvibe-seller","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zpoint%2Fvibe-seller/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zpoint%2Fvibe-seller/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zpoint%2Fvibe-seller/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zpoint","download_url":"https://codeload.github.com/zpoint/vibe-seller/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zpoint%2Fvibe-seller/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33642312,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-29T07:32:47.514Z","updated_at":"2026-05-29T07:32:48.416Z","avatar_url":"https://github.com/zpoint.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eVibe Seller\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003eMulti-store browser-automation framework for cross-border sellers.\u003c/b\u003e\u003cbr/\u003e\n  Runs on macOS or Windows (WSL). Drives real browsers — Ziniao for fingerprint isolation, plain Chrome otherwise. Bring your own LLM API key — Claude, DeepSeek, GLM, Qwen, Kimi, MiniMax all work.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"README.md\"\u003eEnglish\u003c/a\u003e ·\n  \u003ca href=\"README.zh.md\"\u003e中文\u003c/a\u003e\n\u003c/p\u003e\n\n\n\u003cp align=\"center\"\u003e\u003cimg width=\"1200\" height=\"338\" alt=\"combined_small\" src=\"docs/images/combined_small.gif\" /\u003e\u003c/p\u003e\n\n\u003cimg width=\"2779\" height=\"1737\" alt=\"1_combined\" src=\"docs/images/1_combined.png\" /\u003e\n\n\u003cimg width=\"1989\" height=\"1490\" alt=\"2_combined\" src=\"docs/images/2_combined.png\" /\u003e\n\n\n\n\n---\n\n## What is Vibe Seller?\n\nA local-first **browser-automation framework**. AI agents drive your\nreal browser — Ziniao for fingerprint isolation, or plain Chrome —\nthrough CDP, the same way you'd click through pages yourself. Ad tuning, listing launches, inventory checks, invoicing,\nreturns, warehouse setup, logistics lookup — whatever you can do in\na browser, the agent can do too.\n\nEach store gets its own agent — **think of it as hiring a different\nops person for each store**. The Store A agent only sees Store A's\nprofile, has its own memory and workspace, can't touch the other\nstores' agents.\n\n```mermaid\nflowchart LR\n    U1[You] -.LAN.-\u003e S\n    U2[Teammates] -.LAN.-\u003e S\n    subgraph OfficeHost[\"Office host — Mac or Windows (always on)\"]\n        S[Vibe Seller server\u003cbr/\u003eweb UI on :7777]\n        S --\u003e A1[Agent for Store A]\n        S --\u003e A2[Agent for Store B]\n        S --\u003e A3[Agent for Store C]\n        A1 --\u003e|CDP| Z1[Ziniao profile A]\n        A2 --\u003e|CDP| Z2[Ziniao profile B]\n        A3 --\u003e|CDP| Z3[plain Chrome]\n    end\n```\n\nOne always-on machine (Mac, or Windows running WSL) hosts the server\nand runs Ziniao in dev mode. You and your team open the web UI from\nany device on the same LAN.\n\n## Why Vibe Seller?\n\nThe big AI/automation tools — OpenClaw, n8n, 影刀 — all stop at plain\nChrome. None of them can drive Ziniao, which is the fingerprint\nbrowser most cross-border sellers actually live in. Vibe Seller is\nthe bridge.\n\n- **Native Ziniao control.** CDP, not Playwright on vanilla Chrome,\n  not UI-coordinate clicks. Lower risk-control risk, more stable.\n- **Multi-browser by design.** Plain Chrome is a first-class backend\n  alongside Ziniao — pick per store. Any browser that exposes CDP can\n  be plugged in by writing a backend class.\n- **Multi-LLM by design.** Built on top of the Claude Code CLI, so\n  any Anthropic-compatible provider works — Claude, DeepSeek, Kimi,\n  MiniMax, GLM, Qwen. Switch in Settings, no code changes. Your key,\n  your bill.\n- **No SaaS lock-in.** Code on your machine, data on your disk, no\n  account required.\n- **Auditable.** Every step, every prompt, every screenshot is logged\n  and replayable.\n- **Multi-store from day one.** Each store keeps its own platform,\n  data, SOPs, accumulated knowledge. Store A on Amazon US with its\n  own listing strategy, Store B on Noon AE with totally different\n  SOPs, Store C on Shopify DTC — they coexist without cross-talk.\n\n## Install\n\n### Prerequisites\n\n- OS — **macOS** *or* **Windows 11+ with WSL2**\n\n  \u003csub\u003e\u003cb\u003eFor Windows users:\u003c/b\u003e WSL and the Windows-side browser need to talk to each other, so WSL must start in \u003cb\u003emirrored networking mode\u003c/b\u003e, which only Windows 11+ supports.\u003c/sub\u003e\n- Python 3.11+ (auto-installed by [`uv`](https://docs.astral.sh/uv/) if missing)\n- Node.js 22+\n- One LLM API key: Claude / DeepSeek / Kimi / MiniMax / GLM / Qwen\n- Ziniao (optional but recommended — plain Chrome works if you skip it)\n\n### Quick start (one-liner)\n\n```bash\ncurl -sSL https://raw.githubusercontent.com/zpoint/vibe-seller/main/install.sh | bash\nvibe-seller start\n```\n\nOpen \u003chttp://localhost:7777\u003e.\n\nUpgrade: `vibe-seller upgrade`. Uninstall: `uv tool uninstall vibe-seller`.\n\n\u003e If `install.sh` fails, paste the repo URL\n\u003e \u003chttps://github.com/zpoint/vibe-seller\u003e into any coding agent\n\u003e (Claude Code, Codex, opencode, Cursor) and tell it \"read the\n\u003e README and install this.\" The README is written so any agent can\n\u003e follow it; most environment issues take one or two commands to fix.\n\n\u003cdetails\u003e\n\u003csummary\u003eFrom source (for contributors)\u003c/summary\u003e\n\n```bash\ngit clone https://github.com/zpoint/vibe-seller\ncd vibe-seller\n./install.sh --dev   # system deps + venv + frontend build + Playwright\n./start.sh           # serves :7777\n```\n\n\u003c/details\u003e\n\n## First run\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e📖 Beginner walkthrough (8 steps from zero to your first task, with screenshots)\u003c/b\u003e\u003c/summary\u003e\n\nFor anyone who hasn't used a terminal before. Eight steps:\n\n### 1. Open a terminal\n\n- **Mac**: ⌘ + Space, type \"Terminal\", hit return.\n- **Windows**: Install WSL2 first (search \"Install WSL2 on Windows\"\n  for a tutorial), then open Ubuntu.\n\nA black window appears with a blinking cursor.\n\n### 2. Install\n\nCopy this **entire line**, paste into the terminal, hit return:\n\n```bash\ncurl -sSL https://raw.githubusercontent.com/zpoint/vibe-seller/main/install.sh | bash\n```\n\nTakes a few minutes (downloads the Python toolchain, installs\nVibe Seller, fetches Chromium). When the output ends with\n`Vibe Seller installed!` you're set.\n\nStuck or hitting an error? Drop the repo URL\n\u003chttps://github.com/zpoint/vibe-seller\u003e into any coding agent\n(Claude Code, Codex, opencode, Cursor) and say \"read the README and\ninstall this.\" The agent will work through it for you.\n\n### 3. Start the server\n\n```bash\nvibe-seller start\n```\n\nThe server daemonizes — the CLI prints the PID and log path and\nexits. You can close the terminal; the server keeps running. To\nstop it later: `vibe-seller stop`.\n\n### 4. Open the web UI\n\nIn your browser:\n\n```\nhttp://localhost:7777\n```\n\nWhen the Vibe Seller home page loads, you're done (no login by\ndefault).\n\n### 5. Add your LLM key\n\n`Settings → AI Agent` → pick a provider (DeepSeek bills per token,\nClaude has the highest ceiling, Kimi / MiniMax / GLM / Qwen all\nwork), paste your API key, save. Keys are encrypted at rest.\n\n\u003e **No key yet?** [DeepSeek](https://platform.deepseek.com/) is\n\u003e the path of least resistance — sign up, top up $2–3,\n\u003e pay-as-you-go per token (cost per task scales with task size).\n\u003e The other providers usually sell prepaid monthly token packs;\n\u003e pick a plan that fits your usage.\n\n\u003e Already signed in to Anthropic via Claude Code on this machine?\n\u003e Vibe Seller reuses that session — skip this step.\n\n\u003e **Using cc-switch or a similar tool? Pick the default here.**\n\u003e\n\u003e Tools like cc-switch edit `~/.claude/settings.json`, which\n\u003e conflicts with Vibe Seller's AI picker. Just pick the default\n\u003e and let cc-switch manage which AI you use.\n\u003e\n\u003e If you'd rather Vibe Seller manage it: quit cc-switch, then\n\u003e **copy-paste this line into a terminal** and hit return to\n\u003e clear what cc-switch wrote into `settings.json`:\n\u003e\n\u003e ```bash\n\u003e python3 -c \"import json,pathlib;p=pathlib.Path.home()/'.claude'/'settings.json';d=json.loads(p.read_text());env=d.get('env') or {};[env.pop(k,None) for k in list(env) if k.startswith('ANTHROPIC_')];d['env']=env;p.write_text(json.dumps(d,indent=2))\"\n\u003e ```\n\n\u003cimg width=\"3783\" height=\"1554\" alt=\"llm_1\" src=\"docs/images/llm_1.png\" /\u003e\n\n\u003cimg width=\"1082\" height=\"1418\" alt=\"llm_2\" src=\"docs/images/llm_2.png\" /\u003e\n\n### 6. Connect your stores\n\n`Settings → Stores → Add Ziniao account`, fill in the account, pick\nthe right Ziniao profile for each store, save. Skip the Ziniao bit\nand pick plain Chrome instead if you prefer.\n\n**Mac**:\n\n\u003cimg width=\"969\" height=\"1350\" alt=\"ziniao\" src=\"docs/images/ziniao.png\" /\u003e\n\n**Windows (WSL)** — Ziniao runs on the Windows side, Vibe Seller\nruns inside WSL. Ziniao only runs one mode at a time, and Vibe\nSeller needs developer mode (that's what exposes CDP). WSL can't\nrestart Windows-side Ziniao itself, so a launcher does it from\nWindows:\n\n1. Download `ziniao_webdriver.bat` from\n   `Settings → Stores → Download launcher`.\n2. Double-click it on Windows.\n3. Back in WSL, hit **Refresh** on the Ziniao page in Vibe Seller —\n   your accounts pop in automatically, no manual fields to fill.\n\n\u003cimg width=\"906\" height=\"1251\" alt=\"ziniao_wsl\" src=\"docs/images/ziniao_wsl.png\" /\u003e\n\n### 7. (Optional) Wire up email / WeCom\n\nWant the agent to do daily email triage and push critical items to a\ngroup chat? `Settings → Integrations`:\n\n- **Email**: enter the mailbox address for each store; the IMAP\n  server fields auto-populate (gmail, outlook, self-hosted all\n  supported), so all you fill in is the secret (an app password\n  usually). Not sure how to generate one? Ask any AI with the name\n  of your email provider. Agent scans daily afterwards.\n- **WeCom (企业微信)**: set up a group bot, paste the webhook URL.\n  High-priority anomalies post automatically.\n- **TickTick / Google Workspace**: connect here if you want results\n  synced into a calendar or Doc.\n\nSkipping is fine — come back after your first task.\n\n### 8. Create your first task\n\nHome page → **New task** → pick a store → write one sentence:\n\n- \"Check ads and pause any keyword with ACOS over 30%.\"\n- \"Export the past 7 days of sales reports.\"\n- \"Review inventory and estimate next month's restock SKUs.\"\n\nThe agent plans the steps, drives the browser, and writes you a\nreport. Auto mode is the default — just run it. The toggle in the\ntask footer can flip to Plan mode if you want to review the plan\nbefore execution.\n\n\u003c/details\u003e\n\n## What you can do with it\n\nVibe Seller is an **AI agent framework** — the browser is one of\nits tools, not the only one. The agent can browse pages, read your\nemail, send WeCom messages, write to TickTick / Dida365, update\nGoogle Docs. Anything that fits *observe → decide → act* — whether\na browser is involved or not.\n\nA few cross-border scenarios it's commonly used for:\n\n| Task | What happens |\n|---|---|\n| **Ad tuning** | Reads Campaign Manager, finds under- and over-spenders, proposes bid / budget changes, applies them with your approval. |\n| **Listing publication** | Creates new listings from a template — title, bullets, photos, A+ content, variations. |\n| **Listing audit** | Walks every store's catalog, flags suppressed / out-of-stock / inactive items. |\n| **Inventory check** | Pulls stock levels; low-stock SKUs get pushed to WeCom automatically. |\n| **Warehouse / inbound setup** | Creates inbound shipments, allocates SKUs to FBA / FBN, prints box labels. |\n| **Logistics lookup** | Tracks in-transit shipments, freight delivery, customs clearance; flagged shipments get filed as TickTick todos. |\n| **Invoices \u0026 reports** | Crawls tax docs, business reports, advertising reports; downloads are archived to Google Drive. |\n| **Email handling** | Sorts buyer messages, forwards important ones to WeCom, drafts replies. |\n| **Anything you add** | Write a Skill (a markdown file with steps) or teach the agent once — it'll remember next time. |\n\nA single ad-tuning run is ≈ 3–5 minutes and costs ≈ ¥1 in LLM tokens\n(rough — depends on provider and campaign volume).\n\n## Integrations\n\nBeyond the browser, the agent can call these external services\ndirectly (hook up permissions in First run — no code):\n\n| Service | What it does |\n|---|---|\n| **Email** (IMAP/SMTP) | Read your bound store inboxes, classify, forward, draft replies |\n| **WeCom** (企业微信) | Push important events, cross-group notifications, forward buyer inquiries |\n| **TickTick / Dida365** | Auto-create todos (follow-ups, order tracking, periodic checks) |\n| **Google Workspace** | Gmail, Drive, Docs, Sheets, Slides, Calendar — read, write, edit |\n\nA single task can mix browser + service calls. e.g. *\"Find all\nslow-moving SKUs across stores\"* → browser pulls inventory →\ngenerates a Google Sheet → posts a WeCom summary → drops a \"price\nreview next week\" todo into TickTick.\n\n## Platforms\n\n### Built-in Skills\n\n- **Amazon Seller Central** (every marketplace — US / EU / MENA, etc.)\n- **Noon Seller Lab**\n\nThese are the platforms the project was dogfooded against. The\nSkills capture page mechanics, navigation paths, UI gotchas. With\nthe Skill in hand, the agent typically completes common operations\n(view ads, export reports, adjust bids, launch listings, ...) **on\nthe first try**.\n\n### Anything else browser-based\n\n- Mercado Libre (美客多), AliExpress (速卖通), Shopify\n- Lazada, Shopee, TikTok Shop\n- … and any other browser-accessible seller portal.\n\nNo pre-written Skill for these — the maintainers don't have test\naccounts, so the mechanics aren't documented upfront. The agent\nwill fumble its first runs and need a few attempts to find the full\nflow.\n\n**The framework's built-in self-learning handles most of this on\nits own.** As it runs, the agent takes notes — which button didn't\nwork, which path succeeded, which dead ends to avoid — and saves\nthem to that store's local knowledge. This happens **without you\nneeding to supervise**; the agent records its own mistakes as it\ngoes. Optional human hints get recorded too if you happen to drop\nany. Next run, prior experience is pulled in automatically, so it\ndoesn't hit the same wall. After a few rounds, common operations\non a new platform stabilize.\n\nOnce you've ironed something out, please consider upstreaming it as\na proper Skill — see *Contributing* below.\n\n## Running\n\n```bash\n./start.sh          # default :7777\n./start.sh 8080     # custom port\n./stop.sh           # stop\n./restart.sh        # restart\n```\n\nTo let teammates use the same instance, they open\n`http://\u003cyour-host-ip\u003e:7777` on the same LAN.\n\n## FAQ\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eHow much does it cost?\u003c/b\u003e\u003c/summary\u003e\n\nVibe Seller is free and open source. You pay your LLM provider\ndirectly. Rough scale: one ad-tuning run ≈ ¥1 in DeepSeek tokens.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eWhich LLM should I pick?\u003c/b\u003e\u003c/summary\u003e\n\nDifferent tasks need different model strength. Match the model to\nthe task:\n\n| Task type | Recommended |\n|---|---|\n| **Simple** — email classification, fixed-flow data entry, structured extraction | MiniMax, DeepSeek, Claude, Kimi — pick whatever's cheapest |\n| **Complex** — exploring a new platform (no built-in Skill), ad optimization, inventory strategy, long multi-page flows | **DeepSeek, Claude, or other SOTA models. Don't use cheap models here.** |\n\nWhy? Complex tasks ask the agent to read the Skill, judge page\nstate, call tools, and take notes — all in the same context window.\nCheap models (the low-tier MiniMax tiers especially) commonly:\n\n- Skip Skill steps or run them out of order\n- Garble tool-call arguments\n- Forget earlier decisions once the context grows\n\nOne often-overlooked factor: **context window size.** Claude and\nDeepSeek v4 ship with 1M context windows; most other models sit\naround 200k. On a long task (multi-page tables, cross-flow\nconversation history, accumulated notes), 200k fills up fast — the\nmodel starts forgetting earlier decisions, dropping details, or\nbreaking outright. 1M handles the same task with room to spare.\n\nFor simple tasks, model choice barely matters; save tokens with a\ncheap one. For hard tasks, paying for a SOTA model isn't a luxury —\nit's the cheaper option once you count failed runs.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eDo I really need Ziniao?\u003c/b\u003e\u003c/summary\u003e\n\nNo — plain Chrome works fine for stores that don't need fingerprint\nisolation. But if you already run Ziniao for cross-border, that's the\nrecommended path: per-store profile separation matches the way you\nalready work.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eHow does Ziniao integration actually work? Developer mode vs normal mode / credentials needed / where they're stored\u003c/b\u003e\u003c/summary\u003e\n\nZiniao runs in exactly one mode at a time:\n\n- **Normal mode** — what you get when you double-click the Ziniao\n  icon. UI-only, designed for manual daily work. No remote control.\n- **Developer mode (WebDriver)** — same Ziniao install, launched\n  with extra flags so it exposes an HTTP API on\n  `127.0.0.1:16851`. This is the only mode Vibe Seller (or any\n  external tool) can drive.\n\nThe two modes share one Ziniao process, so they can't run side by\nside. Switching requires restarting Ziniao.\n\n- **macOS**: Vibe Seller handles the swap itself — kills any\n  normal-mode instance and relaunches with `--run_type=web_driver`\n  when you open a store.\n- **Windows (WSL)**: WSL can't restart a Windows-side app across\n  the VM boundary, so the Windows side runs a one-line `.bat`\n  launcher (downloadable from `Settings → Stores → Download\n  launcher`) that does the kill + relaunch. Double-click it once;\n  Vibe Seller picks the developer-mode session up via Refresh.\n\n**Credentials needed** — `Settings → Stores → Add Ziniao account`,\nthree fields:\n\n| Field | What it is |\n|---|---|\n| **Company** (公司名称) | Your Ziniao enterprise company identifier |\n| **Username** (企业用户名) | Sub-account username under that company |\n| **Password** | That sub-account's password |\n\nSame credentials you use to log into Ziniao — Vibe Seller passes\nthem to the developer-mode HTTP API to list your browsers and start\nsessions.\n\nThe **BOSS account** also needs to enable developer mode for your\ncompany on the Ziniao Open Platform (one-time admin setup, see\n\u003chttps://open.ziniao.com/docSupport?docId=99\u003e). Without it the\nZiniao API rejects requests with `statusCode: -10003`.\n\n**Where credentials are stored** — all at\n`~/.vibe-seller/data/vibe_seller.db` (local SQLite). No upload, no\ntelemetry path carries credentials out.\n\n- **Password** is Fernet-encrypted at rest (key derived via SHA256\n  from your local `JWT_SECRET`) and never returned by any HTTP\n  endpoint — decrypted in memory only when Vibe Seller calls the\n  Ziniao HTTP API. See `app/utils/crypto.py` and\n  `app/routers/ziniao_accounts.py`.\n- **Company** and **username** are plain strings — identifiers, not\n  secrets (same shape as an email address).\n\nAsking for the password is the necessary trade-off: developer-mode\nauth requires it, no OAuth / token flow exists on the Ziniao side\ntoday. If that's a deal-breaker, use plain Chrome instead\n(`Settings → Stores → Add Chrome store`).\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eZiniao says \"无权限通过 webdriver 登录\" when I bind a store. How do I fix it?\u003c/b\u003e\u003c/summary\u003e\n\nThe BOSS (admin) account hasn't enabled WebDriver login for your\nsub-account yet. Follow [Ziniao's official guide](https://open.ziniao.com/docSupport?docId=99#%E7%AC%AC%E4%B8%80%E6%AD%A5%EF%BC%9A%E7%99%BB%E5%BD%95%E5%BC%80%E6%94%BE%E5%B9%B3%E5%8F%B0%E6%8E%A7%E5%88%B6%E5%8F%B00)\nand tick the WebDriver-login option in the Open Platform console:\n\n\u003cimg width=\"1857\" height=\"903\" alt=\"Ziniao Open Platform — enable WebDriver login\" src=\"https://github.com/user-attachments/assets/c6066eff-f877-470e-a061-6abd73b6d2f8\" /\u003e\n\nThe admin (BOSS) account has to do this once. After it's saved,\nyour sub-account can log in via WebDriver and Vibe Seller will\nbind the store on the next refresh.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eZiniao says \"检测到您在新终端登录\" and won't let me bind the store. How do I fix it?\u003c/b\u003e\u003c/summary\u003e\n\nThis is Ziniao's new-device security check, not a Vibe Seller bug.\nThe first time a given machine logs into an account, Ziniao requires\na one-time manual approval:\n\n1. Open Ziniao on this machine and log in manually (normal mode, not\n   WebDriver) with the same sub-account credentials.\n2. Ziniao will show a new-device prompt — submit the approval request.\n3. Have the admin (BOSS) account approve the device in the Ziniao\n   backend.\n\nAfter that one-time approval the device is trusted, and Vibe Seller's\nWebDriver login goes through on the next refresh.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eCan I run it on a headless server?\u003c/b\u003e\u003c/summary\u003e\n\nNot quite. Vibe Seller itself is a server, but Ziniao needs a\ndesktop GUI to render. The standard setup is a small desktop machine\nsitting on a desk — a Mac mini, a mini-PC running Windows + WSL, or\na spare laptop — that the team connects to over LAN.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eWhat happens to my store data?\u003c/b\u003e\u003c/summary\u003e\n\nEverything — database, screenshots, logs — stays on your disk under\n`~/.vibe-seller/`. The only outbound traffic is the prompts you send\nto your LLM provider (which include whatever page snippets the agent\nreads).\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eWhere does the agent's \"memory\" live?\u003c/b\u003e\u003c/summary\u003e\n\nPer-store knowledge accumulates in `~/.vibe-seller/stores/\u003cslug\u003e/`\nas plain markdown — you can read it, edit it, copy it between\nmachines. Skills are markdown too. Nothing is locked inside a\nbinary blob.\n\n\u003c/details\u003e\n\n## Docs\n\n- [`docs/dev-guide.md`](docs/dev-guide.md) — full feature reference,\n  API, project structure, testing\n- [`DESIGN.md`](DESIGN.md) — architecture\n- [`docs/`](docs/) — subsystem deep-dives (browser, events,\n  scheduling, workspace, etc.)\n- [`CLAUDE.md`](CLAUDE.md) — contributor guide for Claude Code\n\n## Contributing\n\nPRs welcome — whether you write the code yourself or let Claude\nCode / Cursor / your coding agent do it. Python side is Google\nstyle (ruff-enforced); frontend is TypeScript strict + ESLint.\n[`CLAUDE.md`](CLAUDE.md) is the project conventions doc — it's\nwritten for AI agents and reads cleanly as a contributor guide.\n\n## License\n\n[Apache License 2.0](LICENSE).\n\n## Contact\n\nQuestions or issues? Email the author at \u003czp0int@qq.com\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzpoint%2Fvibe-seller","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzpoint%2Fvibe-seller","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzpoint%2Fvibe-seller/lists"}