Jak sbírat klientovy podklady pomocí Claude Code

Co postavíte

Workflow pro Claude Code, který automaticky sesbírá všechny klientovy podklady pro webový projekt: logo, texty, fotky, přihlašovací údaje. Vše je sledované, upomínané podle rozvrhu, kontrolované na kvalitu a doručené vašemu agentovi jako typovaná, hned použitelná data. Žádná e-mailová vlákna, žádné odkazy na Google Drive, žádné ruční upomínání.

Krok 1: Nainstalujte BriefGate MCP

bash
npm install -g @briefgate/mcp
claude mcp add briefgate -- briefgate-mcp --api-key bg_live_xxxxx

Zaregistrujte se na https://app.briefgate.dev/app a získejte API klíč. Po nastavení má Claude Code přístup k nástrojům BriefGate v každé session.

Nechcete vkládat klíč přímo? Spusťte claude mcp add briefgate -- npx -y @briefgate/mcp následované npx -y @briefgate/mcp login — přihlásí vás to přes dashboard a uloží přihlašovací údaj lokálně. Tenhle postup i hostovaný OAuth endpoint najdete v Rychlém startu.

Ověřte připojení:

bash
claude mcp list
# briefgate: connected

Krok 2: Definujte, co potřebujete

Tady je kompletní volání define_intake pro typický web restaurace. Tohle váš agent zavolá na začátku projektu, ještě než začne cokoli stavět:

json
{
  "project_name": "Bella Cucina Restaurant Website",
  "client": {
    "email": "[email protected]",
    "name": "Marco",
    "language": "en",
    "timezone": "Europe/Prague"
  },
  "items": [
    {
      "key": "logo",
      "type": "image",
      "label": "Restaurant logo",
      "help": "SVG or high-res PNG preferred. Transparent background. Minimum 512px wide.",
      "constraints": {"formats": ["svg", "png"], "min_width": 512, "transparent_background": true}
    },
    {
      "key": "hero_copy",
      "type": "longtext",
      "label": "Homepage headline and intro text",
      "help": "The main text above the fold on the homepage. 1-2 sentences max.",
      "constraints": {"max_chars": 400}
    },
    {
      "key": "opening_hours",
      "type": "structured",
      "label": "Opening hours",
      "schema": {
        "type": "object",
        "properties": {
          "mon_fri": {"type": "string", "title": "Monday–Friday"},
          "sat": {"type": "string", "title": "Saturday"},
          "sun": {"type": "string", "title": "Sunday (leave blank if closed)"}
        },
        "required": ["mon_fri", "sat"]
      }
    },
    {
      "key": "photos",
      "type": "file_list",
      "label": "Restaurant photos",
      "help": "Food, interior, and ambiance photos. At least 5, up to 15. JPG, PNG, or HEIC.",
      "constraints": {"formats": ["jpg", "png", "heic"], "min_count": 5, "max_count": 15}
    },
    {
      "key": "existing_website",
      "type": "url",
      "label": "Current website URL",
      "help": "If you have an existing site, paste the URL here.",
      "required": false
    },
    {
      "key": "wp_admin",
      "type": "secret",
      "label": "Current site credentials",
      "help": "Username and password for the current site's admin panel. Encrypted at rest."
    },
    {
      "key": "ga4_id",
      "type": "text",
      "label": "Google Analytics 4 Measurement ID",
      "help": "Looks like G-XXXXXXXXXX. Found in GA4 Admin > Data Streams.",
      "pattern": "^G-[A-Z0-9]+$",
      "required": false
    }
  ],
  "due_date": "2026-07-23",
  "chase_schedule": "default",
  "branding": {
    "sender_name": "Radim",
    "accent_color": "#2563eb"
  }
}

Klient dostane e-mail s magic link odkazem na portál, kde je každá položka zobrazená s popiskem a nápovědou, kterou jste zadali.

Krok 3: Nastavte termín a nechte běžet upomínání

due_date řekne portálu, aby klientovi zobrazil termín. chase_schedule: "default" posílá upomínky v T+2d, T+5d, T+9d, pak jednou týdně, dokud intake nedokončí nebo rozvrh nevypnete.

Klienta neupomínáte vy. BriefGate posílá upomínky vaším jménem. Váš vztah s klientem zůstává čistý — vy jste profesionál, který nastavil hladký, brandovaný proces; BriefGate je neviditelný motor za ním.

