Gate Tests
vercel/next.js
How to use the @gate / @force-gate test directives instead of it.skip or fake-green skip patterns.
Gate on identity questions to the user. An agent skill from garrytan/gbrain.
$ npx skills add garrytan/gbrain --skill resolve-before-asking -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install garrytan/gbrain resolve-before-asking --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/resolve-before-asking .claude/skills/resolve-before-asking && 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 "resolve-before-asking" agent skill from https://github.com/garrytan/gbrain/tree/master/skills/resolve-before-asking into .claude/skills/resolve-before-asking/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "resolve-before-asking", 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/resolve-before-askingType 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 resolve-before-asking -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install garrytan/gbrain resolve-before-asking --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/resolve-before-asking .agents/skills/resolve-before-asking && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "resolve-before-asking" agent skill from https://github.com/garrytan/gbrain/tree/master/skills/resolve-before-asking into .agents/skills/resolve-before-asking/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "resolve-before-asking", 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 resolve-before-asking -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install garrytan/gbrain resolve-before-asking --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/resolve-before-asking .cursor/skills/resolve-before-asking && 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 "resolve-before-asking" agent skill from https://github.com/garrytan/gbrain/tree/master/skills/resolve-before-asking into .cursor/skills/resolve-before-asking/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "resolve-before-asking", 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/resolve-before-asking--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 resolve-before-asking -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install garrytan/gbrain resolve-before-asking --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/resolve-before-asking .gemini/skills/resolve-before-asking && 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 "resolve-before-asking" agent skill from https://github.com/garrytan/gbrain/tree/master/skills/resolve-before-asking into .gemini/skills/resolve-before-asking/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "resolve-before-asking", 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 resolve-before-askingInstalls 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 resolve-before-asking -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/resolve-before-asking .github/skills/resolve-before-asking && 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 "resolve-before-asking" agent skill from https://github.com/garrytan/gbrain/tree/master/skills/resolve-before-asking into .github/skills/resolve-before-asking/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "resolve-before-asking", 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 resolve-before-asking -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 resolve-before-asking --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/resolve-before-asking .opencode/skills/resolve-before-asking && 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 "resolve-before-asking" agent skill from https://github.com/garrytan/gbrain/tree/master/skills/resolve-before-asking into .opencode/skills/resolve-before-asking/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "resolve-before-asking", 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.
resolve-before-askingGate on identity questions to the user. An agent skill from garrytan/gbrain.
Resolve Before Asking is an agent skill from garrytan/gbrain. Gate on identity questions to the user. Before any "who is X?" (or role / relationship question) reaches the user, exhaust the brain's lookup chain: think → search + page read → mounted sources → timeline/graph → web. If escalation survives the chain, ask WITH a hypothesis, never a bare unknown. Also owns the no-placeholders-at-ingest rule: pages created during bulk ingestion get their relationship/role resolved immediately.
Its SKILL.md is about 3.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file.
The repository describes itself as: Garry's Opinionated OpenClaw/Hermes Agent Brain. The licence is MIT.
6 steps, taken from the step headings 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 no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Resolve Before Asking loads about 3.4k tokens when it runs. Until then it costs about 113 tokens; SKILL.md has 1,665 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,665 words, ~3,387 tokens.
.claude/skills/resolve-before-asking/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Convention: see conventions/brain-first.md for the base lookup chain (search → query → get_page → external APIs). This skill extends that chain one hop further, to the human boundary: asking the user is the LAST resort, after the brain AND external escalation, not a shortcut around them.
Convention: see _brain-filing-rules.md — pages touched by the ingest-resolution section file by primary subject (
people/,companies/).
Never ask the user "who is X?" when the answer already exists in the brain.
The memory answers before the human is bothered — that is the product promise. This skill defines the lookup chain that runs before any entity-identification question is sent to the user, and the escalation format when asking really is justified.
The pattern: the agent encounters an entity with a rich brain page — timeline entries, meeting history, an imported message archive — and instead of reading them, asks the user "who is X?". This is lazy escalation. It spends the user's attention on questions the system can answer itself.
Examples of the bug (anonymized):
This is a harness-routing convention, not a mechanical guarantee: route here whenever ANY of these are true —
[To be filled by content analysis] or similar
placeholder text.think — cross-brain synthesis (solves most cases)gbrain think "Who is {entity}? What is their relationship to the user? What role do they play? Use all available context — meetings, timeline, imported archives, facts."think synthesizes across ALL brain data. If the entity has a page with
imported-activity stats, timeline entries, and meeting history, think will
connect the dots. Over MCP, entity("{entity}") first gives a zero-LLM card
(aliases, last-touched, top edges); synthesize is the heavy cross-page
answer when the card isn't enough.
If this returns a clear answer → STOP. Use the answer. Do not ask the user.
search + full page readgbrain search "{entity}" --limit 5
gbrain get {entity-slug}What to look for:
relationship field in frontmatter — filled means resolved.If timeline entries repeat a consistent role → STOP. The role is obvious. Do not ask the user.
Don't hardcode channels. Check what the brain holds, then query it:
gbrain sources list
gbrain query "emails with {entity}" --limit 10
gbrain query "meetings with {entity}" --limit 5Whatever is mounted — an email archive, calendar imports, chat transcripts, meeting notes — a handful of subject lines or meeting titles usually reveals the relationship:
gbrain timeline {entity-slug} --limit 20
gbrain backlinks {entity-slug}
gbrain graph {entity-slug} --depth 2Dated events, who references this entity, and what it connects to. A person who back-links from a company page and three meeting pages is not an unknown.
Only after steps 1–4 return nothing useful. Run a generic web search on
"{entity name} {company/domain hints accumulated in steps 1-4}". Fold
anything found back into the brain page before using it (the brain-ops
read-enrich-write cycle), so the next lookup doesn't repeat the work.
Only after ALL previous steps return nothing conclusive:
Use ask-user for the choice-gate mechanics (2–4 options, escape hatch, stop the turn).
think/synthesize gives a clear answer,
OR 3+ timeline entries carry a consistent role description, OR the page's
relationship field is filled.There is no third state. Either the brain answered (use it) or it didn't (finish the chain, then ask with a hypothesis).
When ANY ingestion pipeline (email import, calendar enrichment, chat transcripts, meeting ingestion) creates or significantly updates a person or company page, resolve the entity's identity and relationship immediately — never leave placeholder text. Pages like
[To be filled by content analysis]> Contact from the user's personal network.## Context sectionare bugs, especially when the ingestion batch itself contains hundreds of signals about who the person is. Run this as a post-ingestion pass over every page the batch created or updated:
[To be filled, Unknown relationship, TBD). No placeholders AND
relationship filled → skip, already resolved.think needs).put_page): fill the relationship frontmatter
field, replace the placeholder description with a real one-liner, update
the ## Context or intro paragraph.Before running the chain, the sender's domain often seeds the hypothesis:
| Domain shape | Hypothesis |
|---|---|
@acme-example.com — a company already in the brain | Likely acme-example employee. Confirm against the company page + shared meetings, then fill. |
| Corporate domain NOT in the brain | New company. Run the chain; consider seeding a companies/ page. |
| Personal domain (gmail, etc.) | No shortcut — run the full chain. |
A resolved page passes this test: if the user encounters the name in a briefing, triage, or meeting prep, the page's first line says who they are WITHOUT the user needing to ask.
> Contact from the user's personal network.> Operations lead at acme-example — handles invoicing and vendor onboarding for the user.This skill guarantees:
writes_to: directories, filed by primary
subject per _brain-filing-rules.md.Two possible outputs:
(a) Resolved silently — the identity is used in the current flow; if a
page had a placeholder, it is filled (put_page) as a side effect. No message
to the user about the lookup.
(b) Escalation with a hypothesis — formatted per the ask-user choice gate:
🔀 **Is {entity} the {best guess}?**
Searched: think, search + page read, mounted sources, timeline/graph, web.
Found: recurring invoices from @widget-co.com; two meetings alongside the
acme-example team. Nothing names their role directly.
1. **Confirm** — {entity} is {best guess}
2. **Correct me** — it's someone else (tell me who)
3. **Skip** — leave unresolved for nowAfter emitting the gate, stop the turn (see ask-user).
Follow the agent operator protocol for any gbrain error code, exit code, [AGENT] block or notice block. Specific to this skill:
get_page returns page_not_found for a guessed slug: try title and alias search before concluding the entity is unknown.revision_conflict: re-read and merge.[To be filled by content analysis] on a page whose ingestion
batch carried hundreds of signals.jane@acme-example.com).memory_search for entity lookups — memory tools search session
notes, not the brain knowledge graph; brain-first.md bans this. Use
search / query / entity.search hit count as chain-complete — read the page;
run query for synonym phrasings before concluding "not in the brain".Would the user look at this person's brain page — the imported archive, the employer-revealing email domain, the timeline entries all repeating the same role — and think it was reasonable that the agent asked who this person is?
If the answer is no, the chain wasn't run. Run it.
© garrytan, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in skills/resolve-before-asking of garrytan/gbrain.
Open the folder on GitHubat commit fc54831
Resolve Before Asking 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 |
|---|---|---|---|---|---|---|
| Resolve Before Asking this skillgarrytan/gbrain | 31k | — | ~3.4k | Automated safety check: Pass | MIT | |
| Gate Testsvercel/next.js | 143k | — | ~2.7k | Automated safety check: Pass | MIT | |
| PR Feedback Quality Gatenexu-io/open-design | 100k | — | ~572 | Automated safety check: Pass | Apache-2.0 | |
| Ask Advisor RoutingYeachan-Heo/oh-my-claudecode | 40k | — | ~572 | Automated safety check: Pass | MIT | |
| Gateplugin87/ux-ui-agent-skills | 1.6k | — | ~532 | Automated safety check: Pass | MIT | |
| AskSeemSeam/claude_codex_bridge | 3.6k | — | ~1.2k | Automated safety check: Pass | Custom licence |
vercel/next.js
How to use the @gate / @force-gate test directives instead of it.skip or fake-green skip patterns.
nexu-io/open-design
Safely track pull request feedback, resolve review comments or merge conflicts, validate fixes, and use a read-only cross-review before committing or pushing follow-up changes.
Yeachan-Heo/oh-my-claudecode
Sends a question or task to another locally installed agent CLI, such as Codex or Gemini, through omc ask and saves the answer as a file.
plugin87/ux-ui-agent-skills
Run the one-command quality gate and report the real N/N result.
SeemSeam/claude_codex_bridge
Delegate work or request information from another CCB-managed agent using ask.
SeemSeam/claude_codex_bridge
Send a request to another CCB agent with ask. An agent skill from SeemSeam/claude_codex_bridge.
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.
Gate on identity questions to the user. An agent skill from garrytan/gbrain. Resolve Before Asking is an agent skill from garrytan/gbrain. Gate on identity questions to the user.
Run `npx skills add garrytan/gbrain --skill resolve-before-asking -a claude-code`. Or copy the skill folder (skills/resolve-before-asking in garrytan/gbrain) into .claude/skills/resolve-before-asking in your project. Claude Code loads it when a task matches its description.
Run `npx skills add garrytan/gbrain --skill resolve-before-asking -a codex`. Or copy the skill folder (skills/resolve-before-asking in garrytan/gbrain) into .agents/skills/resolve-before-asking 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 resolve-before-asking -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/resolve-before-asking, .gemini/skills/resolve-before-asking, .github/skills/resolve-before-asking and .opencode/skills/resolve-before-asking in your project.
SKILL.md names no scripts, command-line tools or credentials: Resolve Before Asking is instructions for the agent only.
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.
Resolve Before Asking is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.4k tokens (SKILL.md is roughly 14k 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 Resolve Before Asking: Gate Tests (vercel/next.js, 143k stars), PR Feedback Quality Gate (nexu-io/open-design, 100k stars), Ask Advisor Routing (Yeachan-Heo/oh-my-claudecode, 40k stars) and Gate (plugin87/ux-ui-agent-skills, 1.6k 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.