Smtp Email Sender
openakita/openakita
Send emails via SMTP (Gmail, Outlook, etc.). An agent skill from openakita/openakita.
Set up and operate the Gmail/Calendar/Contacts connector and the open-loop engine: who is waiting on the user, what they promised, and the context needed to respond.
$ npx skills add garrytan/gbrain --skill google-loops -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install garrytan/gbrain google-loops --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/garrytan/gbrain.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/google-loops .claude/skills/google-loops && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "google-loops" agent skill from https://github.com/garrytan/gbrain/tree/master/skills/google-loops into .claude/skills/google-loops/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-loops", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/garrytan/gbrain/tree/master/skills/google-loopsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add garrytan/gbrain --skill google-loops -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install garrytan/gbrain google-loops --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/garrytan/gbrain.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/google-loops .agents/skills/google-loops && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "google-loops" agent skill from https://github.com/garrytan/gbrain/tree/master/skills/google-loops into .agents/skills/google-loops/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-loops", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add garrytan/gbrain --skill google-loops -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install garrytan/gbrain google-loops --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/garrytan/gbrain.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/google-loops .cursor/skills/google-loops && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "google-loops" agent skill from https://github.com/garrytan/gbrain/tree/master/skills/google-loops into .cursor/skills/google-loops/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-loops", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/garrytan/gbrain.git --path skills/google-loops--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add garrytan/gbrain --skill google-loops -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install garrytan/gbrain google-loops --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/garrytan/gbrain.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/google-loops .gemini/skills/google-loops && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "google-loops" agent skill from https://github.com/garrytan/gbrain/tree/master/skills/google-loops into .gemini/skills/google-loops/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-loops", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install garrytan/gbrain google-loopsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add garrytan/gbrain --skill google-loops -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/garrytan/gbrain.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/google-loops .github/skills/google-loops && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "google-loops" agent skill from https://github.com/garrytan/gbrain/tree/master/skills/google-loops into .github/skills/google-loops/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-loops", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add garrytan/gbrain --skill google-loops -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install garrytan/gbrain google-loops --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/garrytan/gbrain.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/google-loops .opencode/skills/google-loops && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "google-loops" agent skill from https://github.com/garrytan/gbrain/tree/master/skills/google-loops into .opencode/skills/google-loops/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-loops", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
google-loopsSet up and operate the Gmail/Calendar/Contacts connector and the open-loop engine: who is waiting on the user, what they promised, and the context needed to respond.
Google Loops is an agent skill from garrytan/gbrain. Set up and operate the Gmail/Calendar/Contacts connector and the open-loop engine: who is waiting on the user, what they promised, and the context needed to respond. Covers painless BYO OAuth setup (exactly two user interactions), the daily gbrain waiting digest, loop closing/muting, and troubleshooting via the typed error catalog.
Its SKILL.md is about 2.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Backend & APIs, covering Email management. It works with Gmail. The repository describes itself as: Garry's Opinionated OpenClaw/Hermes Agent Brain. The licence is MIT.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit fc54831. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are bash).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
GOOGLE_CLIENT_SECRETFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Google Loops loads about 2.3k tokens when it runs. Until then it costs about 87 tokens; SKILL.md has 1,100 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from garrytan/gbrain at commit fc54831, republished under its MIT licence (© garrytan). 1,100 words, ~2,310 tokens.
.claude/skills/google-loops/SKILL.md (or your agent's skills folder).The connector ingests Gmail threads, calendar events, and contacts into the
brain and maintains the open-loop record behind gbrain waiting. Full
references: docs/guides/google-connect.md (setup + every error and its
fix) and docs/guides/open-loops.md (how detection works).
[SHOW USER] blocks verbatim. Setup commands print fenced
[SHOW USER] ... [/SHOW USER] blocks — numbered steps with deep links.
Pass them to the user unchanged (paraphrasing loses load-bearing detail
like "Desktop app, NOT Web application"). Batch everything into ONE
message per block.client_secret_*.json into chat, save it to a file (mode 0600) and pass
the path: gbrain google connect --client-json <path>. Env
(GOOGLE_CLIENT_ID/GOOGLE_CLIENT_SECRET) also works. Raw
--client-id/--client-secret flags are the last resort.--json and read
{ ok, status, next_action: { command, user_message }, error }. When
next_action.user_message is present, that IS the message to show the
user; when next_action.command is present, that is your next call.
Errors carry { code, problem, cause, fix, doc_url } — show the user
problem + fix, nothing else.gbrain google connect and
gbrain google setup are idempotent state machines — the documented fix
for most errors is "run it again."gbrain google setup --jsonHandles: credential intake (prints the GCP checklist when nothing is on
file) → consent (loopback locally; auto paste-back over SSH/headless —
non-TTY flows complete via a second call:
gbrain google connect --code "<pasted-redirect-url>") → source
registration → a budgeted first sync (newest mail first; the deep backfill
resumes on later syncs automatically) → the first gbrain waiting digest.
Multiple accounts: repeat with --account work@example.com.
Already holding Google access another way (a Google CLI with its own auth,
gcloud, a credential gateway that mints tokens)? Skip OAuth and point the
source at it — no credential enters gbrain:
gbrain sources add gmail-work --kind google --account you@example.com \
--access command --token-command "<command that prints an access token>"(--access env --token-env <VAR> reads an externally-refreshed token from
the environment instead.) Then gbrain sync --source gmail-work and
gbrain waiting work identically.
Verify health afterwards: gbrain google status --json (per-account
refresh probe) — and gbrain doctor carries a google_oauth check that
warns once a Testing-mode account goes 5+ days without a successful
refresh. An actively-syncing account gets no pre-warning before the 7-day
Testing-mode expiry — publishing to Production is the real fix.
gbrain waiting --json # the killer output: ranked people waiting
gbrain loops done <id> # user handled it
gbrain loops drop <id> # user is not going to do it
gbrain loops mute sender <email> # never track this sender againwaiting REFUSES on stale data (no successful sync in 24h) and names the
exact fix (gbrain sync --source <id>). Run the sync, then retry. Only
use --stale-ok when the user explicitly accepts stale results.completeness: "partial" means some mail in the last 14 days is held after
repeated import failures (listed in held). Present the answer as partial:
name each held item (sender, and subject when shown) and its retry command
(gbrain sources retry-held <id>). Never say "you are clean" on a partial
answer.text digest — reuse it.context_pack with the counterparty slug.loops done) — thread loops also self-close on the next sync when the
reply is visible in Gmail.Google sources sync like any source: autopilot and gbrain sync --all pick
them up automatically. No cron of its own. A bare un-targeted gbrain sync
does NOT reach them — use --source <id> or --all.
Every failure has a typed code with the fix attached —
docs/guides/google-connect.md#troubleshooting is the canonical table. The
three the user will actually hit:
access_denied_test_user → they forgot to add themselves as a test
user (the error carries the deep link).invalid_grant_testing_expiry (everything silently stopped ~day 7) →
their consent screen is still in Testing; publish to Production, then
gbrain google connect --reauth <email>.Commitment extraction sends recent email text (≤30 days, ≤50 threads/sweep)
to the configured chat provider. Tell the user once during setup; the off
switch is gbrain config set loops.extraction_enabled false. The
unanswered-thread detector is free and unaffected.
When relaying gbrain waiting, present per counterparty, most urgent first, then the ## No counterparty section (loops that name no person) last:
## <Counterparty> (<N> open)
- [<loop_type>] <what's owed> (<age>) — due <date if any>
> "<evidence quote>"
<Gmail deep link>The trusted-local --json result already carries this as a paste-ready
text field — prefer relaying it over re-rendering. For setup commands,
relay [SHOW USER] blocks verbatim and error.problem + error.fix on
failures; never dump raw JSON envelopes at the user.
Follow the agent operator protocol for any gbrain error code, exit code, [AGENT] block or notice block. Specific to this skill:
[SHOW USER] blocks: relay them verbatim, one message per block. gbrain mcp expose and gbrain google still exit 2 when they need the user's confirmation (documented legacy), so read the block, not just the exit code.invalid_grant_revoked, consent_timeout, wrong_account_consented, …) carries { code, problem, cause, fix }: show the user the problem and fix; most fixes are "run it again" by the user.gbrain waiting refuses on stale data or reports partial coverage from held items: run the sync it names, or gbrain sources status <id> then, after the user agrees, gbrain sources retry-held <id>.[SHOW USER] block. The checklists carry load-bearing
detail ("Desktop app, NOT Web application", the test-user step). Relay
verbatim, one message per block.--client-json <path>) or env vars;
secrets in argv/chat are the last resort, never the default.query/search. The open-loop
record is open_loops / gbrain waiting — search results have no
loop-state semantics and will happily surface answered threads.completeness: "partial". A partial answer with no loops is
not an empty inbox; say which items are held and how to re-attempt them.--stale-ok silently. Run the
named gbrain sync --source <id> first; only pass --stale-ok when the
user explicitly accepts possibly-outdated loops.gbrain loops done <id>) only
after the user says it's handled; thread loops self-close on the next sync
when the reply is visible in Gmail.© garrytan, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/google-loops of garrytan/gbrain.
Open the folder on GitHubat commit fc54831
Google Loops next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Google Loops this skillgarrytan/gbrain | 31k | — | ~2.3k | Automated safety check: Pass | MIT | |
| Smtp Email Senderopenakita/openakita | 2k | — | ~693 | Automated safety check: Notes | AGPL-3.0 | |
| Deliverability Test Publicgrowthenginenowoslawski/coldoutboundskills | 751 | — | ~1k | Automated safety check: Pass | MIT | |
| Google WorkspaceRedWoodOG/Hermes-Desktop | 177 | — | ~2.1k | Automated safety check: Pass | MIT | |
| Agentmailsundial-org/awesome-openclaw-skills | 663 | 1 repos | ~1.5k | Automated safety check: Warn | None | |
| GmailCraftOS-dev/CraftBot | 392 | 2 repos | ~2.2k | Automated safety check: Pass | MIT |
openakita/openakita
Send emails via SMTP (Gmail, Outlook, etc.). An agent skill from openakita/openakita.
growthenginenowoslawski/coldoutboundskills
Compare reply rates, bounce rates, and positive reply rates broken down by inbox type (SMTP / Gmail / Outlook) for a Smartlead account.
RedWoodOG/Hermes-Desktop
Gmail, Calendar, Drive, Contacts, Sheets, and Docs integration via Python.
sundial-org/awesome-openclaw-skills
API-first email platform designed for AI agents. An agent skill from sundial-org/awesome-openclaw-skills.
CraftOS-dev/CraftBot
Gmail API integration with managed OAuth. An agent skill from CraftOS-dev/CraftBot.
ericrisco/rsc-harness
A skill your agent uses when server-side code reads or writes Gmail, Drive, Calendar, or Sheets with a GCP service account and no human in the OAuth loop: picking the auth mode (app-owned vs…
garrytan/gbrain
Traces a factual error the user points out back to its source (a brain page, a memory file, SOUL.md or USER.md, or a hallucination) and fixes that source instead of just noting the correction.
garrytan/gbrain
Searches and writes a company-wide knowledge brain through the gbrain CLI, so durable decisions and facts about people, projects and history stay findable beyond one session.
garrytan/gbrain
Ingest links, articles, tweets, and ideas into the brain. An agent skill from garrytan/gbrain.
garrytan/gbrain
Sends what your notes already know about a topic to Perplexity, so the cited web search reports only what is new, such as entity updates or deal changes.
garrytan/gbrain
Migrate a brain from gbrain-base (or any pack) to gbrain-base-v2's 14-canonical-type taxonomy via gbrain onboard --check + the unify-types Minion handler.
garrytan/gbrain
Run gbrain skillpack-check to produce an agent-readable JSON health report for the gbrain install.
Works with
Categories
Set up and operate the Gmail/Calendar/Contacts connector and the open-loop engine: who is waiting on the user, what they promised, and the context needed to respond. Google Loops is an agent skill from garrytan/gbrain. Set up and operate the Gmail/Calendar/Contacts connector and the open-loop engine: who is waiting on the user, what they promised, and the context needed to respond.
Google Loops fits situations like: tasks that involve Email management.
Run `npx skills add garrytan/gbrain --skill google-loops -a claude-code`. Or copy the skill folder (skills/google-loops in garrytan/gbrain) into .claude/skills/google-loops in your project. Claude Code loads it when a task matches its description.
Run `npx skills add garrytan/gbrain --skill google-loops -a codex`. Or copy the skill folder (skills/google-loops in garrytan/gbrain) into .agents/skills/google-loops in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add garrytan/gbrain --skill google-loops -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/google-loops, .gemini/skills/google-loops, .github/skills/google-loops and .opencode/skills/google-loops in your project.
Going by SKILL.md and its folder, Google Loops needs credentials named GOOGLE_CLIENT_SECRET. Our summary lists: A credential in GOOGLE_CLIENT_SECRET.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Google Loops is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.3k tokens (SKILL.md is roughly 9.2k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Google Loops: Smtp Email Sender (openakita/openakita, 2k stars), Deliverability Test Public (growthenginenowoslawski/coldoutboundskills, 751 stars), Google Workspace (RedWoodOG/Hermes-Desktop, 177 stars) and Agentmail (sundial-org/awesome-openclaw-skills, 663 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
garrytan (a GitHub user) maintains it in garrytan/gbrain, which has 30,701 GitHub stars. The repository holds 47 skills in this directory. The repository was last updated on October 9, 2026.
Source: garrytan/gbrain on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.