> ## Documentation Index
> Fetch the complete documentation index at: https://infisical.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Agent Vault with OpenCode

> Launch OpenCode with Agent Vault so it can make authenticated API calls without needing an actual token.

export const AgentVaultBranch = ({service, agent, serviceNot, agentNot, children}) => {
  const SELECTION_EVENT = "av-quickstart-selection-change";
  const KNOWN_SERVICE_IDS = new Set(["anthropic", "cloudflare", "cohere", "custom", "datadog", "deepseek", "discord", "fireworks", "gemini", "github", "github-npm", "gitlab", "google-workspace", "groq", "jira", "linear", "mistral", "notion", "npm", "openai", "openrouter", "pagerduty", "perplexity", "postmark", "resend", "sendgrid", "sentry", "shopify", "slack", "stripe", "supabase", "together", "twilio", "vercel", "xai"]);
  const KNOWN_AGENT_IDS = new Set(["claude-code", "codex", "opencode"]);
  const [selection, setSelection] = useState({
    service: null,
    agent: null
  });
  useEffect(() => {
    const sync = () => {
      const params = new URLSearchParams(window.location.search);
      setSelection({
        service: (() => {
          const v = params.get("service");
          return v && KNOWN_SERVICE_IDS.has(v) ? v : null;
        })(),
        agent: (() => {
          const v = params.get("agent");
          return v && KNOWN_AGENT_IDS.has(v) ? v : null;
        })()
      });
    };
    sync();
    window.addEventListener(SELECTION_EVENT, sync);
    window.addEventListener("popstate", sync);
    return () => {
      window.removeEventListener(SELECTION_EVENT, sync);
      window.removeEventListener("popstate", sync);
    };
  }, []);
  const parseList = raw => raw ? String(raw).split(",").map(entry => entry.trim()).filter(Boolean) : [];
  const matchesService = useMemo(() => {
    const current = selection.service ?? "none";
    if (service !== undefined && service !== null) {
      const wanted = parseList(service);
      if (wanted.length === 0) return true;
      if (!wanted.includes(current)) return false;
    }
    const excluded = parseList(serviceNot);
    if (excluded.includes(current)) return false;
    return true;
  }, [selection.service, service, serviceNot]);
  const matchesAgent = useMemo(() => {
    const current = selection.agent ?? "none";
    if (agent !== undefined && agent !== null) {
      const wanted = parseList(agent);
      if (wanted.length === 0) return true;
      if (!wanted.includes(current)) return false;
    }
    const excluded = parseList(agentNot);
    if (excluded.includes(current)) return false;
    return true;
  }, [selection.agent, agent, agentNot]);
  if (!matchesService || !matchesAgent) return null;
  return <>{children}</>;
};

export const AgentGuideInit = ({agent}) => {
  if (typeof window !== "undefined") {
    const params = new URLSearchParams(window.location.search);
    if (params.get("agent") !== agent) {
      params.set("agent", agent);
      const query = params.toString();
      const next = `${window.location.pathname}${query ? `?${query}` : ""}${window.location.hash}`;
      window.history.replaceState({}, "", next);
      window.dispatchEvent(new Event("av-quickstart-selection-change"));
    }
  }
  return null;
};

