diff --git a/README.md b/README.md index 6efd827c..ff01802d 100644 --- a/README.md +++ b/README.md @@ -37,8 +37,9 @@ memory, routines and history. Most AI assistants stop the moment they hit a login screen. Godmode Bot is built around the things a real coworker needs to be useful: -- **Access** — a managed browser (via [browser-use](https://github.com/browser-use/browser-use)), your Chrome sessions, - and hundreds of apps through [Composio](https://composio.dev) or any MCP server. +- **Access** — a managed browser (via [browser-use](https://github.com/browser-use/browser-use)) and your Chrome sessions. + Agents sign in to websites with your saved logins and 2FA codes, so apps need no MCP connector. Composio and MCP + servers are optional, for instant app triggers and APIs without a website. - **Credentials without exposure** — a local, encrypted vault for logins and TOTP 2FA. Passwords and codes are typed into the page *for* the agent; the model never sees them. - **Autonomy** — powered by [Claude Code](https://code.claude.com) (Opus 5.5) in full-bypass mode, so work continues diff --git a/apps/desktop/src/components/integrations/composio-explainer.tsx b/apps/desktop/src/components/integrations/composio-explainer.tsx index 44763b18..93841174 100644 --- a/apps/desktop/src/components/integrations/composio-explainer.tsx +++ b/apps/desktop/src/components/integrations/composio-explainer.tsx @@ -18,7 +18,7 @@ const NAMES: Record = { const POINTS = [ { icon: Boxes, title: "Hundreds of apps", body: "Gmail, Slack, GitHub, Notion, CRMs, calendars — each becomes a set of tools your agents can call." }, - { icon: ShieldCheck, title: "OAuth, not passwords", body: "You sign in on the app's own page. Tokens live in Composio; Godmode only keeps your API key, encrypted." }, + { icon: ShieldCheck, title: "OAuth sign-in", body: "You sign in on the app's own page. Tokens live in Composio; Godmode only keeps your API key, encrypted." }, { icon: Layers, title: "Scoped accounts", body: "Connect an account for everyone, one workspace, or a single agent — e.g. work vs. personal Gmail." }, ]; @@ -29,10 +29,10 @@ export function ComposioExplainer() {

Composio

-

Plug your agents into the apps you already use

+

React the moment something arrives

- Composio handles sign-in and API plumbing for hundreds of services. Connect an account once and every agent in reach gets - it as MCP tools — no scraping, no shared passwords. + Optional. Connect an account when an automation should start on a new email or Slack message, or when an agent should call + the app's API directly.

{POINTS.map((p, i) => ( diff --git a/apps/desktop/src/components/integrations/no-connectors-note.tsx b/apps/desktop/src/components/integrations/no-connectors-note.tsx new file mode 100644 index 00000000..3d5453ba --- /dev/null +++ b/apps/desktop/src/components/integrations/no-connectors-note.tsx @@ -0,0 +1,105 @@ +import { useId, useState } from "react"; +import { useNavigate } from "react-router"; +import { AnimatePresence, motion } from "motion/react"; +import { ArrowRight, CircleCheck, Globe, KeyRound, ShieldCheck } from "lucide-react"; +import { Button } from "@/components/ui/button"; +import { storageKey } from "@/lib/core"; + +const DISMISS_KEY = storageKey("godmode-integrations-no-connectors"); + +const STEPS = [ + { icon: Globe, label: "Opens the site" }, + { icon: KeyRound, label: "Fills your login" }, + { icon: ShieldCheck, label: "Adds the 2FA code" }, + { icon: CircleCheck, label: "Signed in as you" }, +]; + +function dismissed(): boolean { + try { + return localStorage.getItem(DISMISS_KEY) === "1"; + } catch { + return false; + } +} + +/** Integrations are optional: agents sign in to websites with vault logins and 2FA, so apps need no MCP connector. */ +export function NoConnectorsNote() { + const navigate = useNavigate(); + const [hidden, setHidden] = useState(dismissed); + const titleId = useId(); + + const dismiss = () => { + try { + localStorage.setItem(DISMISS_KEY, "1"); + } catch { + /* ignore */ + } + setHidden(true); + }; + + return ( + + {!hidden && ( + +
+
+
+ +
+
+

Your apps don't need a connector

+

+ Godmode signs in to websites the way you do: with the username, password and 2FA code saved in your Vault. It types them + into the login page itself, so the AI never sees them. Your CRM, a supplier portal, your shop admin: most sites that open in + a browser work right away, without an MCP connector. +

+

+ Connect an app here only when an automation should start the moment something arrives, like a new email, or for an API + without a website. +

+
+ + +
+
+
+
    + {STEPS.map((s, i) => ( + + + + + {s.label} + + ))} +
+
+
+ )} +
+ ); +} diff --git a/apps/desktop/src/components/onboarding/done-step.tsx b/apps/desktop/src/components/onboarding/done-step.tsx index 0ac2edb3..81021a95 100644 --- a/apps/desktop/src/components/onboarding/done-step.tsx +++ b/apps/desktop/src/components/onboarding/done-step.tsx @@ -1,6 +1,6 @@ import { useState } from "react"; import { motion } from "motion/react"; -import { ArrowRight, Bot, CircleCheck, CircleDashed, Plug, ShieldCheck } from "lucide-react"; +import { ArrowRight, Bot, CircleCheck, CircleDashed, KeyRound, ShieldCheck } from "lucide-react"; import { MASCOT_CHARACTER, MASCOT_COLOR, type LicenseState } from "@godmode/shared"; import { Character } from "@/components/character"; import { FormError, SubmitButton } from "./auth-layout"; @@ -16,8 +16,8 @@ export interface OnboardingSummary { const NEXT = [ { to: "/agents/new", icon: , title: "Hire your first agent", body: "Pick a template or describe the job." }, + { to: "/vault/logins", icon: , title: "Save your logins", body: "Agents sign in like you, 2FA included. No connectors needed." }, { to: "/vault/2fa?import=1", icon: , title: "Import 2FA codes", body: "Scan Google Authenticator exports." }, - { to: "/integrations", icon: , title: "Connect your apps", body: "Gmail, Slack, GitHub and more via Composio." }, ]; export function DoneStep({ diff --git a/apps/desktop/src/lib/mode.ts b/apps/desktop/src/lib/mode.ts index 5a497bcc..436f0c49 100644 --- a/apps/desktop/src/lib/mode.ts +++ b/apps/desktop/src/lib/mode.ts @@ -29,7 +29,7 @@ export const EASY_PAGES: Record} title="Integrations" - description="Give your agents access to apps and APIs — Composio for hundreds of SaaS apps, tools for any API with a key, MCP servers for anything else." + description="Optional: your agents already sign in to websites with your saved logins and 2FA codes. Add Composio for instant triggers, tools for any API with a key, MCP servers for anything else." /> + } label="Composio" count={counts.composio} /> diff --git a/apps/website/src/components/sections/Capabilities.astro b/apps/website/src/components/sections/Capabilities.astro index 3c517528..c54bd804 100644 --- a/apps/website/src/components/sections/Capabilities.astro +++ b/apps/website/src/components/sections/Capabilities.astro @@ -213,8 +213,9 @@ import Character from '../ui/Character.astro';

Works with the tools you have.

- It uses websites and programs the way you do, so there is no coding and no IT project. Connecting Gmail, - Slack or Teams is optional and makes it react the moment something arrives. + No connector per app: it signs in with your own logins and 2FA codes and uses websites and programs the way + you do. No coding, no IT project. Connecting Gmail, Slack or Teams is optional and makes it react the moment + something arrives.

diff --git a/apps/website/src/components/sections/Faq.astro b/apps/website/src/components/sections/Faq.astro index 05968320..1ebae40e 100644 --- a/apps/website/src/components/sections/Faq.astro +++ b/apps/website/src/components/sections/Faq.astro @@ -40,6 +40,11 @@ const faqs: { key: string; q: string; a: string }[] = [ q: 'Is it really safe to give an AI my passwords?', a: `Your passwords and 2FA codes live in a vault on your computer, encrypted (AES-256). Godmode types them into the login page itself, so the AI only learns that a password was filled, never what it is, and only on that login’s own website. Every use is logged. One honest exception: on a separate Mac of its own, Godmode controls the whole machine, so signing in there is best effort and off until you allow it.`, }, + { + key: 'connectors', + q: 'Do I need connectors or integrations for my apps?', + a: `No. Many AI assistants need a connector (an “MCP server” or an app integration) for each app before they can work in it. Godmode signs in the way you do, with your own username, password and 2FA code from its encrypted vault, and then works in the website itself. Your CRM, a supplier portal, your shop admin, your accounting tool: most sites that open in your browser work right away, with no connector to set up. Connecting an app is optional and only makes an automation start the moment something arrives, like a new email.`, + }, { key: 'data', q: 'Where does my data go?', diff --git a/docs/screenshots/no-connectors/integrations-dark.png b/docs/screenshots/no-connectors/integrations-dark.png new file mode 100644 index 00000000..0de51007 Binary files /dev/null and b/docs/screenshots/no-connectors/integrations-dark.png differ diff --git a/docs/screenshots/no-connectors/integrations-dismissed.png b/docs/screenshots/no-connectors/integrations-dismissed.png new file mode 100644 index 00000000..5d494a84 Binary files /dev/null and b/docs/screenshots/no-connectors/integrations-dismissed.png differ diff --git a/docs/screenshots/no-connectors/integrations-light.png b/docs/screenshots/no-connectors/integrations-light.png new file mode 100644 index 00000000..b76f3eaf Binary files /dev/null and b/docs/screenshots/no-connectors/integrations-light.png differ diff --git a/docs/screenshots/no-connectors/website-faq.png b/docs/screenshots/no-connectors/website-faq.png new file mode 100644 index 00000000..5cb8b523 Binary files /dev/null and b/docs/screenshots/no-connectors/website-faq.png differ diff --git a/packages/core/src/runner/prompt.ts b/packages/core/src/runner/prompt.ts index 56d049c4..174a4618 100644 --- a/packages/core/src/runner/prompt.ts +++ b/packages/core/src/runner/prompt.ts @@ -273,7 +273,7 @@ This run uses ${ctx.glm} on Z.ai, not Claude, for a task Claude couldn't do. It const where = ctx.vm ? ` It is Google Chrome inside the VM "${ctx.vm.name}", not a browser on ${human}'s computer.` : ""; const takeover = ctx.vm ? "on the VM's screen" : "in Godmode's live browser view"; out.push(`### Browser -Use the \`browser\` MCP tools for anything on the web (navigate, click, type, read pages, take screenshots).${where} The browser keeps its cookies between runs, so you are often already logged in — check before logging in again. ${ +Use the \`browser\` MCP tools for anything on the web (navigate, click, type, read pages, take screenshots).${where} The browser keeps its cookies between runs, so you are often already logged in — check before logging in again. A website needs no MCP connector or integration: unless a tool for it is attached, sign in with the vault (see "Logging in to websites") and work in the page. ${ captchaSolverReady(settings) ? `If a CAPTCHA blocks you (reCAPTCHA, Cloudflare Turnstile, a picture with distorted text), call \`captcha_solve\`: ${human}'s solving service solves it and Godmode puts the answer into the page; never try to solve a CAPTCHA yourself. When it can't (hCaptcha, a "Just a moment" page, another kind of puzzle, the daily limit) or another human check blocks you, tell ${human} (they can take over ${takeover}).` : `If a CAPTCHA or an unexpected human check blocks you, tell ${human} in your final summary (they can take over ${takeover}).`