1import{j as e}from"./markdown-CMW6EB7-.js";import"./helmet-CMSyB68m.js";import{L as s}from"./router-CFY-GuIw.js";import{S as o}from"./SEO-BXYH2s3Q.js";import{l,m as n,K as i,B as c,i as d,k as m}from"./icons-Ca3AKjTN.js";const r="Operate Gmail, Outlook, Drive, Teams, GitHub from Claude or Codex across many accounts. CLI plus paired agent skill; tokens stay local.",x={"@context":"https://schema.org","@type":"SoftwareApplication",name:"All Purpose Login",description:r,applicationCategory:"DeveloperApplication",operatingSystem:"macOS, Linux, Windows",url:"https://deemwar.com/products/all-purpose-login",publisher:{"@type":"Organization",name:"Deemwar"},offers:{"@type":"Offer",price:"Coming Soon",priceCurrency:"USD",availability:"https://schema.org/PreOrder"}},g=[{icon:n,title:"CLI + Claude/Codex agent skill",description:"Same engine, two surfaces. Use the CLI directly from your terminal, or invoke it as an installable Claude / Codex agent skill â your AI agent calls Gmail, Outlook, Drive, Teams, and GitHub APIs by name, with the same auth."},{icon:i,title:"Many Gmail + Azure accounts, side by side",description:"Register as many Google handles and Microsoft (Azure AD) tenants as you need â personal, work, client A, client B, a one-off audit account. Each labelled and switchable. Tokens refresh independently."},{icon:c,title:"Local-only storage",description:"Refresh tokens live in your OS keychain or an encrypted file under your home directory. Deemwar servers never see your tokens or your data."},{icon:d,title:"Delegated, user-consented access",description:"The tool acts on your behalf using scopes you approve in the browser consent screen. Revoke access at any time from your Google or Microsoft account settings."}],p=[{provider:"Google",items:["Gmail (read, send, modify)","Google Calendar (events)","Basic profile (email, name)"]},{provider:"Microsoft",items:["Outlook Mail (read, send)","Microsoft Calendar (events)","Microsoft Teams (chats, messages)","Basic profile (email, name)"]}],f=()=>e.jsxs("main",{className:"min-h-screen pt-32 pb-20 bg-gray-50 dark:bg-gray-950",children:[e.jsx(o,{title:"All Purpose Login â CLI + Claude/Codex agent skill",description:r,path:"/products/all-purpose-login",jsonLd:x}),e.jsxs("div",{className:"container mx-auto px-4 md:px-6 max-w-4xl",children:[e.jsxs("div",{className:"mb-6 text-sm text-gray-500 dark:text-gray-400",children:[e.jsx(s,{to:"/products",className:"hover:text-accent",children:"Products"}),e.jsx("span",{className:"mx-2",children:"/"}),e.jsx("span",{children:"All Purpose Login"})]}),e.jsxs("div",{className:"flex items-center gap-4 mb-4",children:[e.jsx(l,{className:"w-12 h-12 text-accent"}),e.jsx("span",{className:"text-xs px-2 py-1 rounded-full bg-accent/10 text-accent font-medium",children:"Coming Soon"}),e.jsx(s,{to:"/products/all-purpose-login/pricing",className:"ml-auto text-sm font-medium text-accent hover:text-accent/80 transition-colors",children:"View pricing â"})]}),e.jsx("h1",{className:"text-4xl md:text-5xl font-bold mb-4 text-gray-900 dark:text-gray-100",children:"All Purpose Login"}),e.jsx("p",{className:"text-xl text-gray-600 dark:text-gray-300 mb-12 max-w-3xl",children:"A CLI plus a paired Claude / Codex agent skill. Register as many Gmail and Microsoft accounts as you need, then operate them â read mail, schedule meetings, search Drive, post in Teams, work GitHub â directly from your AI agent. The everyday work runs through one consistent surface."}),e.jsxs("section",{className:"mb-16",children:[e.jsx("h2",{className:"text-2xl font-bold mb-4 text-gray-900 dark:text-gray-100",children:"What it does"}),e.jsxs("p",{className:"text-gray-600 dark:text-gray-300 leading-relaxed mb-4",children:["All Purpose Login is two things glued into one. A ",e.jsx("strong",{children:"CLI"})," (",e.jsx("code",{className:"px-1.5 py-0.5 rounded bg-gray-200 dark:bg-gray-800 text-sm",children:"apl"}),") that handles the browser-based OAuth dance and hands you fresh access tokens on demand. And a paired ",e.jsx("strong",{children:"Claude / Codex agent skill"})," that wraps the same engine so your AI agent can call Gmail, Outlook, Calendar, Drive, Teams, and GitHub by name."]}),e.jsxs("p",{className:"text-gray-600 dark:text-gray-300 leading-relaxed mb-4",children:["Register an account once â ",e.jsx("code",{className:"px-1.5 py-0.5 rounded bg-gray-200 dark:bg-gray-800 text-sm",children:"apl setup google"})," ","or"," ",e.jsx("code",{className:"px-1.5 py-0.5 rounded bg-gray-200 dark:bg-gray-800 text-sm",children:"apl setup ms"})," ","â then label it (",e.jsx("code",{className:"px-1.5 py-0.5 rounded bg-gray-200 dark:bg-gray-800 text-sm",children:"--as work"}),","," ",e.jsx("code",{className:"px-1.5 py-0.5 rounded bg-gray-200 dark:bg-gray-800 text-sm",children:"--as personal"}),"). Repeat for as many handles as you need. From then on, both surfaces â terminal and agent â can call any API across any account."]}),e.jsx("p",{className:"text-gray-600 dark:text-gray-300 leading-relaxed",children:"No SDKs to learn. No client libraries to wrangle. Just tokens, on demand, for the APIs you already know â and one agent skill that knows where to point them."})]}),e.jsxs("section",{className:"mb-16",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-gray-900 dark:text-gray-100",children:"Features"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:g.map(a=>e.jsxs("div",{className:"p-6 rounded-xl border border-light-border dark:border-dark-border bg-white dark:bg-gray-900",children:[e.jsx(a.icon,{className:"w-8 h-8 text-accent mb-4"}),e.jsx("h3",{className:"text-lg font-semibold mb-2 text-gray-900 dark:text-gray-100",children:a.title}),e.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-300 leading-relaxed",children:a.description})]},a.title))})]}),e.jsxs("section",{className:"mb-16",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-gray-900 dark:text-gray-100",children:"Two surfaces, one engine"}),e.jsx("h3",{className:"text-base font-semibold mb-2 text-gray-700 dark:text-gray-200",children:"From the terminal"}),e.jsx("pre",{className:"p-6 rounded-xl bg-gray-900 dark:bg-black text-gray-100 text-sm overflow-x-auto mb-8",children:`# First-time login (opens browser, you approve scopes) 2apl setup google --as personal 3apl setup ms --as work --tenant contoso.onmicrosoft.com 4 5# List every registered account 6apl accounts 7 8# Call Gmail as 'personal' 9TOKEN=$(apl token google --as personal --scope gmail.readonly) 10curl -H "Authorization: Bearer $TOKEN" \\ 11 https://gmail.googleapis.com/gmail/v1/users/me/messages 12 13# Call Microsoft Graph as 'work' 14TOKEN=$(apl token ms --as work --scope "Mail.Read") 15curl -H "Authorization: Bearer $TOKEN" \\ 16 https://graph.microsoft.com/v1.0/me/messages`}),e.jsx("h3",{className:"text-base font-semibold mb-2 text-gray-700 dark:text-gray-200",children:"From Claude or Codex (agent skill)"}),e.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-300 mb-3",children:"Install the paired agent skill once, and your AI can talk to every registered account by name â no token plumbing in the prompt."}),e.jsx("pre",{className:"p-6 rounded-xl bg-gray-900 dark:bg-black text-gray-100 text-sm overflow-x-auto",children:`You: "Pull my last 5 unread emails on 'work', then search Drive on 17 'personal' for the design doc we shipped this morning." 18 19Agent: (calls apl skill) â Microsoft Graph Mail (work) 20 (calls apl skill) â Google Drive search (personal) 21 â summarises the result in chat`})]}),e.jsxs("section",{className:"mb-16",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-gray-900 dark:text-gray-100",children:"Supported scopes"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:p.map(a=>e.jsxs("div",{className:"p-6 rounded-xl border border-light-border dark:border-dark-border bg-white dark:bg-gray-900",children:[e.jsx("h3",{className:"text-lg font-semibold mb-3 text-gray-900 dark:text-gray-100",children:a.provider}),e.jsx("ul",{className:"space-y-2",children:a.items.map(t=>e.jsxs("li",{className:"text-sm text-gray-600 dark:text-gray-300 flex items-start gap-2",children:[e.jsx("span",{className:"text-accent mt-0.5",children:"â¢"}),e.jsx("span",{children:t})]},t))})]},a.provider))}),e.jsx("p",{className:"text-sm text-gray-500 dark:text-gray-400 mt-4",children:"You approve every scope explicitly in the browser consent screen. The CLI only requests what you ask it to."})]}),e.jsxs("section",{className:"mb-16 p-8 rounded-xl bg-accent/5 border border-accent/20",children:[e.jsx("h2",{className:"text-xl font-bold mb-2 text-gray-900 dark:text-gray-100",children:"Your data stays on your machine"}),e.jsxs("p",{className:"text-gray-600 dark:text-gray-300 leading-relaxed mb-4",children:["All Purpose Login is a local tool. It does not send your tokens, email contents, calendar events, or any other user data to Deemwar or any third party. Read the full"," ",e.jsx(s,{to:"/products/all-purpose-login/privacy",className:"text-accent hover:underline font-medium",children:"privacy policy for this product"}),"."]})]}),e.jsxs("section",{className:"text-center",children:[e.jsx("p",{className:"text-gray-600 dark:text-gray-300 mb-6",children:"All Purpose Login is launching soon. Get on the early-access list or check the planned pricing."}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3 justify-center",children:[e.jsxs(s,{to:"/products/all-purpose-login/pricing",className:"inline-flex items-center justify-center gap-2 btn-primary",children:["View pricing",e.jsx(m,{className:"w-4 h-4"})]}),e.jsx(s,{to:"/contact",className:"btn-secondary",children:"Talk to us"})]})]})]})]});
21export{f as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.