export const AgentVaultQuickstartPicker = () => {
  const SERVICE_ICONS = {
    github: <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12" />
      </svg>,
    slack: <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zM6.313 15.165a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zM8.834 6.313a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zM18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zM17.688 8.834a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zM15.165 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zM15.165 17.688a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z" />
      </svg>,
    anthropic: <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M17.3041 3.541h-3.6718l6.696 16.918H24Zm-10.6082 0L0 20.459h3.7442l1.3693-3.5527h7.0052l1.3693 3.5528h3.7442L10.5363 3.5409Zm-.3712 10.2232 2.2914-5.9456 2.2914 5.9456Z" />
      </svg>,
    openai: <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z" />
      </svg>,
    "gemini": <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M11.04 19.32Q12 21.51 12 24q0-2.49.93-4.68.96-2.19 2.58-3.81t3.81-2.55Q21.51 12 24 12q-2.49 0-4.68-.93a12.3 12.3 0 0 1-3.81-2.58 12.3 12.3 0 0 1-2.58-3.81Q12 2.49 12 0q0 2.49-.96 4.68-.93 2.19-2.55 3.81a12.3 12.3 0 0 1-3.81 2.58Q2.49 12 0 12q2.49 0 4.68.96 2.19.93 3.81 2.55t2.55 3.81" />
      </svg>,
    "mistral": <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M17.143 3.429v3.428h-3.429v3.429h-3.428V6.857H6.857V3.43H3.43v13.714H0v3.428h10.286v-3.428H6.857v-3.429h3.429v3.429h3.429v-3.429h3.428v3.429h-3.428v3.428H24v-3.428h-3.43V3.429z" />
      </svg>,
    "cohere": <svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="currentColor" strokeWidth="1.75" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
        <rect x="3" y="3" width="18" height="18" rx="1" />
        <circle cx="12" cy="12" r="3" />
      </svg>,
    "groq": <svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="currentColor" strokeWidth="1.75" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
        <rect x="3" y="3" width="18" height="18" rx="1" />
        <circle cx="12" cy="12" r="3" />
      </svg>,
    "perplexity": <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M22.3977 7.0896h-2.3106V.0676l-7.5094 6.3542V.1577h-1.1554v6.1966L4.4904 0v7.0896H1.6023v10.3976h2.8882V24l6.932-6.3591v6.2005h1.1554v-6.0469l6.9318 6.1807v-6.4879h2.8882V7.0896zm-3.4657-4.531v4.531h-5.355l5.355-4.531zm-13.2862.0676 4.8691 4.4634H5.6458V2.6262zM2.7576 16.332V8.245h7.8476l-6.1149 6.1147v1.9723H2.7576zm2.8882 5.0404v-3.8852h.0001v-2.6488l5.7763-5.7764v7.0111l-5.7764 5.2993zm12.7086.0248-5.7766-5.1509V9.0618l5.7766 5.7766v6.5588zm2.8882-5.0652h-1.733v-1.9723L13.3948 8.245h7.8478v8.087z" />
      </svg>,
    "openrouter": <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M16.778 1.844v1.919q-.569-.026-1.138-.032-.708-.008-1.415.037c-1.93.126-4.023.728-6.149 2.237-2.911 2.066-2.731 1.95-4.14 2.75-.396.223-1.342.574-2.185.798-.841.225-1.753.333-1.751.333v4.229s.768.108 1.61.333c.842.224 1.789.575 2.185.799 1.41.798 1.228.683 4.14 2.75 2.126 1.509 4.22 2.11 6.148 2.236.88.058 1.716.041 2.555.005v1.918l7.222-4.168-7.222-4.17v2.176c-.86.038-1.611.065-2.278.021-1.364-.09-2.417-.357-3.979-1.465-2.244-1.593-2.866-2.027-3.68-2.508.889-.518 1.449-.906 3.822-2.59 1.56-1.109 2.614-1.377 3.978-1.466.667-.044 1.418-.017 2.278.02v2.176L24 6.014Z" />
      </svg>,
    "together": <svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="currentColor" strokeWidth="1.75" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
        <rect x="3" y="3" width="18" height="18" rx="1" />
        <circle cx="12" cy="12" r="3" />
      </svg>,
    "deepseek": <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M23.748 4.651c-.254-.124-.364.113-.512.233-.051.04-.094.09-.137.137-.372.397-.806.657-1.373.626-.829-.046-1.537.214-2.163.848-.133-.782-.575-1.248-1.247-1.548-.352-.155-.708-.311-.955-.65-.172-.24-.219-.509-.305-.774-.055-.16-.11-.323-.293-.35-.2-.031-.278.136-.356.276-.313.572-.434 1.202-.422 1.84.027 1.436.633 2.58 1.838 3.393.137.094.172.187.129.323-.082.28-.18.553-.266.833-.055.179-.137.218-.328.14a5.5 5.5 0 0 1-1.737-1.179c-.857-.828-1.631-1.743-2.597-2.46a12 12 0 0 0-.689-.47c-.985-.957.13-1.743.387-1.836.27-.098.094-.433-.778-.428-.872.003-1.67.295-2.687.685a3 3 0 0 1-.465.136 9.6 9.6 0 0 0-2.883-.101c-1.885.21-3.39 1.1-4.497 2.622C.082 8.776-.231 10.854.152 13.02c.403 2.284 1.568 4.175 3.36 5.653 1.857 1.533 3.997 2.284 6.438 2.14 1.482-.085 3.132-.284 4.994-1.86.47.234.962.328 1.78.398.629.058 1.235-.031 1.705-.129.735-.155.684-.836.418-.961-2.155-1.004-1.682-.595-2.112-.926 1.095-1.295 2.768-3.598 3.284-6.733.05-.346.115-.834.108-1.114-.004-.171.035-.238.23-.257a4.2 4.2 0 0 0 1.545-.475c1.397-.763 1.96-2.016 2.093-3.517.02-.23-.004-.467-.247-.588M11.58 18.168c-2.088-1.642-3.101-2.183-3.52-2.16-.39.024-.32.472-.234.763.09.288.207.487.371.74.114.167.192.416-.113.603-.673.416-1.842-.14-1.897-.168-1.361-.801-2.5-1.86-3.301-3.306-.775-1.393-1.225-2.888-1.299-4.482-.02-.385.094-.522.477-.592a4.7 4.7 0 0 1 1.53-.038c2.131.311 3.946 1.264 5.467 2.774.868.86 1.525 1.887 2.202 2.89.72 1.066 1.494 2.082 2.48 2.915.348.291.626.513.892.677-.802.09-2.14.109-3.055-.615zm1.001-6.44a.306.306 0 0 1 .415-.287.3.3 0 0 1 .113.074.3.3 0 0 1 .086.214c0 .17-.136.307-.308.307a.303.303 0 0 1-.306-.307m3.11 1.596c-.2.081-.4.151-.591.16a1.25 1.25 0 0 1-.798-.254c-.274-.23-.47-.358-.551-.758a1.7 1.7 0 0 1 .015-.588c.07-.327-.007-.537-.238-.727-.188-.156-.426-.199-.689-.199a.6.6 0 0 1-.254-.078.253.253 0 0 1-.114-.358 1 1 0 0 1 .192-.21c.356-.202.767-.136 1.146.016.352.144.618.408 1.001.782.392.451.462.576.685.915.176.264.336.536.446.848.066.194-.02.353-.25.45" />
      </svg>,
    "xai": <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M14.234 10.162 22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299-.929-1.329L3.076 1.56h3.182l5.965 8.532.929 1.329 7.754 11.09h-3.182z" />
      </svg>,
    "fireworks": <svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="currentColor" strokeWidth="1.75" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
        <rect x="3" y="3" width="18" height="18" rx="1" />
        <circle cx="12" cy="12" r="3" />
      </svg>,
    "stripe": <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M13.976 9.15c-2.172-.806-3.356-1.426-3.356-2.409 0-.831.683-1.305 1.901-1.305 2.227 0 4.515.858 6.09 1.631l.89-5.494C18.252.975 15.697 0 12.165 0 9.667 0 7.589.654 6.104 1.872 4.56 3.147 3.757 4.992 3.757 7.218c0 4.039 2.467 5.76 6.476 7.219 2.585.92 3.445 1.574 3.445 2.583 0 .98-.84 1.545-2.354 1.545-1.875 0-4.965-.921-6.99-2.109l-.9 5.555C5.175 22.99 8.385 24 11.714 24c2.641 0 4.843-.624 6.328-1.813 1.664-1.305 2.525-3.236 2.525-5.732 0-4.128-2.524-5.851-6.594-7.305h.003z" />
      </svg>,
    "twilio": <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M12 0C5.381-.008.008 5.352 0 11.971V12c0 6.64 5.359 12 12 12 6.64 0 12-5.36 12-12 0-6.641-5.36-12-12-12zm0 20.801c-4.846.015-8.786-3.904-8.801-8.75V12c-.014-4.846 3.904-8.786 8.75-8.801H12c4.847-.014 8.786 3.904 8.801 8.75V12c.015 4.847-3.904 8.786-8.75 8.801H12zm5.44-11.76c0 1.359-1.12 2.479-2.481 2.479-1.366-.007-2.472-1.113-2.479-2.479 0-1.361 1.12-2.481 2.479-2.481 1.361 0 2.481 1.12 2.481 2.481zm0 5.919c0 1.36-1.12 2.48-2.481 2.48-1.367-.008-2.473-1.114-2.479-2.48 0-1.359 1.12-2.479 2.479-2.479 1.361-.001 2.481 1.12 2.481 2.479zm-5.919 0c0 1.36-1.12 2.48-2.479 2.48-1.368-.007-2.475-1.113-2.481-2.48 0-1.359 1.12-2.479 2.481-2.479 1.358-.001 2.479 1.12 2.479 2.479zm0-5.919c0 1.359-1.12 2.479-2.479 2.479-1.367-.007-2.475-1.112-2.481-2.479 0-1.361 1.12-2.481 2.481-2.481 1.358 0 2.479 1.12 2.479 2.481z" />
      </svg>,
    "sendgrid": <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M.8 24h13.6c.88 0 1.6-.72 1.6-1.6v-4.8c0-.88-.72-1.6-1.6-1.6H9.6c-.88 0-1.6-.72-1.6-1.6V9.6C8 8.72 7.28 8 6.4 8H1.6C.72 8 0 8.72 0 9.6v13.6c0 .44.36.8.8.8zM23.2 0H9.6C8.72 0 8 .72 8 1.6v4.8C8 7.28 8.72 8 9.6 8h4.8c.88 0 1.6.72 1.6 1.6v4.8c0 .88.72 1.6 1.6 1.6h4.8c.88 0 1.6-.72 1.6-1.6V.8c0-.44-.36-.8-.8-.8Z" />
      </svg>,
    "resend": <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M14.679 0c4.648 0 7.413 2.765 7.413 6.434s-2.765 6.434-7.413 6.434H12.33L24 24h-8.245l-8.88-8.44c-.636-.588-.93-1.273-.93-1.86 0-.831.587-1.565 1.713-1.883l4.574-1.224c1.737-.465 2.936-1.81 2.936-3.572 0-2.153-1.761-3.4-3.939-3.4H0V0z" />
      </svg>,
    "discord": <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M20.317 4.3698a19.7913 19.7913 0 00-4.8851-1.5152.0741.0741 0 00-.0785.0371c-.211.3753-.4447.8648-.6083 1.2495-1.8447-.2762-3.68-.2762-5.4868 0-.1636-.3933-.4058-.8742-.6177-1.2495a.077.077 0 00-.0785-.037 19.7363 19.7363 0 00-4.8852 1.515.0699.0699 0 00-.0321.0277C.5334 9.0458-.319 13.5799.0992 18.0578a.0824.0824 0 00.0312.0561c2.0528 1.5076 4.0413 2.4228 5.9929 3.0294a.0777.0777 0 00.0842-.0276c.4616-.6304.8731-1.2952 1.226-1.9942a.076.076 0 00-.0416-.1057c-.6528-.2476-1.2743-.5495-1.8722-.8923a.077.077 0 01-.0076-.1277c.1258-.0943.2517-.1923.3718-.2914a.0743.0743 0 01.0776-.0105c3.9278 1.7933 8.18 1.7933 12.0614 0a.0739.0739 0 01.0785.0095c.1202.099.246.1981.3728.2924a.077.077 0 01-.0066.1276 12.2986 12.2986 0 01-1.873.8914.0766.0766 0 00-.0407.1067c.3604.698.7719 1.3628 1.225 1.9932a.076.076 0 00.0842.0286c1.961-.6067 3.9495-1.5219 6.0023-3.0294a.077.077 0 00.0313-.0552c.5004-5.177-.8382-9.6739-3.5485-13.6604a.061.061 0 00-.0312-.0286zM8.02 15.3312c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9555-2.4189 2.157-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.9555 2.4189-2.1569 2.4189zm7.9748 0c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9554-2.4189 2.1569-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.946 2.4189-2.1568 2.4189Z" />
      </svg>,
    "postmark": <svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="currentColor" strokeWidth="1.75" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
        <rect x="3" y="3" width="18" height="18" rx="1" />
        <circle cx="12" cy="12" r="3" />
      </svg>,
    "gitlab": <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="m23.6004 9.5927-.0337-.0862L20.3.9814a.851.851 0 0 0-.3362-.405.8748.8748 0 0 0-.9997.0539.8748.8748 0 0 0-.29.4399l-2.2055 6.748H7.5375l-2.2057-6.748a.8573.8573 0 0 0-.29-.4412.8748.8748 0 0 0-.9997-.0537.8585.8585 0 0 0-.3362.4049L.4332 9.5015l-.0325.0862a6.0657 6.0657 0 0 0 2.0119 7.0105l.0113.0087.03.0213 4.976 3.7264 2.462 1.8633 1.4995 1.1321a1.0085 1.0085 0 0 0 1.2197 0l1.4995-1.1321 2.4619-1.8633 5.006-3.7489.0125-.01a6.0682 6.0682 0 0 0 2.0094-7.003z" />
      </svg>,
    "vercel": <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="m12 1.608 12 20.784H0Z" />
      </svg>,
    "cloudflare": <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M16.5088 16.8447c.1475-.5068.0908-.9707-.1553-1.3154-.2246-.3164-.6045-.499-1.0615-.5205l-8.6592-.1123a.1559.1559 0 0 1-.1333-.0713c-.0283-.042-.0351-.0986-.021-.1553.0278-.084.1123-.1484.2036-.1562l8.7359-.1123c1.0351-.0489 2.1601-.8868 2.5537-1.9136l.499-1.3013c.0215-.0561.0293-.1128.0147-.168-.5625-2.5463-2.835-4.4453-5.5499-4.4453-2.5039 0-4.6284 1.6177-5.3876 3.8614-.4927-.3658-1.1187-.5625-1.794-.499-1.2026.119-2.1665 1.083-2.2861 2.2856-.0283.31-.0069.6128.0635.894C1.5683 13.171 0 14.7754 0 16.752c0 .1748.0142.3515.0352.5273.0141.083.0844.1475.1689.1475h15.9814c.0909 0 .1758-.0645.2032-.1553l.12-.4268zm2.7568-5.5634c-.0771 0-.1611 0-.2383.0112-.0566 0-.1054.0415-.127.0976l-.3378 1.1744c-.1475.5068-.0918.9707.1543 1.3164.2256.3164.6055.498 1.0625.5195l1.8437.1133c.0557 0 .1055.0263.1329.0703.0283.043.0351.1074.0214.1562-.0283.084-.1132.1485-.204.1553l-1.921.1123c-1.041.0488-2.1582.8867-2.5527 1.914l-.1406.3585c-.0283.0713.0215.1416.0986.1416h6.5977c.0771 0 .1474-.0489.169-.126.1122-.4082.1757-.837.1757-1.2803 0-2.6025-2.125-4.727-4.7344-4.727" />
      </svg>,
    "supabase": <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M11.9 1.036c-.015-.986-1.26-1.41-1.874-.637L.764 12.05C-.33 13.427.65 15.455 2.409 15.455h9.579l.113 7.51c.014.985 1.259 1.408 1.873.636l9.262-11.653c1.093-1.375.113-3.403-1.645-3.403h-9.642z" />
      </svg>,
    "npm": <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z" />
      </svg>,
    "github-npm": <svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="currentColor" strokeWidth="1.75" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
        <rect x="3" y="3" width="18" height="18" rx="1" />
        <circle cx="12" cy="12" r="3" />
      </svg>,
    "datadog": <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M19.57 17.04l-1.997-1.316-1.665 2.782-1.937-.567-1.706 2.604.087.82 9.274-1.71-.538-5.794zm-8.649-2.498l1.488-.204c.241.108.409.15.697.223.45.117.97.23 1.741-.16.18-.088.553-.43.704-.625l6.096-1.106.622 7.527-10.444 1.882zm11.325-2.712l-.602.115L20.488 0 .789 2.285l2.427 19.693 2.306-.334c-.184-.263-.471-.581-.96-.989-.68-.564-.44-1.522-.039-2.127.53-1.022 3.26-2.322 3.106-3.956-.056-.594-.15-1.368-.702-1.898-.02.22.017.432.017.432s-.227-.289-.34-.683c-.112-.15-.2-.199-.319-.4-.085.233-.073.503-.073.503s-.186-.437-.216-.807c-.11.166-.137.48-.137.48s-.241-.69-.186-1.062c-.11-.323-.436-.965-.343-2.424.6.421 1.924.321 2.44-.439.171-.251.288-.939-.086-2.293-.24-.868-.835-2.16-1.066-2.651l-.028.02c.122.395.374 1.223.47 1.625.293 1.218.372 1.642.234 2.204-.116.488-.397.808-1.107 1.165-.71.358-1.653-.514-1.713-.562-.69-.55-1.224-1.447-1.284-1.883-.062-.477.275-.763.445-1.153-.243.07-.514.192-.514.192s.323-.334.722-.624c.165-.109.262-.178.436-.323a9.762 9.762 0 0 0-.456.003s.42-.227.855-.392c-.318-.014-.623-.003-.623-.003s.937-.419 1.678-.727c.509-.208 1.006-.147 1.286.257.367.53.752.817 1.569.996.501-.223.653-.337 1.284-.509.554-.61.99-.688.99-.688s-.216.198-.274.51c.314-.249.66-.455.66-.455s-.134.164-.259.426l.03.043c.366-.22.797-.394.797-.394s-.123.156-.268.358c.277-.002.838.012 1.056.037 1.285.028 1.552-1.374 2.045-1.55.618-.22.894-.353 1.947.68.903.888 1.609 2.477 1.259 2.833-.294.295-.874-.115-1.516-.916a3.466 3.466 0 0 1-.716-1.562 1.533 1.533 0 0 0-.497-.85s.23.51.23.96c0 .246.03 1.165.424 1.68-.039.076-.057.374-.1.43-.458-.554-1.443-.95-1.604-1.067.544.445 1.793 1.468 2.273 2.449.453.927.186 1.777.416 1.997.065.063.976 1.197 1.15 1.767.306.994.019 2.038-.381 2.685l-1.117.174c-.163-.045-.273-.068-.42-.153.08-.143.241-.5.243-.572l-.063-.111c-.348.492-.93.97-1.414 1.245-.633.359-1.363.304-1.838.156-1.348-.415-2.623-1.327-2.93-1.566 0 0-.01.191.048.234.34.383 1.119 1.077 1.872 1.56l-1.605.177.759 5.908c-.337.048-.39.071-.757.124-.325-1.147-.946-1.895-1.624-2.332-.599-.384-1.424-.47-2.214-.314l-.05.059a2.851 2.851 0 0 1 1.863.444c.654.413 1.181 1.481 1.375 2.124.248.822.42 1.7-.248 2.632-.476.662-1.864 1.028-2.986.237.3.481.705.876 1.25.95.809.11 1.577-.03 2.106-.574.452-.464.69-1.434.628-2.456l.714-.104.258 1.834 11.827-1.424zM15.05 6.848c-.034.075-.085.125-.007.37l.004.014.013.032.032.073c.14.287.295.558.552.696.067-.011.136-.019.207-.023.242-.01.395.028.492.08.009-.048.01-.119.005-.222-.018-.364.072-.982-.626-1.308-.264-.122-.634-.084-.757.068a.302.302 0 0 1 .058.013c.186.066.06.13.027.207m1.958 3.392c-.092-.05-.52-.03-.821.005-.574.068-1.193.267-1.328.372-.247.191-.135.523.047.66.511.382.96.638 1.432.575.29-.038.546-.497.728-.914.124-.288.124-.598-.058-.698m-5.077-2.942c.162-.154-.805-.355-1.556.156-.554.378-.571 1.187-.041 1.646.053.046.096.078.137.104a4.77 4.77 0 0 1 1.396-.412c.113-.125.243-.345.21-.745-.044-.542-.455-.456-.146-.749" />
      </svg>,
    "sentry": <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M13.91 2.505c-.873-1.448-2.972-1.448-3.844 0L6.904 7.92a15.478 15.478 0 0 1 8.53 12.811h-2.221A13.301 13.301 0 0 0 5.784 9.814l-2.926 5.06a7.65 7.65 0 0 1 4.435 5.848H2.194a.365.365 0 0 1-.298-.534l1.413-2.402a5.16 5.16 0 0 0-1.614-.913L.296 19.275a2.182 2.182 0 0 0 .812 2.999 2.24 2.24 0 0 0 1.086.288h6.983a9.322 9.322 0 0 0-3.845-8.318l1.11-1.922a11.47 11.47 0 0 1 4.95 10.24h5.915a17.242 17.242 0 0 0-7.885-15.28l2.244-3.845a.37.37 0 0 1 .504-.13c.255.14 9.75 16.708 9.928 16.9a.365.365 0 0 1-.327.543h-2.287c.029.612.029 1.223 0 1.831h2.297a2.206 2.206 0 0 0 1.922-3.31z" />
      </svg>,
    "pagerduty": <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M16.965 1.18C15.085.164 13.769 0 10.683 0H3.73v14.55h6.926c2.743 0 4.8-.164 6.61-1.37 1.975-1.303 3.004-3.484 3.004-6.007 0-2.716-1.262-4.896-3.305-5.994zm-5.5 10.326h-4.21V3.113l3.977-.027c3.62-.028 5.43 1.234 5.43 4.128 0 3.113-2.248 4.292-5.197 4.292zM3.73 17.61h3.525V24H3.73Z" />
      </svg>,
    "linear": <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M2.886 4.18A11.982 11.982 0 0 1 11.99 0C18.624 0 24 5.376 24 12.009c0 3.64-1.62 6.903-4.18 9.105L2.887 4.18ZM1.817 5.626l16.556 16.556c-.524.33-1.075.62-1.65.866L.951 7.277c.247-.575.537-1.126.866-1.65ZM.322 9.163l14.515 14.515c-.71.172-1.443.282-2.195.322L0 11.358a12 12 0 0 1 .322-2.195Zm-.17 4.862 9.823 9.824a12.02 12.02 0 0 1-9.824-9.824Z" />
      </svg>,
    "notion": <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M4.459 4.208c.746.606 1.026.56 2.428.466l13.215-.793c.28 0 .047-.28-.046-.326L17.86 1.968c-.42-.326-.981-.7-2.055-.607L3.01 2.295c-.466.046-.56.28-.374.466zm.793 3.08v13.904c0 .747.373 1.027 1.214.98l14.523-.84c.841-.046.935-.56.935-1.167V6.354c0-.606-.233-.933-.748-.887l-15.177.887c-.56.047-.747.327-.747.933zm14.337.745c.093.42 0 .84-.42.888l-.7.14v10.264c-.608.327-1.168.514-1.635.514-.748 0-.935-.234-1.495-.933l-4.577-7.186v6.952L12.21 19s0 .84-1.168.84l-3.222.186c-.093-.186 0-.653.327-.746l.84-.233V9.854L7.822 9.76c-.094-.42.14-1.026.793-1.073l3.456-.233 4.764 7.279v-6.44l-1.215-.139c-.093-.514.28-.887.747-.933zM1.936 1.035l13.31-.98c1.634-.14 2.055-.047 3.082.7l4.249 2.986c.7.513.934.653.934 1.213v16.378c0 1.026-.373 1.634-1.68 1.726l-15.458.934c-.98.047-1.448-.093-1.962-.747l-3.129-4.06c-.56-.747-.793-1.306-.793-1.96V2.667c0-.839.374-1.54 1.447-1.632z" />
      </svg>,
    "jira": <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M11.571 11.513H0a5.218 5.218 0 0 0 5.232 5.215h2.13v2.057A5.215 5.215 0 0 0 12.575 24V12.518a1.005 1.005 0 0 0-1.005-1.005zm5.723-5.756H5.736a5.215 5.215 0 0 0 5.215 5.214h2.129v2.058a5.218 5.218 0 0 0 5.215 5.214V6.758a1.001 1.001 0 0 0-1.001-1.001zM23.013 0H11.455a5.215 5.215 0 0 0 5.215 5.215h2.129v2.057A5.215 5.215 0 0 0 24 12.483V1.005A1.001 1.001 0 0 0 23.013 0Z" />
      </svg>,
    "google-workspace": <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M12.01 1.485c-2.082 0-3.754.02-3.743.047.01.02 1.708 3.001 3.774 6.62l3.76 6.574h3.76c2.081 0 3.753-.02 3.742-.047-.005-.02-1.708-3.001-3.775-6.62l-3.76-6.574zm-4.76 1.73a789.828 789.861 0 0 0-3.63 6.319L0 15.868l1.89 3.298 1.885 3.297 3.62-6.335 3.618-6.33-1.88-3.287C8.1 4.704 7.255 3.22 7.25 3.214zm2.259 12.653-.203.348c-.114.198-.96 1.672-1.88 3.287a423.93 423.948 0 0 1-1.698 2.97c-.01.026 3.24.042 7.222.042h7.244l1.796-3.157c.992-1.734 1.85-3.23 1.906-3.323l.104-.167h-7.249z" />
      </svg>,
    "shopify": <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M15.337 23.979l7.216-1.561s-2.604-17.613-2.625-17.73c-.018-.116-.114-.192-.211-.192s-1.929-.136-1.929-.136-1.275-1.274-1.439-1.411c-.045-.037-.075-.057-.121-.074l-.914 21.104h.023zM11.71 11.305s-.81-.424-1.774-.424c-1.447 0-1.504.906-1.504 1.141 0 1.232 3.24 1.715 3.24 4.629 0 2.295-1.44 3.76-3.406 3.76-2.354 0-3.54-1.465-3.54-1.465l.646-2.086s1.245 1.066 2.28 1.066c.675 0 .975-.545.975-.932 0-1.619-2.654-1.694-2.654-4.359-.034-2.237 1.571-4.416 4.827-4.416 1.257 0 1.875.361 1.875.361l-.945 2.715-.02.01zM11.17.83c.136 0 .271.038.405.135-.984.465-2.064 1.639-2.508 3.992-.656.213-1.293.405-1.889.578C7.697 3.75 8.951.84 11.17.84V.83zm1.235 2.949v.135c-.754.232-1.583.484-2.394.736.466-1.777 1.333-2.645 2.085-2.971.193.501.309 1.176.309 2.1zm.539-2.234c.694.074 1.141.867 1.429 1.755-.349.114-.735.231-1.158.366v-.252c0-.752-.096-1.371-.271-1.871v.002zm2.992 1.289c-.02 0-.06.021-.078.021s-.289.075-.714.21c-.423-1.233-1.176-2.37-2.508-2.37h-.115C12.135.209 11.669 0 11.265 0 8.159 0 6.675 3.877 6.21 5.846c-1.194.365-2.063.636-2.16.674-.675.213-.694.232-.772.87-.075.462-1.83 14.063-1.83 14.063L15.009 24l.927-21.166z" />
      </svg>
  };
  const AGENT_ICONS = {
    "claude-code": <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="m4.7144 15.9555 4.7174-2.6471.079-.2307-.079-.1275h-.2307l-.7893-.0486-2.6956-.0729-2.3375-.0971-2.2646-.1214-.5707-.1215-.5343-.7042.0546-.3522.4797-.3218.686.0608 1.5179.1032 2.2767.1578 1.6514.0972 2.4468.255h.3886l.0546-.1579-.1336-.0971-.1032-.0972L6.973 9.8356l-2.55-1.6879-1.3356-.9714-.7225-.4918-.3643-.4614-.1578-1.0078.6557-.7225.8803.0607.2246.0607.8925.686 1.9064 1.4754 2.4893 1.8336.3643.3035.1457-.1032.0182-.0728-.164-.2733-1.3539-2.4467-1.445-2.4893-.6435-1.032-.17-.6194c-.0607-.255-.1032-.4674-.1032-.7285L6.287.1335 6.6997 0l.9957.1336.419.3642.6192 1.4147 1.0018 2.2282 1.5543 3.0296.4553.8985.2429.8318.091.255h.1579v-.1457l.1275-1.706.2368-2.0947.2307-2.6957.0789-.7589.3764-.9107.7468-.4918.5828.2793.4797.686-.0668.4433-.2853 1.8517-.5586 2.9021-.3643 1.9429h.2125l.2429-.2429.9835-1.3053 1.6514-2.0643.7286-.8196.85-.9046.5464-.4311h1.0321l.759 1.1293-.34 1.1657-1.0625 1.3478-.8804 1.1414-1.2628 1.7-.7893 1.36.0729.1093.1882-.0183 2.8535-.607 1.5421-.2794 1.8396-.3157.8318.3886.091.3946-.3278.8075-1.967.4857-2.3072.4614-3.4364.8136-.0425.0304.0486.0607 1.5482.1457.6618.0364h1.621l3.0175.2247.7892.522.4736.6376-.079.4857-1.2142.6193-1.6393-.3886-3.825-.9107-1.3113-.3279h-.1822v.1093l1.0929 1.0686 2.0035 1.8092 2.5075 2.3314.1275.5768-.3218.4554-.34-.0486-2.2039-1.6575-.85-.7468-1.9246-1.621h-.1275v.17l.4432.6496 2.3436 3.5214.1214 1.0807-.17.3521-.6071.2125-.6679-.1214-1.3721-1.9246L14.38 17.959l-1.1414-1.9428-.1397.079-.674 7.2552-.3156.3703-.7286.2793-.6071-.4614-.3218-.7468.3218-1.4753.3886-1.9246.3157-1.53.2853-1.9004.17-.6314-.0121-.0425-.1397.0182-1.4328 1.9672-2.1796 2.9446-1.7243 1.8456-.4128.164-.7164-.3704.0667-.6618.4008-.5889 2.386-3.0357 1.4389-1.882.929-1.0868-.0062-.1579h-.0546l-6.3385 4.1164-1.1293.1457-.4857-.4554.0608-.7467.2307-.2429 1.9064-1.3114Z" />
      </svg>,
    codex: <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z" />
      </svg>,
    opencode: <svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor" aria-hidden="true">
        <path d="M22 24H2V0h20zM17 4.8H7v14.4h10z" />
      </svg>
  };
  const KNOWN_SERVICE_IDS = new Set(["anthropic", "cloudflare", "cohere", "custom", "datadog", "deepseek", "discord", "fireworks", "gemini", "github", "github-npm", "gitlab", "google-workspace", "groq", "jira", "linear", "mistral", "notion", "npm", "openai", "openrouter", "pagerduty", "perplexity", "postmark", "resend", "sendgrid", "sentry", "shopify", "slack", "stripe", "supabase", "together", "twilio", "vercel", "xai"]);
  const KNOWN_AGENT_IDS = new Set(["claude-code", "codex", "opencode"]);
  const SERVICES = [{
    id: "anthropic",
    label: "Anthropic",
    chip: "Anthropic"
  }, {
    id: "cloudflare",
    label: "Cloudflare",
    chip: "Cloudflare"
  }, {
    id: "cohere",
    label: "Cohere",
    chip: "Cohere"
  }, {
    id: "datadog",
    label: "Datadog",
    chip: "Datadog"
  }, {
    id: "deepseek",
    label: "DeepSeek",
    chip: "DeepSeek"
  }, {
    id: "discord",
    label: "Discord",
    chip: "Discord"
  }, {
    id: "fireworks",
    label: "Fireworks AI",
    chip: "Fireworks AI"
  }, {
    id: "github",
    label: "GitHub",
    chip: "GitHub"
  }, {
    id: "github-npm",
    label: "GitHub Packages",
    chip: "GitHub Packages"
  }, {
    id: "gitlab",
    label: "GitLab",
    chip: "GitLab"
  }, {
    id: "gemini",
    label: "Google Gemini",
    chip: "Google Gemini"
  }, {
    id: "google-workspace",
    label: "Google Workspace",
    chip: "Google Workspace"
  }, {
    id: "groq",
    label: "Groq",
    chip: "Groq"
  }, {
    id: "jira",
    label: "Jira",
    chip: "Jira"
  }, {
    id: "linear",
    label: "Linear",
    chip: "Linear"
  }, {
    id: "mistral",
    label: "Mistral AI",
    chip: "Mistral AI"
  }, {
    id: "notion",
    label: "Notion",
    chip: "Notion"
  }, {
    id: "npm",
    label: "npm",
    chip: "npm"
  }, {
    id: "openai",
    label: "OpenAI",
    chip: "OpenAI"
  }, {
    id: "openrouter",
    label: "OpenRouter",
    chip: "OpenRouter"
  }, {
    id: "pagerduty",
    label: "PagerDuty",
    chip: "PagerDuty"
  }, {
    id: "perplexity",
    label: "Perplexity",
    chip: "Perplexity"
  }, {
    id: "postmark",
    label: "Postmark",
    chip: "Postmark"
  }, {
    id: "resend",
    label: "Resend",
    chip: "Resend"
  }, {
    id: "sendgrid",
    label: "SendGrid",
    chip: "SendGrid"
  }, {
    id: "sentry",
    label: "Sentry",
    chip: "Sentry"
  }, {
    id: "shopify",
    label: "Shopify",
    chip: "Shopify"
  }, {
    id: "slack",
    label: "Slack",
    chip: "Slack"
  }, {
    id: "stripe",
    label: "Stripe",
    chip: "Stripe"
  }, {
    id: "supabase",
    label: "Supabase",
    chip: "Supabase"
  }, {
    id: "together",
    label: "Together AI",
    chip: "Together AI"
  }, {
    id: "twilio",
    label: "Twilio",
    chip: "Twilio"
  }, {
    id: "vercel",
    label: "Vercel",
    chip: "Vercel"
  }, {
    id: "xai",
    label: "xAI",
    chip: "xAI"
  }, {
    id: "custom",
    label: "Custom",
    chip: "a custom API"
  }];
  const AGENTS = [{
    id: "claude-code",
    label: "Claude Code",
    chip: "Claude Code"
  }, {
    id: "codex",
    label: "Codex",
    chip: "Codex"
  }, {
    id: "opencode",
    label: "OpenCode",
    chip: "OpenCode"
  }];
  const SELECTION_EVENT = "av-quickstart-selection-change";
  const [selection, setSelection] = useState({
    service: null,
    agent: null
  });
  const [openMenu, setOpenMenu] = useState(null);
  const [searchService, setSearchService] = useState("");
  const [searchAgent, setSearchAgent] = useState("");
  const rootRef = useRef(null);
  const serviceButtonRef = useRef(null);
  const agentButtonRef = useRef(null);
  const searchInputRef = useRef(null);
  useEffect(() => {
    const sync = () => {
      const params = new URLSearchParams(window.location.search);
      setSelection({
        service: (() => {
          const v = params.get("service");
          return v && KNOWN_SERVICE_IDS.has(v) ? v : null;
        })(),
        agent: (() => {
          const v = params.get("agent");
          return v && KNOWN_AGENT_IDS.has(v) ? v : null;
        })()
      });
    };
    sync();
    window.addEventListener(SELECTION_EVENT, sync);
    window.addEventListener("popstate", sync);
    return () => {
      window.removeEventListener(SELECTION_EVENT, sync);
      window.removeEventListener("popstate", sync);
    };
  }, []);
  useEffect(() => {
    if (!openMenu) return undefined;
    const onDown = event => {
      if (rootRef.current && !rootRef.current.contains(event.target)) {
        setOpenMenu(null);
      }
    };
    const onKey = event => {
      if (event.key === "Escape") {
        setOpenMenu(null);
        const target = openMenu === "service" ? serviceButtonRef.current : agentButtonRef.current;
        if (target) target.focus();
      }
    };
    document.addEventListener("mousedown", onDown);
    document.addEventListener("keydown", onKey);
    return () => {
      document.removeEventListener("mousedown", onDown);
      document.removeEventListener("keydown", onKey);
    };
  }, [openMenu]);
  useEffect(() => {
    if (openMenu && searchInputRef.current) {
      searchInputRef.current.focus();
    }
  }, [openMenu]);
  const update = (dimension, value) => {
    const params = new URLSearchParams(window.location.search);
    if (value === null) params.delete(dimension); else params.set(dimension, value);
    const query = params.toString();
    const next = `${window.location.pathname}${query ? `?${query}` : ""}${window.location.hash}`;
    window.history.replaceState({}, "", next);
    window.dispatchEvent(new Event(SELECTION_EVENT));
    setOpenMenu(null);
    setSearchService("");
    setSearchAgent("");
  };
  const reset = () => {
    const params = new URLSearchParams(window.location.search);
    params.delete("service");
    params.delete("agent");
    const query = params.toString();
    const next = `${window.location.pathname}${query ? `?${query}` : ""}${window.location.hash}`;
    window.history.replaceState({}, "", next);
    window.dispatchEvent(new Event(SELECTION_EVENT));
    setOpenMenu(null);
  };
  const activeService = SERVICES.find(option => option.id === selection.service);
  const activeAgent = AGENTS.find(option => option.id === selection.agent);
  const hasSelection = Boolean(selection.service || selection.agent);
  const chevron = <svg className="ifx-avqs__chevron" width="10" height="10" viewBox="0 0 12 12" fill="none" aria-hidden="true">
      <path d="M3 4.5L6 7.5L9 4.5" stroke="currentColor" strokeWidth="1.75" strokeLinecap="round" strokeLinejoin="round" />
    </svg>;
  const renderMenu = (dimension, options, iconMap, activeId, searchValue, setSearch) => {
    const query = searchValue.trim().toLowerCase();
    const filtered = query ? options.filter(option => option.label.toLowerCase().includes(query)) : options;
    return <div className="ifx-avqs__menu" role="dialog" aria-label={`Choose ${dimension}`}>
        <div className="ifx-avqs__search">
          <svg className="ifx-avqs__search-icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
            <circle cx="11" cy="11" r="7" />
            <line x1="21" y1="21" x2="16.65" y2="16.65" />
          </svg>
          <input ref={searchInputRef} type="search" placeholder={`Search ${dimension === "service" ? "services" : "agents"}`} className="ifx-avqs__search-input" value={searchValue} onChange={event => setSearch(event.target.value)} />
        </div>
        {filtered.length > 0 ? <div className="ifx-avqs__grid" role="listbox" aria-label={`${dimension} options`}>
            {filtered.map(option => <button key={option.id} type="button" role="option" aria-selected={activeId === option.id} className={activeId === option.id ? "ifx-avqs__tile ifx-avqs__tile--active" : "ifx-avqs__tile"} onClick={() => update(dimension, option.id)}>
                {iconMap[option.id] && <span className="ifx-avqs__tile-icon">
                    {iconMap[option.id]}
                  </span>}
                <span className="ifx-avqs__tile-label">{option.label}</span>
              </button>)}
          </div> : <div className="ifx-avqs__empty">
            No matches for “{searchValue}”.
          </div>}
        {activeId && <button type="button" className="ifx-avqs__clear" onClick={() => update(dimension, null)}>
            Clear selection
          </button>}
      </div>;
  };
  return <div ref={rootRef} className="ifx-avqs">
      <p className="ifx-avqs__sentence">
        I want{" "}
        <span className="ifx-avqs__slot ifx-avqs__slot--agent">
          <button ref={agentButtonRef} type="button" aria-haspopup="dialog" aria-expanded={openMenu === "agent"} className={activeAgent ? "ifx-avqs__chip ifx-avqs__chip--filled" : "ifx-avqs__chip"} onClick={() => setOpenMenu(openMenu === "agent" ? null : "agent")}>
            {activeAgent && AGENT_ICONS[activeAgent.id] && <span className="ifx-avqs__chip-icon">
                {AGENT_ICONS[activeAgent.id]}
              </span>}
            <span>{activeAgent ? activeAgent.chip : "an agent"}</span>
            {chevron}
          </button>
          {openMenu === "agent" && renderMenu("agent", AGENTS, AGENT_ICONS, selection.agent, searchAgent, setSearchAgent)}
        </span>{" "}
        to access{" "}
        <span className="ifx-avqs__slot ifx-avqs__slot--service">
          <button ref={serviceButtonRef} type="button" aria-haspopup="dialog" aria-expanded={openMenu === "service"} className={activeService ? "ifx-avqs__chip ifx-avqs__chip--filled" : "ifx-avqs__chip"} onClick={() => setOpenMenu(openMenu === "service" ? null : "service")}>
            {activeService && SERVICE_ICONS[activeService.id] && <span className="ifx-avqs__chip-icon">
                {SERVICE_ICONS[activeService.id]}
              </span>}
            <span>{activeService ? activeService.chip : "a service"}</span>
            {chevron}
          </button>
          {openMenu === "service" && renderMenu("service", SERVICES, SERVICE_ICONS, selection.service, searchService, setSearchService)}
        </span>
      </p>
      <p className="ifx-avqs__hint">
        {hasSelection ? <>
            The steps below match your choice.{" "}
            <button type="button" className="ifx-avqs__reset" onClick={reset}>
              Reset
            </button>
          </> : "Pick to view tailored steps, or leave both to read the generic version of the guide."}
      </p>
    </div>;
};