Zatímco se čeká, agent může pokračovat ve stavbě s náhradním obsahem. Intake je kontrolní bod, ne blokátor.

Krok 4: Zkontrolujte stav

Kdykoli zavolejte get_intake_status:

json
{
  "intake_id": "int_01J3K...",
  "status": "in_progress",
  "progress": {
    "total": 7,
    "submitted": 4,
    "pending": 2,
    "optional_skipped": 1
  },
  "items": [
    {"key": "logo", "status": "submitted"},
    {"key": "hero_copy", "status": "submitted"},
    {"key": "opening_hours", "status": "submitted"},
    {"key": "photos", "status": "pending"},
    {"key": "existing_website", "status": "skipped"},
    {"key": "wp_admin", "status": "pending"},
    {"key": "ga4_id", "status": "submitted"}
  ]
}

Pro notifikaci v reálném čase zaregistrujte webhook pro intake.completed místo pollování. Webhook vystřelí ve chvíli, kdy klient odešle poslední povinnou položku.

Krok 5: Vyžádejte opravu při problémech s kvalitou

Jakmile podklady dorazí, agent by je měl před pokračováním zkontrolovat. Pokud je logo příliš malé nebo text hero sekce přesahuje limit, zavolejte request_revision:

request_revision(
  intake_id: "int_01J3K...",
  item_key: "logo",
  note: "The uploaded logo is 200px wide. We need at least 512px for the site to look sharp on retina screens. If you have the SVG original, please upload that — SVG scales to any size without quality loss."
)

Klient dostane notifikaci, uvidí označenou položku s vaší poznámkou v portálu, znovu ji nahraje a odešle. Vystřelí webhook item.submitted a agent znovu zkontroluje get_intake_results.

Krok 6: Získejte výsledky a pokračujte ve stavbě

Jakmile je intake dokončený, zavolejte get_intake_results:

json
{
  "status": "completed",
  "completed_at": "2026-07-19T11:22:00Z",
  "items": [
    {
      "key": "logo",
      "type": "image",
      "status": "submitted",
      "value": {
        "url": "https://r2.briefgate.dev/signed/int_01J3K.../logo.svg?expires=...",
        "filename": "bellacucina-logo.svg",
        "width": 1024,
        "height": 512,
        "mime_type": "image/svg+xml",
        "size_bytes": 18432
      }
    },
    {
      "key": "hero_copy",
      "type": "longtext",
      "status": "submitted",
      "value": "Authentic Italian cuisine in the heart of Prague. Open daily."
    },
    {
      "key": "opening_hours",
      "type": "structured",
      "status": "submitted",
      "value": {
        "mon_fri": "11:00 – 22:00",
        "sat": "12:00 – 23:00",
        "sun": ""
      }
    },
    {
      "key": "wp_admin",
      "type": "secret",
      "status": "submitted",
      "token": "sec_live_xxxxx",
      "expires_at": "2026-08-18T11:22:00Z",
      "revealed": false
    },
    {
      "key": "ga4_id",
      "type": "text",
      "status": "submitted",
      "value": "G-ABC1234567"
    }
  ]
}

Agent použije:

Fotky ve formátu HEIC z položky photos se automaticky konvertují na JPEG na serveru. Agent vždy dostane URL adresy ve formátu JPEG bez ohledu na to, co klient nahrál.

Tipy

Nejdřív koncept, pak odeslání. Použijte send: false v define_intake, aby se intake založil v konceptu. Zkontrolujte položky v dashboardu a pak ho uvolněte příkazem POST /v1/intakes/:id/send, až budete spokojeni.

Zpracování po částech. Použijte parametr only_new: true v get_intake_results k získání pouze položek odeslaných od posledního volání. Užitečné ve webhook handlerech, kde chcete zpracovávat nová odeslání, jak přicházejí, bez opakovaného zpracování celého intake.

Automatické schválení. Ve výchozím nastavení přejde intake do stavu completed, jakmile jsou odeslané všechny povinné položky. Pro kontrolu před dokončením nastavte auto_approve_hours: 0 — intake pak čeká ve stavu pending_approval, dokud nezavoláte POST /v1/intakes/:id/approve.

Odhalujte přihlašovací údaje včas. Tokeny na přihlašovací údaje ve výchozím nastavení expirují 30 dní po odeslání. Zavolejte GET /v1/secrets/:token ve stejné session jako get_intake_results — token si neschovávejte na později. Odhalenou hodnotu ihned uložte do svého secrets manageru.