Docs Governance
affaan-m/ECC
Route broad documentation-governance requests to existing ECC skills and run an opt-in, read-only audit of mapped documentation roles, links, ADR indexes, and evidence references.
Call a government service counter to find out exactly what a person must bring before they travel there, and return it as a validated checklist.
$ npx skills add CALLE-AI/awesome-phone-call-agents --skill countercall -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install CALLE-AI/awesome-phone-call-agents countercall --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/CALLE-AI/awesome-phone-call-agents.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/countercall .claude/skills/countercall && 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 "countercall" agent skill from https://github.com/CALLE-AI/awesome-phone-call-agents/tree/main/skills/countercall into .claude/skills/countercall/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "countercall", 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/CALLE-AI/awesome-phone-call-agents/tree/main/skills/countercallType 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 CALLE-AI/awesome-phone-call-agents --skill countercall -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install CALLE-AI/awesome-phone-call-agents countercall --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/CALLE-AI/awesome-phone-call-agents.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/countercall .agents/skills/countercall && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "countercall" agent skill from https://github.com/CALLE-AI/awesome-phone-call-agents/tree/main/skills/countercall into .agents/skills/countercall/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "countercall", 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 CALLE-AI/awesome-phone-call-agents --skill countercall -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install CALLE-AI/awesome-phone-call-agents countercall --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/CALLE-AI/awesome-phone-call-agents.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/countercall .cursor/skills/countercall && 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 "countercall" agent skill from https://github.com/CALLE-AI/awesome-phone-call-agents/tree/main/skills/countercall into .cursor/skills/countercall/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "countercall", 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/CALLE-AI/awesome-phone-call-agents.git --path skills/countercall--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 CALLE-AI/awesome-phone-call-agents --skill countercall -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install CALLE-AI/awesome-phone-call-agents countercall --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/CALLE-AI/awesome-phone-call-agents.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/countercall .gemini/skills/countercall && 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 "countercall" agent skill from https://github.com/CALLE-AI/awesome-phone-call-agents/tree/main/skills/countercall into .gemini/skills/countercall/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "countercall", 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 CALLE-AI/awesome-phone-call-agents countercallInstalls 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 CALLE-AI/awesome-phone-call-agents --skill countercall -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/CALLE-AI/awesome-phone-call-agents.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/countercall .github/skills/countercall && 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 "countercall" agent skill from https://github.com/CALLE-AI/awesome-phone-call-agents/tree/main/skills/countercall into .github/skills/countercall/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "countercall", 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 CALLE-AI/awesome-phone-call-agents --skill countercall -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install CALLE-AI/awesome-phone-call-agents countercall --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/CALLE-AI/awesome-phone-call-agents.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/countercall .opencode/skills/countercall && 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 "countercall" agent skill from https://github.com/CALLE-AI/awesome-phone-call-agents/tree/main/skills/countercall into .opencode/skills/countercall/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "countercall", 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.
countercallCall a government service counter to find out exactly what a person must bring before they travel there, and return it as a validated checklist.
Countercall is an agent skill from CALLE-AI/awesome-phone-call-agents. Call a government service counter to find out exactly what a person must bring before they travel there, and return it as a validated checklist. Use when published requirements are incomplete or contradicted at the window and the only reliable source is the office's phone line. Returns required documents, total fee, payment method, whether an appointment is needed, and how certain the clerk sounded.
Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 13 other files, including scripts and reference files (for example `data/offices.json`, `references/examples.md` and `references/result-contract.md`).
The repository describes itself as: Portable phone-call Agent Skills, apps, examples, adapters, and scheduler recipes for AI agents. The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 38d4118. 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.
Ships 6 files in scripts/ (JavaScript), which the agent can run.
Shell commands in SKILL.md call:
nodeFrom 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:
CALLE_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Countercall loads about 3k tokens when it runs, and up to ~6.3k if it reads all its reference files. Until then it costs about 104 tokens; SKILL.md has 1,644 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); the scripts in this folder are not scanned.
The full file from CALLE-AI/awesome-phone-call-agents at commit 38d4118, republished under its MIT licence (© CALLE-AI). 1,644 words, ~2,954 tokens.
.claude/skills/countercall/SKILL.md (or your agent's skills folder). This skill also uses 10 other files; get the full folder from GitHub.Pak Yanto took the morning off work, rode forty minutes to the Samsat counter, and was turned away because his photocopy was folio instead of A4. He lost a day's income, and he still did not know what else was missing for tomorrow.
Public service counters publish requirement lists that are incomplete, outdated, or quietly contradicted at the window. The one reliable source is the office's phone line, and that line is busy, IVR-gated, and answered on the fourth try. So people do not call. They travel, they queue, and they get turned away over one document.
This skill makes the call instead, and returns a checklist the person can screenshot and take with them.
It is a good fit for CALL-E's design: low-frequency, personal, high-stakes phone work against a number that a human would otherwise have to redial all morning.
This skill places a real phone call to a real public office. Confirm with the user:
Never infer a phone number. Not from a directory, not from a similar office, not by guessing a country code. A number enters the flow only when a human has read it off the office's own published page. Calling the wrong number means an automated caller reaches a stranger, which is the worst thing this skill can do.
This skill gathers counter requirements only.
call.mjs --live and bench.mjs --live will dial at any time
of day. Checking the office's hours before either is the operator's job.Read references/safety.md before adapting this skill to a new institution. Some callees
are not appropriate targets for an automated caller at all.
Most call skills return prose and let the reader interpret it. This one returns a pinned, validated object, and refuses to return anything else.
The pinned result_schema sets additionalProperties: false and constrains four fields to
enumerations — payment_method, appointment_required, originals_or_copies and
clerk_certainty, each of which includes a value for "the clerk did not know". If the call comes back shaped differently, the result is quarantined rather
than rendered. A half-parsed checklist is worse than no checklist, because the user acts
on it.
The full contract is in references/result-contract.md.
Required: the procedure name, the office name, the office's phone number in E.164, and the published source URL the number came from.
Validate the number before anything else happens. E.164 is a plus, a non-zero country
code digit, then 7 to 14 more digits: ^\+[1-9]\d{7,14}$. Reject anything else and ask the
user. Never guess a country code. A local-format number reaching the dialler is how the
wrong person gets called.
Run scripts/preflight.mjs to check the number and the contract without dialling.
There are two ways to reach CALL-E, and scripts/transport.mjs picks between them. Both
place a real outbound call and both return the same validated shape, so nothing above the
transport changes.
| needs | who owns the schema | |
|---|---|---|
calls (default) | CALLE_API_KEY | you do — it ships with the request as result_schema |
goals | CALLE_API_KEY + COUNTERCALL_GOAL_ID | the published Goal |
selectTransport() uses goals when COUNTERCALL_GOAL_ID is set and calls otherwise.
COUNTERCALL_TRANSPORT=goals|calls forces one, and an unrecognised value throws rather than
falling back — a typo must not silently dial on a path nobody chose.
Why calls is the default. Publishing a Goal is only possible inside CALL-E Chat: there
is no POST /v1/goals, no MCP publish tool, and no action on the Goal detail page. That makes
the Goals path dependent on a surface you may not be able to reach — during the 2026-09-02
CALL-E login suspension it was reachable by nobody. The Calls transport needs one credential
and works regardless.
On calls, drift is impossible by construction. resultSchemaJSON() generates the
request-scoped schema from the same CONTRACT object that validateResult checks the reply
against, so the two cannot disagree. There is nothing to compare.
On goals, compare before every run. The published Goal owns the schema, so it can move
underneath you:
import { diffContract, publishedRunSpec } from './scripts/_lib.mjs';
const goal = await client.goals.get(GOAL_ID);
const drift = diffContract(PINNED_CONTRACT, publishedRunSpec(goal));
if (drift.length) throw new ContractDrift(drift); // refuse to dialUse the publishedRunSpec(goal) helper, not goal.published_run_spec directly. The wire
format and the docs spell it published_run_spec.result_schema; the TypeScript SDK camelCases
it to publishedRunSpec.resultSchema. Reading only the documented name against the TS client
returns undefined rather than throwing — the guard then concludes "no published spec" and
refuses every single dial while looking like it is working. The helper reads both spellings.
This cost us a day; it is written up in FEEDBACK.md at the repo root.
The CALL-E documentation recommends this comparison before deploying a variable change. Doing it on every run costs one API call and converts a silent failure into a loud refusal. Dialling a real person with a stale schema produces a result that looks fine and is quietly wrong.
transport.run(...) — goals.run or calls.create depending on the transport — always with
an Idempotency-Key scoped to office, procedure and date, so a retry never double-dials a
public line:
countercall:{office}:{procedure}:{yyyy-mm-dd}:v1goals.waitForResult has one completion rule: stop when either result or error is
non-null. A completed call can briefly return both null while CALL-E parses the structured
result, so do not treat that window as a failure.
calls.waitForResult returns a terminal CallTask instead, and normaliseCall() folds it
onto the same shape. One case there is worth knowing: status: "completed" with
structuredResult: null means the call connected but the evidence could not satisfy the
schema. That is terminal — it becomes result_unextractable, never an empty card. Handing a
null result upward would make the renderer decide what a missing checklist means, and the only
safe answer is to render nothing.
All eight published GoalRunError codes route to a distinct outcome. The set below is the
one scripts/render.mjs implements — keep them in step if CALL-E adds a code.
| Outcome | What the user sees |
|---|---|
| valid result | the checklist, with the clerk's verbatim line and the source URL |
no_answer | "the line did not answer". No checklist |
declined | "the office declined to answer an automated caller". No checklist |
result_invalid | the call completed but the answer did not match the contract. Quarantined |
result_unavailable | the call completed but produced no structured answer. No checklist |
result_failed | the answer could not be processed into a checklist. No checklist |
timed_out | "no usable answer" before the deadline. No checklist |
call_failed | the call could not be completed. No checklist |
canceled | cancelled before it produced an answer. No checklist |
No branch renders a partial checklist. Worked examples of each are in
references/examples.md.
scripts/call.mjs is dry-run by default. It prints the exact request it would send and
places no call. Dialling requires an explicit --live:
# dry run — prints the request it would send, dials nothing, needs no credentials
node scripts/call.mjs --office <id> --procedure "<procedure>"
# actually rings a phone
node scripts/call.mjs --office <id> --procedure "<procedure>" --liveA skill that dials by default is a skill that dials by accident.
data/offices.json ships with its phone number masked (+62XXXXXXXXXX), so the seeded
entry cannot dial and every command against it exits 3 with REFUSING TO DIAL. That is
deliberate: a number enters the file only when a human has read it off the office's own
published page and recorded source_url and source_checked. Add your own entry before
running anything.
To see the dry-run output immediately, the test fixture carries a valid fictional number:
node scripts/call.mjs --offices ../../test/fixtures/offices.test.json \
--office fixture-sourced --procedure "perpanjangan paspor"© CALLE-AI, 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 10 other files (scripts, references) in skills/countercall of CALLE-AI/awesome-phone-call-agents.
Open the folder on GitHubat commit 38d4118
Countercall 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 |
|---|---|---|---|---|---|---|
| Countercall this skillCALLE-AI/awesome-phone-call-agents | 107 | — | ~3k | Automated safety check: Pass | MIT | |
| Docs Governanceaffaan-m/ECC | 277k | — | ~1.1k | Automated safety check: Pass | MIT | |
| Board Governancesickn33/agentic-awesome-skills | 47k | 1 repos | ~4.1k | Automated safety check: Pass | MIT | |
| Agent Governancegithub/awesome-copilot | 40k | 2 repos | ~4.6k | Automated safety check: Pass | MIT | |
| Model Registry Governancesickn33/agentic-awesome-skills | 47k | 2 repos | ~3.9k | Automated safety check: Pass | MIT | |
| Protect MCP Governancesickn33/agentic-awesome-skills | 47k | 2 repos | ~2.3k | Automated safety check: Pass | MIT |
affaan-m/ECC
Route broad documentation-governance requests to existing ECC skills and run an opt-in, read-only audit of mapped documentation roles, links, ADR indexes, and evidence references.
sickn33/agentic-awesome-skills
Board and governance register: meeting date, agenda, decision, resolution number, vote result, action owner and due date.
github/awesome-copilot
Patterns and techniques for adding governance, safety, and trust controls to AI agent systems.
sickn33/agentic-awesome-skills
Establish model registry standards, governance controls, metadata schemas, approvals, and lifecycle policies for enterprise AI deployments.
sickn33/agentic-awesome-skills
Agent governance skill for MCP tool calls — Cedar policy authoring, shadow-to-enforce rollout, and Ed25519 receipt verification.
affaan-m/ECC
Keep a long-lived project's documentation from rotting by assigning existing project docs clear constitution, map, status, and history roles, then wiring the active agent harness to those canonical…
CALLE-AI/awesome-phone-call-agents
Demonstrates advisory accessibility-planning checks with offline fixtures and a proposed bounded CALL-E workflow; use for exploring unknown or qualified venue claims without making calls.
CALLE-AI/awesome-phone-call-agents
A skill your agent uses when an agent holds some evidence for a physical-world claim but the evidence is broader, narrower, or older than the exact question asked, and it must first decide whether a…
CALLE-AI/awesome-phone-call-agents
Call a venue and ask the accessibility questions that matter to one specific person — step-free entry, hearing loop, guide dogs, quiet hours, changing places — then return a per-need verdict backed…
CALLE-AI/awesome-phone-call-agents
Turns a pre-written, building-level location config into a CALL-E outbound phone-call task that guides a delivery driver through the last few hundred metres to a specific building using landmarks…
CALLE-AI/awesome-phone-call-agents
Turn cited business research into a bounded, approval-gated phone-call plan that asks only unresolved factual questions, then reconcile CALL-E-compatible results without treating voicemail, refusal…
CALLE-AI/awesome-phone-call-agents
Place a goal-driven CALL-E call that collects specific structured answers, score those answers against a deterministic rubric you supply, and conditionally trigger a follow-up action — all runnable…
Call a government service counter to find out exactly what a person must bring before they travel there, and return it as a validated checklist. Countercall is an agent skill from CALLE-AI/awesome-phone-call-agents. Call a government service counter to find out exactly what a person must bring before they travel there, and return it as a validated checklist.
Countercall fits situations like: published requirements are incomplete; contradicted at the window and the only reliable source is the offices phone line.
Run `npx skills add CALLE-AI/awesome-phone-call-agents --skill countercall -a claude-code`. Or copy the skill folder (skills/countercall in CALLE-AI/awesome-phone-call-agents) into .claude/skills/countercall in your project. Claude Code loads it when a task matches its description.
Run `npx skills add CALLE-AI/awesome-phone-call-agents --skill countercall -a codex`. Or copy the skill folder (skills/countercall in CALLE-AI/awesome-phone-call-agents) into .agents/skills/countercall 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 CALLE-AI/awesome-phone-call-agents --skill countercall -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/countercall, .gemini/skills/countercall, .github/skills/countercall and .opencode/skills/countercall in your project.
Going by SKILL.md and its folder, Countercall needs JavaScript for the scripts in its folder, the command-line tools its instructions call (node) and credentials named CALLE_API_KEY. Our summary lists: Node.js; A credential in CALLE_API_KEY.
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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Countercall is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 3k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 3.3k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Countercall: Docs Governance (affaan-m/ECC, 277k stars), Board Governance (sickn33/agentic-awesome-skills, 47k stars), Agent Governance (github/awesome-copilot, 40k stars) and Model Registry Governance (sickn33/agentic-awesome-skills, 47k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
CALLE-AI (a GitHub organization) maintains it in CALLE-AI/awesome-phone-call-agents, which has 107 GitHub stars. The repository holds 101 skills in this directory. The repository was last updated on October 10, 2026.
Source: CALLE-AI/awesome-phone-call-agents on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.