<AgentGuideInit agent="opencode" />

<AgentVaultQuickstartPicker />

This quickstart guide walks you through using Agent Vault to launch an agent that makes authenticated API calls without needing an actual token.

## Prerequisites

<ul>
  <li>An Infisical organization where you're an Agent Vault admin</li>
  <li>The <a href="/docs/cli/overview">Infisical CLI</a> installed on the host that will run the proxy and on the host that will run the agent. For this guide, both hosts can be the same machine</li>

  <AgentVaultBranch agent="claude-code">
    <li><a href="https://docs.claude.com/en/docs/claude-code/overview">Claude Code</a> installed on the host that will run the agent</li>
  </AgentVaultBranch>

  <AgentVaultBranch agent="codex">
    <li><a href="https://github.com/openai/codex">Codex CLI</a> installed on the host that will run the agent</li>
  </AgentVaultBranch>

  <AgentVaultBranch agent="opencode">
    <li><a href="https://opencode.ai/">OpenCode</a> installed on the host that will run the agent</li>
  </AgentVaultBranch>

  <AgentVaultBranch service="none">
    <li>Credentials for the API you want the agent to call (such as an API token)</li>
  </AgentVaultBranch>

  <AgentVaultBranch service="github">
    <li>A <a href="https://github.com/settings/tokens">GitHub personal access token</a> with the scopes your agent will need</li>
  </AgentVaultBranch>

  <AgentVaultBranch service="slack">
    <li>A <a href="https://api.slack.com/authentication/token-types#bot">Slack bot token</a> with the scopes your agent will need</li>
  </AgentVaultBranch>

  <AgentVaultBranch service="anthropic">
    <li>An <a href="https://console.anthropic.com/settings/keys">Anthropic API key</a></li>
  </AgentVaultBranch>

  <AgentVaultBranch service="openai">
    <li>An <a href="https://platform.openai.com/api-keys">OpenAI API key</a></li>
  </AgentVaultBranch>

  <AgentVaultBranch service="custom">
    <li>A credential for the API you want the agent to call (such as an API token)</li>
  </AgentVaultBranch>

  <AgentVaultBranch service="gemini">
    <li>A <a href="https://aistudio.google.com/apikey">Google Gemini API key</a></li>
  </AgentVaultBranch>

  <AgentVaultBranch service="mistral">
    <li>A <a href="https://console.mistral.ai/api-keys">Mistral AI API key</a></li>
  </AgentVaultBranch>

  <AgentVaultBranch service="cohere">
    <li>A <a href="https://dashboard.cohere.com/api-keys">Cohere API key</a></li>
  </AgentVaultBranch>

  <AgentVaultBranch service="groq">
    <li>A <a href="https://console.groq.com/keys">Groq API key</a></li>
  </AgentVaultBranch>

  <AgentVaultBranch service="perplexity">
    <li>A <a href="https://www.perplexity.ai/settings/api">Perplexity API key</a></li>
  </AgentVaultBranch>

  <AgentVaultBranch service="openrouter">
    <li>An <a href="https://openrouter.ai/keys">OpenRouter API key</a></li>
  </AgentVaultBranch>

  <AgentVaultBranch service="together">
    <li>A <a href="https://api.together.xyz/settings/api-keys">Together AI API key</a></li>
  </AgentVaultBranch>

  <AgentVaultBranch service="deepseek">
    <li>A <a href="https://platform.deepseek.com/api_keys">DeepSeek API key</a></li>
  </AgentVaultBranch>

  <AgentVaultBranch service="xai">
    <li>An <a href="https://console.x.ai/">xAI API key</a></li>
  </AgentVaultBranch>

  <AgentVaultBranch service="fireworks">
    <li>A <a href="https://app.fireworks.ai/settings/users/api-keys">Fireworks AI API key</a></li>
  </AgentVaultBranch>

  <AgentVaultBranch service="stripe">
    <li>A <a href="https://dashboard.stripe.com/apikeys">Stripe secret key</a></li>
  </AgentVaultBranch>

  <AgentVaultBranch service="twilio">
    <li>A <a href="https://console.twilio.com/">Twilio account SID and auth token</a></li>
  </AgentVaultBranch>

  <AgentVaultBranch service="sendgrid">
    <li>A <a href="https://app.sendgrid.com/settings/api_keys">SendGrid API key</a> with the scopes your agent will need</li>
  </AgentVaultBranch>

  <AgentVaultBranch service="resend">
    <li>A <a href="https://resend.com/api-keys">Resend API key</a></li>
  </AgentVaultBranch>

  <AgentVaultBranch service="discord">
    <li>A <a href="https://discord.com/developers/applications">Discord bot token</a> with the scopes your agent will need</li>
  </AgentVaultBranch>

  <AgentVaultBranch service="postmark">
    <li>A <a href="https://account.postmarkapp.com/servers">Postmark server token</a></li>
  </AgentVaultBranch>

  <AgentVaultBranch service="gitlab">
    <li>A <a href="https://gitlab.com/-/user_settings/personal_access_tokens">GitLab personal access token</a> with the scopes your agent will need</li>
  </AgentVaultBranch>

  <AgentVaultBranch service="vercel">
    <li>A <a href="https://vercel.com/account/tokens">Vercel API token</a> with the scopes your agent will need</li>
  </AgentVaultBranch>

  <AgentVaultBranch service="cloudflare">
    <li>A <a href="https://dash.cloudflare.com/profile/api-tokens">Cloudflare API token</a> with the scopes your agent will need</li>
  </AgentVaultBranch>

  <AgentVaultBranch service="supabase">
    <li>A Supabase <a href="https://supabase.com/dashboard">project API key</a> (<code>anon</code> or <code>service\_role</code>, from <strong>Project Settings</strong> > <strong>API Keys</strong>)</li>
  </AgentVaultBranch>

  <AgentVaultBranch service="npm">
    <li>An <a href="https://docs.npmjs.com/creating-and-viewing-access-tokens">npm access token</a></li>
  </AgentVaultBranch>

  <AgentVaultBranch service="github-npm">
    <li>A <a href="https://github.com/settings/tokens">GitHub personal access token with the `read:packages` scope</a></li>
  </AgentVaultBranch>

  <AgentVaultBranch service="datadog">
    <li>A <a href="https://app.datadoghq.com/organization-settings/api-keys">Datadog API key</a></li>
  </AgentVaultBranch>

  <AgentVaultBranch service="sentry">
    <li>A <a href="https://sentry.io/settings/account/api/auth-tokens/">Sentry auth token</a> with the scopes your agent will need</li>
  </AgentVaultBranch>

  <AgentVaultBranch service="pagerduty">
    <li>A <a href="https://support.pagerduty.com/main/docs/api-access-keys">PagerDuty API access key</a></li>
  </AgentVaultBranch>

  <AgentVaultBranch service="linear">
    <li>A <a href="https://linear.app/settings/api">Linear API key</a></li>
  </AgentVaultBranch>

  <AgentVaultBranch service="notion">
    <li>A <a href="https://www.notion.so/profile/integrations">Notion integration token</a> with the scopes your agent will need</li>
  </AgentVaultBranch>

  <AgentVaultBranch service="jira">
    <li>A <a href="https://id.atlassian.com/manage-profile/security/api-tokens">Jira email and API token</a></li>
  </AgentVaultBranch>

  <AgentVaultBranch service="google-workspace">
    <li>A <a href="https://developers.google.com/workspace/guides/create-credentials">Google Workspace OAuth token</a> with the scopes your agent will need</li>
  </AgentVaultBranch>

  <AgentVaultBranch service="shopify">
    <li>A <a href="https://shopify.dev/docs/apps/build/authentication-authorization/access-tokens">Shopify Admin API access token</a> with the scopes your agent will need</li>
  </AgentVaultBranch>
</ul>

## Step 1: Set up in Infisical

### Create an access bundle

First, create an [access bundle](/docs/documentation/platform/agent-vault/access-bundles) that defines which APIs ([services](/docs/documentation/platform/agent-vault/services)) the agent can access.

<Steps>
  <Step>
    In Infisical, open **Agent Vault** from the product switcher and go to **Access Bundles**.
  </Step>

  <Step>
    Select **Create Access Bundle**. Give the access bundle a **Name**, then select **Create Access Bundle**.

    <Frame>
      <img src="https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/platform/agent-vault/access-bundle-create.png" alt="The Create Access Bundle dialog with code-review entered as the name" />
    </Frame>
  </Step>

  <Step>
    Select the access bundle you just created, then select **Add Service**.

    <AgentVaultBranch service="none">
      Find the template for the API you want the agent to access, then select it.
    </AgentVaultBranch>

    <AgentVaultBranch service="github">
      Select the **GitHub** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="slack">
      Select the **Slack** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="anthropic">
      Select the **Anthropic** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="openai">
      Select the **OpenAI** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="custom">
      Select **Custom**. You'll set the host, header name, and prefix yourself on the next step.
    </AgentVaultBranch>

    <AgentVaultBranch service="gemini">
      Select the **Google Gemini** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="mistral">
      Select the **Mistral AI** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="cohere">
      Select the **Cohere** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="groq">
      Select the **Groq** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="perplexity">
      Select the **Perplexity** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="openrouter">
      Select the **OpenRouter** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="together">
      Select the **Together AI** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="deepseek">
      Select the **DeepSeek** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="xai">
      Select the **xAI** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="fireworks">
      Select the **Fireworks AI** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="stripe">
      Select the **Stripe** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="twilio">
      Select the **Twilio** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="sendgrid">
      Select the **SendGrid** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="resend">
      Select the **Resend** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="discord">
      Select the **Discord** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="postmark">
      Select the **Postmark** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="gitlab">
      Select the **GitLab** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="vercel">
      Select the **Vercel** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="cloudflare">
      Select the **Cloudflare** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="supabase">
      Select the **Supabase** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="npm">
      Select the **npm** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="github-npm">
      Select the **GitHub Packages** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="datadog">
      Select the **Datadog** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="sentry">
      Select the **Sentry** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="pagerduty">
      Select the **PagerDuty** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="linear">
      Select the **Linear** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="notion">
      Select the **Notion** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="jira">
      Select the **Jira** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="google-workspace">
      Select the **Google Workspace** template.
    </AgentVaultBranch>

    <AgentVaultBranch service="shopify">
      Select the **Shopify** template.
    </AgentVaultBranch>

    <Frame>
      <img src="https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/platform/agent-vault/service-template-picker.png" alt="The Choose a template panel with GitHub among the available services" />
    </Frame>

    <AgentVaultBranch service="none">
      <Note>
        If the API you want to access isn't on the template list, pick **Custom** and set the host, header name, and prefix yourself. For more information, check out the [services](/docs/documentation/platform/agent-vault/services) documentation.
      </Note>
    </AgentVaultBranch>
  </Step>

  <Step>
    <AgentVaultBranch service="github">
      The template fills in the host and header. Paste a [GitHub personal access token](https://github.com/settings/tokens) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="slack">
      The template fills in the host and header. Paste a [Slack bot token](https://api.slack.com/authentication/token-types#bot) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="anthropic">
      The template fills in the host and header. Paste an [Anthropic API key](https://console.anthropic.com/settings/keys) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="openai">
      The template fills in the host and header. Paste an [OpenAI API key](https://platform.openai.com/api-keys) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="custom">
      Fill in the **Host**, **Header name**, and any **Prefix** the API expects. Then paste your credential in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="none">
      Follow the steps to set up the service. The template automatically fills in most fields, including:

      * The host (for example, `api.github.com`)
      * The header the API expects (for example, `Authorization: Bearer <token>`)

      Paste your credentials in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="gemini">
      The template fills in the host and header. Paste a [Google Gemini API key](https://aistudio.google.com/apikey) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="mistral">
      The template fills in the host and header. Paste a [Mistral AI API key](https://console.mistral.ai/api-keys) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="cohere">
      The template fills in the host and header. Paste a [Cohere API key](https://dashboard.cohere.com/api-keys) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="groq">
      The template fills in the host and header. Paste a [Groq API key](https://console.groq.com/keys) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="perplexity">
      The template fills in the host and header. Paste a [Perplexity API key](https://www.perplexity.ai/settings/api) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="openrouter">
      The template fills in the host and header. Paste an [OpenRouter API key](https://openrouter.ai/keys) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="together">
      The template fills in the host and header. Paste a [Together AI API key](https://api.together.xyz/settings/api-keys) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="deepseek">
      The template fills in the host and header. Paste a [DeepSeek API key](https://platform.deepseek.com/api_keys) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="xai">
      The template fills in the host and header. Paste an [xAI API key](https://console.x.ai/) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="fireworks">
      The template fills in the host and header. Paste a [Fireworks AI API key](https://app.fireworks.ai/settings/users/api-keys) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="stripe">
      The template fills in the host and header. Paste a [Stripe secret key](https://dashboard.stripe.com/apikeys) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="twilio">
      The template fills in the host and header. Paste a [Twilio account SID and auth token](https://console.twilio.com/) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="sendgrid">
      The template fills in the host and header. Paste a [SendGrid API key](https://app.sendgrid.com/settings/api_keys) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="resend">
      The template fills in the host and header. Paste a [Resend API key](https://resend.com/api-keys) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="discord">
      The template fills in the host and header. Paste a [Discord bot token](https://discord.com/developers/applications) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="postmark">
      The template fills in the host and header. Paste a [Postmark server token](https://account.postmarkapp.com/servers) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="gitlab">
      The template fills in the host and header. Paste a [GitLab personal access token](https://gitlab.com/-/user_settings/personal_access_tokens) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="vercel">
      The template fills in the host and header. Paste a [Vercel API token](https://vercel.com/account/tokens) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="cloudflare">
      The template fills in the host and header. Paste a [Cloudflare API token](https://dash.cloudflare.com/profile/api-tokens) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="supabase">
      The template fills in the header and a `<your-project>.supabase.co` host. Replace `<your-project>` with your Supabase project ref, then paste your project's [`anon` or `service_role` API key](https://supabase.com/dashboard) (under **Project Settings** > **API Keys**) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="npm">
      The template fills in the host and header. Paste an [npm access token](https://docs.npmjs.com/creating-and-viewing-access-tokens) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="github-npm">
      The template fills in the host and header. Paste a [GitHub personal access token with the `read:packages` scope](https://github.com/settings/tokens) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="datadog">
      The template fills in the host and header. Paste a [Datadog API key](https://app.datadoghq.com/organization-settings/api-keys) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="sentry">
      The template fills in the host and header. Paste a [Sentry auth token](https://sentry.io/settings/account/api/auth-tokens/) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="pagerduty">
      The template fills in the host and header. Paste a [PagerDuty API access key](https://support.pagerduty.com/main/docs/api-access-keys) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="linear">
      The template fills in the host and header. Paste a [Linear API key](https://linear.app/settings/api) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="notion">
      The template fills in the host and header. Paste a [Notion integration token](https://www.notion.so/profile/integrations) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="jira">
      The template fills in the header and a `<your-tenant>.atlassian.net` host. Replace `<your-tenant>` with your Atlassian subdomain (for example, `mycompany` from `mycompany.atlassian.net`), then paste your [Jira email and API token](https://id.atlassian.com/manage-profile/security/api-tokens) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="google-workspace">
      The template fills in the host and header. Paste a [Google Workspace OAuth token](https://developers.google.com/workspace/guides/create-credentials) in the **Credential** section.
    </AgentVaultBranch>

    <AgentVaultBranch service="shopify">
      The template fills in the header and a `<your-store>.myshopify.com` host. Replace `<your-store>` with your Shopify store subdomain, then paste your [Shopify Admin API access token](https://shopify.dev/docs/apps/build/authentication-authorization/access-tokens) in the **Credential** section.
    </AgentVaultBranch>
  </Step>

  <Step>
    Once you've configured the service, select **Add Service**.
  </Step>
</Steps>

<Tip>
  You can repeat these steps to add as many more services as you like to the access bundle.
</Tip>

### Enroll a proxy

Next, enroll a [proxy](/docs/documentation/platform/agent-vault/proxies) to intercept API calls from your agent.

<Steps>
  <Step>
    Go to **Proxies** and select **Create Proxy**.
  </Step>

  <Step>
    Give the proxy a **Name**, then select **Create**. This creates a one-time enrollment token. Copy the command shown—you'll need it in the next step.

    <Frame>
      <img src="https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/platform/agent-vault/proxy-enrollment-token.png" alt="The Enrollment Token dialog with the CLI command, and Docker and systemd tabs alongside it" />
    </Frame>
  </Step>

  <Step>
    On the host that will act as the proxy, run the command from the previous step.

    ```bash theme={"dark"}
    infisical agent-vault proxy --enrollment-token <enrollment-token>
    ```

    This enrolls the proxy, which starts listening on port `17323`. Leave it running and note this host's address—you'll need it when launching your agent.
  </Step>
</Steps>

<Note>
  This runs the proxy in your current terminal, so the proxy stops when the terminal closes. For a persistent setup, use the **Docker** or **systemd** snippet from the enrollment dialog.

  Check out the [proxies documentation](/docs/documentation/platform/agent-vault/proxies) for more information.
</Note>

### Create a session

Next, create a [session](/docs/documentation/platform/agent-vault/sessions) with your access bundle attached.

<Steps>
  <Step>
    Go to **Sessions** and select **Create Session**.
  </Step>

  <Step>
    Pick the **Access Bundle** the agent should use, set a duration under **Expires**, then select **Create Session**.

    <Frame>
      <img src="https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/platform/agent-vault/session-create.png" alt="The Create Session dialog with code-review picked and a seven day expiry" />
    </Frame>
  </Step>

  <Step>
    This creates the session and gives you a command to run your agent with it. Copy the command—you'll need it in the next step.

    <Frame>
      <img src="https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/platform/agent-vault/session-created.png" alt="The Session Created dialog showing the infisical agent-vault run command with the session token" />
    </Frame>
  </Step>
</Steps>

## Step 2: Launch your agent

On the host where the agent runs, paste the command you copied in the previous step. Replace `<proxy-host>` with your host's actual domain or IP address, and `<agent-command>` with your agent's own command.

<AgentVaultBranch agent="none">
  For example, with Claude:

  ```bash theme={"dark"}
  infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- claude
  ```
</AgentVaultBranch>

<AgentVaultBranch agent="claude-code">
  For Claude Code, the command is `claude`:

  ```bash theme={"dark"}
  infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- claude
  ```
</AgentVaultBranch>

<AgentVaultBranch agent="codex">
  For Codex, the command is `codex`:

  ```bash theme={"dark"}
  infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- codex
  ```
</AgentVaultBranch>

<AgentVaultBranch agent="opencode">
  For OpenCode, the command is `opencode`:

  ```bash theme={"dark"}
  infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- opencode
  ```
</AgentVaultBranch>

The CLI adds the proxy's certificate authority to the agent process' trusted CAs and starts the agent with its HTTP traffic routed through the proxy. Any calls to services in your access bundle leave the proxy with the real credential attached, while calls to any other host go out normally.

<Note>
  On macOS, you'll need to enter your user password when running your agent for the first time. This is because macOS needs your approval to add the proxy's certificate to your keychain.
</Note>

## Step 3: Verify it works

<AgentVaultBranch service="none">
  To confirm the proxy is attaching credentials, make a test call to a service you configured. Pick an authenticated endpoint on that service (for example, one that returns your account), and make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="anthropic">
  To confirm the proxy is attaching credentials, make a call to Anthropic. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="cloudflare">
  To confirm the proxy is attaching credentials, make a call to Cloudflare. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="cohere">
  To confirm the proxy is attaching credentials, make a call to Cohere. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="datadog">
  To confirm the proxy is attaching credentials, make a call to Datadog. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="deepseek">
  To confirm the proxy is attaching credentials, make a call to DeepSeek. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="discord">
  To confirm the proxy is attaching credentials, make a call to Discord. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="fireworks">
  To confirm the proxy is attaching credentials, make a call to Fireworks AI. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="github">
  To confirm the proxy is attaching credentials, make a call to GitHub. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="github-npm">
  To confirm the proxy is attaching credentials, make a call to GitHub Packages. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="gitlab">
  To confirm the proxy is attaching credentials, make a call to GitLab. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="gemini">
  To confirm the proxy is attaching credentials, make a call to Google Gemini. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="google-workspace">
  To confirm the proxy is attaching credentials, make a call to Google Workspace. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="groq">
  To confirm the proxy is attaching credentials, make a call to Groq. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="jira">
  To confirm the proxy is attaching credentials, make a call to Jira. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="linear">
  To confirm the proxy is attaching credentials, make a call to Linear. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="mistral">
  To confirm the proxy is attaching credentials, make a call to Mistral AI. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="notion">
  To confirm the proxy is attaching credentials, make a call to Notion. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="npm">
  To confirm the proxy is attaching credentials, make a call to npm. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="openai">
  To confirm the proxy is attaching credentials, make a call to OpenAI. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="openrouter">
  To confirm the proxy is attaching credentials, make a call to OpenRouter. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="pagerduty">
  To confirm the proxy is attaching credentials, make a call to PagerDuty. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="perplexity">
  To confirm the proxy is attaching credentials, make a call to Perplexity. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="postmark">
  To confirm the proxy is attaching credentials, make a call to Postmark. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="resend">
  To confirm the proxy is attaching credentials, make a call to Resend. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="sendgrid">
  To confirm the proxy is attaching credentials, make a call to SendGrid. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="sentry">
  To confirm the proxy is attaching credentials, make a call to Sentry. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="shopify">
  To confirm the proxy is attaching credentials, make a call to Shopify. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="slack">
  To confirm the proxy is attaching credentials, make a call to Slack. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="stripe">
  To confirm the proxy is attaching credentials, make a call to Stripe. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="supabase">
  To confirm the proxy is attaching credentials, make a call to Supabase. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="together">
  To confirm the proxy is attaching credentials, make a call to Together AI. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="twilio">
  To confirm the proxy is attaching credentials, make a call to Twilio. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="vercel">
  To confirm the proxy is attaching credentials, make a call to Vercel. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="xai">
  To confirm the proxy is attaching credentials, make a call to xAI. Make the call one of two ways:
</AgentVaultBranch>

<AgentVaultBranch service="custom">
  To confirm the proxy is attaching credentials, make a call to the API you configured. Make the call one of two ways:
</AgentVaultBranch>

<Tabs>
  <Tab title="With your agent">
    In your running agent's session, ask it to make the call. For example:

    <AgentVaultBranch service="none">
      > Run `curl -sS <endpoint-url>` and show me the output.

      The API should respond successfully. The agent doesn't need any real API credentials because the proxy attaches the credential as the request passes through. Run the same command outside the agent, and it fails with an authentication error.
    </AgentVaultBranch>

    <AgentVaultBranch service="github">
      > Run `curl -sS https://api.github.com/user` and show me the output.

      GitHub returns your account. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch service="slack">
      > Run `curl -sS https://slack.com/api/auth.test` and show me the output.

      Slack returns your workspace and user IDs. Run the same request outside the agent and it returns `not_authed`.
    </AgentVaultBranch>

    <AgentVaultBranch service="anthropic">
      > Run `curl -sS https://api.anthropic.com/v1/models -H "anthropic-version: 2023-06-01"` and show me the output.

      Anthropic returns the list of available models. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch service="openai">
      > Run `curl -sS https://api.openai.com/v1/models` and show me the output.

      OpenAI returns the list of available models. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch serviceNot="anthropic,cloudflare,cohere,datadog,deepseek,discord,fireworks,gemini,github,github-npm,gitlab,google-workspace,groq,jira,linear,mistral,none,notion,npm,openai,openrouter,pagerduty,perplexity,postmark,resend,sendgrid,sentry,shopify,slack,stripe,supabase,together,twilio,vercel,xai">
      Ask the agent to hit an authenticated endpoint. The proxy attaches the credential as the request passes through, so the agent needs no real token. Run the same request outside the agent and it should fail with an authentication error.
    </AgentVaultBranch>

    <AgentVaultBranch service="gemini">
      > Run `curl -sS https://generativelanguage.googleapis.com/v1beta/models` and show me the output.

      Google Gemini returns the list of available models. Run the same request outside the agent and it fails with a 403.
    </AgentVaultBranch>

    <AgentVaultBranch service="mistral">
      > Run `curl -sS https://api.mistral.ai/v1/models` and show me the output.

      Mistral AI returns the list of available models. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch service="cohere">
      > Run `curl -sS https://api.cohere.com/v1/models` and show me the output.

      Cohere returns the list of available models. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch service="groq">
      > Run `curl -sS https://api.groq.com/openai/v1/models` and show me the output.

      Groq returns the list of available models. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch service="deepseek">
      > Run `curl -sS https://api.deepseek.com/v1/models` and show me the output.

      DeepSeek returns the list of available models. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch service="openrouter">
      > Run `curl -sS https://openrouter.ai/api/v1/credits` and show me the output.

      OpenRouter returns your credit balance. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch service="together">
      > Run `curl -sS https://api.together.xyz/v1/models` and show me the output.

      Together AI returns the list of available models. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch service="xai">
      > Run `curl -sS https://api.x.ai/v1/models` and show me the output.

      xAI returns the list of available models. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch service="fireworks">
      > Run `curl -sS https://api.fireworks.ai/inference/v1/models` and show me the output.

      Fireworks AI returns the list of available models. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch service="perplexity">
      > Run `curl -sS https://api.perplexity.ai/async/chat/completions` and show me the output.

      Perplexity returns the list of your async requests. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch service="cloudflare">
      > Run `curl -sS https://api.cloudflare.com/client/v4/user/tokens/verify` and show me the output.

      Cloudflare returns your token's status. Run the same request outside the agent and it fails with a 400.
    </AgentVaultBranch>

    <AgentVaultBranch service="datadog">
      > Run `curl -sS https://api.datadoghq.com/api/v1/validate` and show me the output.

      Datadog confirms your API key is valid. Run the same request outside the agent and it fails with a 403.
    </AgentVaultBranch>

    <AgentVaultBranch service="discord">
      > Run `curl -sS https://discord.com/api/v10/users/@me` and show me the output.

      Discord returns your bot user. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch service="gitlab">
      > Run `curl -sS https://gitlab.com/api/v4/user` and show me the output.

      GitLab returns your user profile. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch service="github-npm">
      > Run `curl -sS https://npm.pkg.github.com/-/whoami` and show me the output.

      GitHub Packages returns your npm username, confirming the token is valid. Run the same request outside the agent and it fails with a 403.
    </AgentVaultBranch>

    <AgentVaultBranch service="notion">
      > Run `curl -sS https://api.notion.com/v1/users/me -H "Notion-Version: 2022-06-28"` and show me the output.

      Notion returns your bot user. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch service="npm">
      > Run `curl -sS https://registry.npmjs.org/-/whoami` and show me the output.

      npm returns your username. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch service="pagerduty">
      > Run `curl -sS https://api.pagerduty.com/users/me` and show me the output.

      PagerDuty returns your user profile. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch service="postmark">
      > Run `curl -sS https://api.postmarkapp.com/server` and show me the output.

      Postmark returns your server's info. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch service="resend">
      > Run `curl -sS https://api.resend.com/api-keys` and show me the output.

      Resend returns your API keys. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch service="sendgrid">
      > Run `curl -sS https://api.sendgrid.com/v3/user/account` and show me the output.

      SendGrid returns your account info. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch service="sentry">
      > Run `curl -sS https://sentry.io/api/0/organizations/` and show me the output.

      Sentry returns the organizations your token can access. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch service="stripe">
      > Run `curl -sS https://api.stripe.com/v1/account` and show me the output.

      Stripe returns your account. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch service="vercel">
      > Run `curl -sS https://api.vercel.com/v2/user` and show me the output.

      Vercel returns your user profile. Run the same request outside the agent and it fails with a 403.
    </AgentVaultBranch>

    <AgentVaultBranch service="google-workspace">
      Ask the agent to make a call to a Google Workspace API. For example:

      <CodeGroup>
        ```bash Gmail theme={"dark"}
        curl -sS https://gmail.googleapis.com/gmail/v1/users/me/profile
        ```

        ```bash Google Calendar theme={"dark"}
        curl -sS https://www.googleapis.com/calendar/v3/users/me/calendarList
        ```

        ```bash Google Drive theme={"dark"}
        curl -sS https://www.googleapis.com/drive/v3/about?fields=user
        ```
      </CodeGroup>

      Google returns your Gmail profile, calendars, or Drive info depending on the endpoint. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch service="jira">
      <Note>Replace `<your-tenant>` with your Atlassian subdomain (for example, `mycompany` from `mycompany.atlassian.net`).</Note>

      > Run `curl -sS https://<your-tenant>.atlassian.net/rest/api/3/myself` and show me the output.

      Jira returns your user profile. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch service="twilio">
      <Note>Replace `<your-account-sid>` with your Twilio Account SID from the [Twilio console](https://console.twilio.com/).</Note>

      > Run `curl -sS https://api.twilio.com/2010-04-01/Accounts/<your-account-sid>.json` and show me the output.

      Twilio returns your account. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch service="shopify">
      <Note>Replace `<your-store>` with your Shopify store subdomain (for example, `mystore` from `mystore.myshopify.com`).</Note>

      > Run `curl -sS https://<your-store>.myshopify.com/admin/api/2024-01/shop.json` and show me the output.

      Shopify returns your shop info. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch service="supabase">
      <Note>Replace `<your-project>` with your Supabase project ref from the [project settings](https://supabase.com/dashboard).</Note>

      > Run `curl -sS https://<your-project>.supabase.co/rest/v1/` and show me the output.

      Supabase returns the OpenAPI schema for your project. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>

    <AgentVaultBranch service="linear">
      > Run `curl -sS -X POST https://api.linear.app/graphql -H "Content-Type: application/json" -d '{"query":"{ viewer { id name } }"}'` and show me the output.

      Linear returns your user info. Run the same request outside the agent and it fails with a 401.
    </AgentVaultBranch>
  </Tab>

  <Tab title="With `curl`">
    Any HTTP client works the same way. Run it through the proxy in place of your agent's command:

    <AgentVaultBranch serviceNot="anthropic,cloudflare,cohere,datadog,deepseek,discord,fireworks,gemini,github,github-npm,gitlab,google-workspace,groq,jira,linear,mistral,notion,npm,openai,openrouter,pagerduty,perplexity,postmark,resend,sendgrid,sentry,shopify,slack,stripe,supabase,together,twilio,vercel,xai">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS <endpoint-url>
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="github">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://api.github.com/user
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="slack">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://slack.com/api/auth.test
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="anthropic">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://api.anthropic.com/v1/models -H "anthropic-version: 2023-06-01"
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="openai">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://api.openai.com/v1/models
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="gemini">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://generativelanguage.googleapis.com/v1beta/models
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="mistral">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://api.mistral.ai/v1/models
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="cohere">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://api.cohere.com/v1/models
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="groq">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://api.groq.com/openai/v1/models
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="deepseek">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://api.deepseek.com/v1/models
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="openrouter">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://openrouter.ai/api/v1/credits
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="together">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://api.together.xyz/v1/models
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="xai">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://api.x.ai/v1/models
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="fireworks">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://api.fireworks.ai/inference/v1/models
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="perplexity">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://api.perplexity.ai/async/chat/completions
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="cloudflare">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://api.cloudflare.com/client/v4/user/tokens/verify
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="datadog">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://api.datadoghq.com/api/v1/validate
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="discord">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://discord.com/api/v10/users/@me
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="gitlab">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://gitlab.com/api/v4/user
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="github-npm">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://npm.pkg.github.com/-/whoami
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="notion">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://api.notion.com/v1/users/me -H "Notion-Version: 2022-06-28"
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="npm">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://registry.npmjs.org/-/whoami
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="pagerduty">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://api.pagerduty.com/users/me
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="postmark">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://api.postmarkapp.com/server
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="resend">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://api.resend.com/api-keys
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="sendgrid">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://api.sendgrid.com/v3/user/account
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="sentry">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://sentry.io/api/0/organizations/
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="stripe">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://api.stripe.com/v1/account
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="vercel">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://api.vercel.com/v2/user
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="google-workspace">
      <CodeGroup>
        ```bash Gmail theme={"dark"}
        infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://gmail.googleapis.com/gmail/v1/users/me/profile
        ```

        ```bash Google Calendar theme={"dark"}
        infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://www.googleapis.com/calendar/v3/users/me/calendarList
        ```

        ```bash Google Drive theme={"dark"}
        infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://www.googleapis.com/drive/v3/about?fields=user
        ```
      </CodeGroup>
    </AgentVaultBranch>

    <AgentVaultBranch service="jira">
      <Note>Replace `<your-tenant>` with your Atlassian subdomain (for example, `mycompany` from `mycompany.atlassian.net`).</Note>

      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://<your-tenant>.atlassian.net/rest/api/3/myself
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="twilio">
      <Note>Replace `<your-account-sid>` with your Twilio Account SID.</Note>

      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://api.twilio.com/2010-04-01/Accounts/<your-account-sid>.json
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="shopify">
      <Note>Replace `<your-store>` with your Shopify store subdomain.</Note>

      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://<your-store>.myshopify.com/admin/api/2024-01/shop.json
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="supabase">
      <Note>Replace `<your-project>` with your Supabase project ref.</Note>

      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS https://<your-project>.supabase.co/rest/v1/
      ```
    </AgentVaultBranch>

    <AgentVaultBranch service="linear">
      ```bash theme={"dark"}
      infisical agent-vault run --session-token <session-token> --proxy <proxy-host>:17323 -- curl -sS -X POST https://api.linear.app/graphql -H "Content-Type: application/json" -d '{"query":"{ viewer { id name } }"}'
      ```
    </AgentVaultBranch>

    The proxy logs the request as `brokered`.
  </Tab>
</Tabs>

<AgentVaultBranch service="none,custom">
  <Check>
    Your agent now has a session where it can make authenticated calls to an API without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="github">
  <Check>
    Your agent now has a session where it can call GitHub without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="slack">
  <Check>
    Your agent now has a session where it can call Slack without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="anthropic">
  <Check>
    Your agent now has a session where it can call the Anthropic API without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="openai">
  <Check>
    Your agent now has a session where it can call the OpenAI API without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="gemini">
  <Check>
    Your agent now has a session where it can call Google Gemini without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="mistral">
  <Check>
    Your agent now has a session where it can call Mistral AI without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="cohere">
  <Check>
    Your agent now has a session where it can call Cohere without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="groq">
  <Check>
    Your agent now has a session where it can call Groq without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="perplexity">
  <Check>
    Your agent now has a session where it can call Perplexity without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="openrouter">
  <Check>
    Your agent now has a session where it can call OpenRouter without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="together">
  <Check>
    Your agent now has a session where it can call Together AI without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="deepseek">
  <Check>
    Your agent now has a session where it can call DeepSeek without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="xai">
  <Check>
    Your agent now has a session where it can call xAI without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="fireworks">
  <Check>
    Your agent now has a session where it can call Fireworks AI without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="stripe">
  <Check>
    Your agent now has a session where it can call Stripe without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="twilio">
  <Check>
    Your agent now has a session where it can call Twilio without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="sendgrid">
  <Check>
    Your agent now has a session where it can call SendGrid without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="resend">
  <Check>
    Your agent now has a session where it can call Resend without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="discord">
  <Check>
    Your agent now has a session where it can call Discord without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="postmark">
  <Check>
    Your agent now has a session where it can call Postmark without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="gitlab">
  <Check>
    Your agent now has a session where it can call GitLab without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="vercel">
  <Check>
    Your agent now has a session where it can call Vercel without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="cloudflare">
  <Check>
    Your agent now has a session where it can call Cloudflare without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="supabase">
  <Check>
    Your agent now has a session where it can call Supabase without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="npm">
  <Check>
    Your agent now has a session where it can call npm without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="github-npm">
  <Check>
    Your agent now has a session where it can call GitHub Packages without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="datadog">
  <Check>
    Your agent now has a session where it can call Datadog without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="sentry">
  <Check>
    Your agent now has a session where it can call Sentry without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="pagerduty">
  <Check>
    Your agent now has a session where it can call PagerDuty without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="linear">
  <Check>
    Your agent now has a session where it can call Linear without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="notion">
  <Check>
    Your agent now has a session where it can call Notion without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="jira">
  <Check>
    Your agent now has a session where it can call Jira without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="google-workspace">
  <Check>
    Your agent now has a session where it can call Google Workspace without ever seeing a real token.
  </Check>
</AgentVaultBranch>

<AgentVaultBranch service="shopify">
  <Check>
    Your agent now has a session where it can call Shopify without ever seeing a real token.
  </Check>
</AgentVaultBranch>

## Troubleshooting

<AccordionGroup>
  <Accordion title="Authentication error from the upstream API">
    The credential wasn't applied. Open your access bundle and confirm a service covers the host you called. If one does, the stored token is likely wrong.
  </Accordion>

  <Accordion title="407 from the proxy">
    The session token was missing from the request. Confirm you passed `--session-token`, or that the token appears as the userinfo in your `HTTPS_PROXY` URL (like `http://x-agent-vault:<session-token>@<proxy-address>`).
  </Accordion>

  <Accordion title="403 from the proxy">
    This could be for two reasons:

    * The session was revoked or has expired. Check the Sessions page in Infisical, and create a new one if needed.
    * Under the proxy's [strict traffic policy](/docs/documentation/platform/agent-vault/proxies#traffic-policy), no service in the bundle covers the host you called. Add a service that does, or use a pass-through service.
  </Accordion>
</AccordionGroup>

## Next steps

<CardGroup cols={2}>
  <Card title="Access bundles" icon="box" href="/docs/documentation/platform/agent-vault/access-bundles">
    Lists of services that AI agents can access during a session.
  </Card>

  <Card title="Sessions" icon="monitor" href="/docs/documentation/platform/agent-vault/sessions">
    Time-bound grants that let AI agents access services without holding real credentials.
  </Card>

  <Card title="Proxies" icon="route" href="/docs/documentation/platform/agent-vault/proxies">
    Forward proxies that intercept an AI agent's requests and attach real credentials on the way out.
  </Card>

  <Card title="CLI reference" icon="terminal" href="/docs/cli/commands/agent-vault">
    Every flag of `infisical agent-vault proxy` and `infisical agent-vault run`.
  </Card>
</CardGroup>
