Not in the top 1,000 by GitHub stars
radres/call-me
Let your AI agents call and text your actual phone (iPhone or Android) — Claude Code plugin + agent skill
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
claude-code/skills/call-me/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 236ad5d21e4a
No earlier version was observed for comparison.
grok/skills/call-me/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 236ad5d21e4a
No earlier version was observed for comparison.
plugin/skills/call-me/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 236ad5d21e4a
No earlier version was observed for comparison.
skill/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 236ad5d21e4a
No earlier version was observed for comparison.
Verified commit 236ad5d21e4af5f3ebddb6e53f90cfd047248346
git clone --filter=blob:none --no-checkout https://github.com/radres/call-me.git .hotskills/radres-call-me && git -C .hotskills/radres-call-me checkout --detach 236ad5d21e4af5f3ebddb6e53f90cfd047248346
# Copy each selected skill directory from .hotskills/radres-call-me into .claude/skills/<skill-name>/git clone --filter=blob:none --no-checkout https://github.com/radres/call-me.git .hotskills/radres-call-me && git -C .hotskills/radres-call-me checkout --detach 236ad5d21e4af5f3ebddb6e53f90cfd047248346
# Copy each selected skill directory from .hotskills/radres-call-me into .gemini/skills/<skill-name>/Heat
Insufficient historyNot enough history yet to measure heat. It appears after a few days of data.
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
How it works
call-me
When your agent uses it
Call or text your human's actual phone (iPhone or Android) and handle replies from the /call-me app. Use when the user says "call me", "ring me", "phone me if something comes up", "text my phone", asks the agent to stay reachable, wants something read out loud (an update, a summary of the day ahead), or sends an inbound /call-me message or voicemail. The phone rings through CallKit, spoken answers return as transcripts, and channel-enabled hosts deliver later messages directly into the active agent session.
What it loads into context
Frontmatter
118 tokensAlways available to the agent
SKILL.md
4,592 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- First setup and saved pairing
- Is the human set up yet?
- Inbound messages
- CLI setup (when no channel is present)
- Ask for input — text first, call if no answer (THE main move)
- Read something out — not every call is a question
- Conversations — keep the line open
- Text — non-blocking notification
- Title the thread
- Manual listen fallback
- Etiquette (important)
Scripts executed separately
../../dist/channel.mjsaiphonecallme
Files
../../../.claude-plugin/marketplace.jsonasset459 bytes../../.claude-plugin/icon.pngasset162,818 bytes../../.claude-plugin/plugin.jsonasset1,537 bytes../../.mcp.jsonasset231 bytes../../dist/channel.mjsruns271,848 bytes../../hooks/hooks.jsonasset850 bytes../../hooks/hooks.jsonasset850 bytes../../hooks/hooks.jsonasset850 bytes../../hooks/hooks.jsonasset850 bytes../../monitors/monitors.jsonasset502 bytes../../monitors/monitors.jsonasset502 bytes../../monitors/monitors.jsonasset502 bytesSKILL.mdcore18,814 bytesSKILL.mdcore18,814 bytesSKILL.mdcore18,814 bytesSKILL.mdcore18,814 bytesSKILL.mdcore18,814 bytesagents/openai.yamlasset184 bytesaiphoneruns23,535 bytescallmeruns23,535 bytes
Read SKILL.md
# /call-me — call your human
Use english always, test to speech always expects english
Your human's iPhone or Android phone runs the /call-me app. It gave them a **user number**
(10 digits, e.g. `584-158-6160`) — that's all you need to ring their actual
phone and get a spoken answer.
## First setup and saved pairing
When pairing is missing, always show a clickable link:
[Download Call Me from the App Store](https://apps.apple.com/app/call-me/id6789575165)
on an iPhone, or [get it on Google Play](https://play.google.com/store/apps/details?id=com.serdaroztetik.callmeai) on Android.
Tell the user to open **My Number** in the app. Never show only the app name orView the complete source on GitHubcall-me
When your agent uses it
Reach the user on their phone through Call Me when you need a decision or an answer and they may be away from the keyboard, or when they asked to be told that a long task finished.
What it loads into context
Frontmatter
46 tokensAlways available to the agent
SKILL.md
333 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use it
- How
- The number
Files
SKILL.mdcore1,344 bytes
Read SKILL.md
# Call Me
The `callmemcp` MCP server reaches the user on their phone (iPhone or Android).
## When to use it
- You are blocked on a decision only the user can make.
- A long task finished or failed and the user asked to hear about it.
- The user asked you to call or text them.
## How
- Text first with `text`, then wait with `wait_for_reply`.
- Use `call` when the answer is blocking or time-sensitive. It reads your textView the complete source on GitHubcall-me
When your agent uses it
Ring the user's phone with a question and get their spoken answer back as text, or send them a text, through the Call Me MCP server. Use when the user says "call me", "ring me", "text my phone", "phone me if something comes up", asks you to keep working while they are away from the keyboard, or when a long task is blocked on a decision only they can make.
What it loads into context
Frontmatter
93 tokensAlways available to the agent
SKILL.md
879 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- The number
- Asking a question
- Texting
- Etiquette
Files
SKILL.mdcore3,421 bytes
Read SKILL.md
# Call Me
Call Me is a voice relay, not a voice assistant. You do all the thinking. Call
Me rings the user's phone, reads your text aloud word for word, and hands
their spoken reply back to you as text. The text can be a question, a status
update or a summary of the day ahead. Use it to keep a task moving while the user is
driving, at the gym or away from the desk.
The tools come from the `call-me` MCP server in this plugin: `call`,
`poll_result`, `text`, `wait_for_reply`, `set_thread_title` and `setup`.
## The number
Every `call` and `text` needs `to`: the 10-digit number the Call Me appView the complete source on GitHubcall-me
When your agent uses it
Call or text your human's actual phone (iPhone or Android) and handle replies from the /call-me app. Use when the user says "call me", "ring me", "phone me if something comes up", "text my phone", asks the agent to stay reachable, wants something read out loud (an update, a summary of the day ahead), or sends an inbound /call-me message or voicemail. The phone rings through CallKit, spoken answers return as transcripts, and channel-enabled hosts deliver later messages directly into the active agent session.
What it loads into context
Frontmatter
118 tokensAlways available to the agent
SKILL.md
4,592 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- First setup and saved pairing
- Is the human set up yet?
- Inbound messages
- CLI setup (when no channel is present)
- Ask for input — text first, call if no answer (THE main move)
- Read something out — not every call is a question
- Conversations — keep the line open
- Text — non-blocking notification
- Title the thread
- Manual listen fallback
- Etiquette (important)
Scripts executed separately
aiphonecallme
Files
SKILL.mdcore18,814 bytesSKILL.mdcore18,814 bytesSKILL.mdcore18,814 bytesSKILL.mdcore18,814 bytesSKILL.mdcore18,814 bytesagents/openai.yamlasset184 bytesaiphoneruns23,535 bytescallmeruns23,535 bytes
Read SKILL.md
# /call-me — call your human
Use english always, test to speech always expects english
Your human's iPhone or Android phone runs the /call-me app. It gave them a **user number**
(10 digits, e.g. `584-158-6160`) — that's all you need to ring their actual
phone and get a spoken answer.
## First setup and saved pairing
When pairing is missing, always show a clickable link:
[Download Call Me from the App Store](https://apps.apple.com/app/call-me/id6789575165)
on an iPhone, or [get it on Google Play](https://play.google.com/store/apps/details?id=com.serdaroztetik.callmeai) on Android.
Tell the user to open **My Number** in the app. Never show only the app name orView the complete source on GitHubSkills included
- call-me
- call-me
- call-me
- call-me
Repository facts
- License
- MIT
- Created
- Jul 10, 2026
- Last pushed
- Nov 5, 2026
- Forks
- 7
- Open issues
- 1
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 6, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 31 notes
claude-code/dist/channel.mjs:2Analysis incomplete: physical or joined line exceeds character limitclaude-code/dist/channel.mjs:1Analysis incomplete: physical or joined line exceeds character limitclaude-code/dist/channel.mjs:3Analysis incomplete: physical or joined line exceeds character limitclaude-code/dist/channel.mjs:6Analysis incomplete: physical or joined line exceeds character limitclaude-code/dist/channel.mjs:4Analysis incomplete: physical or joined line exceeds character limitclaude-code/dist/channel.mjs:5Analysis incomplete: physical or joined line exceeds character limitclaude-code/dist/channel.mjs:9[Credential-related source omitted]claude-code/dist/channel.mjs:7Analysis incomplete: physical or joined line exceeds character limitclaude-code/dist/channel.mjs:8Analysis incomplete: physical or joined line exceeds character limitclaude-code/dist/channel.mjs:11Analysis incomplete: physical or joined line exceeds character limitclaude-code/dist/channel.mjs:10Analysis incomplete: physical or joined line exceeds character limitclaude-code/dist/channel.mjs:70Analysis incomplete: physical or joined line exceeds character limitclaude-code/dist/channel.mjs:72[Credential-related source omitted]claude-code/dist/channel.mjs:76[Credential-related source omitted]claude-code/dist/channel.mjs:74Analysis incomplete: physical or joined line exceeds character limitclaude-code/dist/channel.mjs:75Analysis incomplete: physical or joined line exceeds character limitclaude-code/hooks/hooks.json:1Analysis incomplete: Referenced executable target unavailable; not analyzedclaude-code/hooks/hooks.json:1Analysis incomplete: Referenced executable target unavailable; not analyzedclaude-code/hooks/hooks.json:1Analysis incomplete: Referenced executable target unavailable; not analyzedclaude-code/monitors/monitors.json:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 8 dangerous shell commandsin 4 files: call-me/aiphone:137 call-me/callme:137 skill/aiphone:137 and 1 more
- 170 network referencesin 10 files: call-me/aiphone:2 call-me/callme:2 skill/aiphone:2 and 7 more
- 12 obfuscation signalsin 1 file: claude-code/dist/channel.mjs:2
- No instruction overrides
- 5 executable scriptsin 5 files: claude-code/dist/channel.mjs:1 call-me/aiphone:1 call-me/callme:1 and 2 more
- No access to secrets
- No requests to vote in Hot
Show all 195 signals by file
.claude-plugin/marketplace.json
claude-code/.claude-plugin/plugin.json
- Network accessline 1
{ "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", - Network accessline 2
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", - Network accessline 9
"email": "info@callmemcp.com" }, "homepage": "https://callmemcp.com/", - Network accessline 10
}, "homepage": "https://callmemcp.com/", "repository": "https://github.com/radres/call-me", - Network accessline 11
"homepage": "https://callmemcp.com/", - Network accessline 12
"repository": "https://github.com/radres/call-me", - Network accessline 13
"icon": "./.claude-plugin/icon.png", "documentationUrl": "https://github.com/radres/call-me#readme", "supportUrl": "https://github.com/radres/call-me/issues", - Network accessline 14
"documentationUrl": "https://github.com/radres/call-me#readme", - Network accessline 15
"supportUrl": "https://github.com/radres/call-me/issues", - Network accessline 16
"privacyPolicyUrl": "https://callmemcp.com/privacy", - Network accessline 17
"termsOfServiceUrl": "https://callmemcp.com/terms",
claude-code/dist/channel.mjs
- Executable scriptline 1
#!/usr/bin/env node - Possible obfuscationline 2
var vg=Object.create;var os=Object.defineProperty;var bg=Object.getOwnPropertyDescriptor;var $g=Object.getOwnPropertyNames;var wg=Object.getPrototypeOf,xg=Object.prototype.hasOwnProperty;var b=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t. - Possible obfuscationline 3
`:""},this._extScope=t,this._scope=new Me.Scope({parent:t}),this._nodes=[new ki]}toString(){return this._root.render(this.opts)}name(t){return this._scope.name(t)}scopeName(t){return this._extScope.name(t)}scopeValue(t,r){let o=this._extSco - Possible obfuscationline 6
|| ${i} === "boolean" || ${n} === null`).assign(a,(0,I._)`[${n}]`)}}}function Fv({gen:e,parentData:t,parentDataProperty:r},o){e.if((0,I._)`${t} !== undefined`,()=>e.assign((0,I._)`${t}[${r}]`,o))}function qi(e,t,r,o=tr.Correct){let n=o===tr - Possible obfuscationline 9
[Credential-related source omitted] - Possible obfuscationline 10
`).filter(i=>i),n=Math.min(...o.map(i=>i.length-i.trimStart().length)),s=o.map(i=>i.slice(n)).map(i=>" ".repeat(this.indent*2)+i);for(let i of s)this.content.push(i)}compile(){let t=Function,r=this?.args,n=[...(this?.content??[""]).map(s=>` - Network accessline 11
`))}};var Nu={major:4,minor:4,patch:3};var K=g("$ZodType",(e,t)=>{var r;e??(e={}),e._zod.def=t,e._zod.bag=e._zod.bag||{},e._zod.version=Nu;let o=[...e._zod.def.checks??[]];e._zod.traits.has("$ZodCheck")&&o.unshift(e);for(let n of o)for(let - Possible obfuscationline 11
`))}};var Nu={major:4,minor:4,patch:3};var K=g("$ZodType",(e,t)=>{var r;e??(e={}),e._zod.def=t,e._zod.bag=e._zod.bag||{},e._zod.version=Nu;let o=[...e._zod.def.checks??[]];e._zod.traits.has("$ZodCheck")&&o.unshift(e);for(let n of o)for(let - Possible obfuscationline 70
`)}f.write("payload.value = newResult;"),f.write("return payload;");let P=f.compile();return(x,k)=>P(p,x,k)},s,i=xt,a=!Lt.jitless,u=a&&cs.value,l=t.catchall,d;e._zod.parse=(p,f)=>{d??(d=o.value);let m=p.value;return i(m)?a&&u&&f?.async===!1 - Network accessline 72
[Credential-related source omitted] - Possible obfuscationline 72
[Credential-related source omitted] - Possible obfuscationline 73
`);if(t===-1)return null;let r=this._buffer.toString("utf8",0,t).replace(/\r$/,"");return this._buffer=this._buffer.subarray(t+1),Gz(r)}clear(){this._buffer=void 0}};function Gz(e){return Op.parse(JSON.parse(e))}function Ah(e){return JSON.s - Possible obfuscationline 74
`}var Gn=class{constructor(t=Ch.stdin,r=Ch.stdout){this._stdin=t,this._stdout=r,this._readBuffer=new Bn,this._started=!1,this._ondata=o=>{this._readBuffer.append(o),this.processReadBuffer()},this._onerror=o=>{this.onerror?.(o)}}async start( - Network accessline 75
`,{mode:384}),!0}catch{return!1}}function fc(){return process.env.CALLME_CHANNEL_PUSH==="0"?!1:process.env.CALLME_CHANNEL_PUSH==="1"?!0:Yn()?.channel_push===!0}function Gh(e){return Je(Se(),`claude-chanclaim-${e}.json`)}function mc(e){retur - Network accessline 76
[Credential-related source omitted] - Possible obfuscationline 76
[Credential-related source omitted] - Network accessline 80
[Credential-related source omitted] - Possible obfuscationline 80
[Credential-related source omitted]
claude-code/skills/call-me/SKILL.md
- Network accessline 16
When pairing is missing, always show a clickable link: [Download Call Me from the App Store](https://apps.apple.com/app/call-me/id6789575165) - Network accessline 17
[Download Call Me from the App Store](https://apps.apple.com/app/call-me/id6789575165) - Network accessline 18
on an iPhone, or [get it on Google Play](https://play.google.com/store/apps/details?id=com.serdaroztetik.callmeai) on Android. - Network accessline 43
CALLME_TO=$(jq -r .user_number ~/.aiphone/config.json) curl -sS https://callmemcp.com/ring \ - Network accessline 44
curl -sS https://callmemcp.com/ring \ - Network accessline 46
-d "$(jq -nc --arg to "$CALLME_TO" --arg text "Should I deploy to prod?" \ - Network accessline 122
1. They install [Call Me from the App Store](https://apps.apple.com/app/call-me/id6789575165) - Network accessline 123
(iPhone) or [Google Play](https://play.google.com/store/apps/details?id=com.serdaroztetik.callmeai) (Android).
claude-code/skills/call-me/aiphone
- Executable scriptline 1
#!/usr/bin/env bash - Network accessline 2
# callme — call/text your human's phone from an AI session. bash + curl only. - Network accessline 6
API="${AIPHONE_API:-https://callmemcp.com/aiphone}" - Network accessline 42
need_jq() { command -v jq >/dev/null || { echo "callme needs jq (https://jqlang.github.io/jq/download/)" >&2; exit 2; }; } - Network accessline 73
Download Call Me from the App Store: https://apps.apple.com/app/call-me/id6789575165 - Network accessline 74
On Android, get it on Google Play: https://play.google.com/store/apps/details?id=com.serdaroztetik.callmeai - Dangerous shell operationline 137
rm -f "$USER_CONF" - Network accessline 251
APPSTORE_URL='https://apps.apple.com/app/id6789575165' - Network accessline 317
} }' <<< "$QR_MATRIX" echo "$APPSTORE_URL" - Network accessline 318
}' <<< "$QR_MATRIX" echo "$APPSTORE_URL" } - Network accessline 319
echo "$APPSTORE_URL" - Network accessline 356
1. Download Call Me from the App Store: https://apps.apple.com/app/call-me/id6789575165 - Network accessline 357
https://apps.apple.com/app/call-me/id6789575165 - Network accessline 364
On Android, get it on Google Play instead: https://play.google.com/store/apps/details?id=com.serdaroztetik.callmeai - Network accessline 365
https://play.google.com/store/apps/details?id=com.serdaroztetik.callmeai - Network accessline 436
local label="${1:-AI session}" local resp resp=$(curl -sfS -X POST "$API/sessions" -H 'content-type: application/json' \ - Network accessline 437
local resp resp=$(curl -sfS -X POST "$API/sessions" -H 'content-type: application/json' \ -d "$(jq -cn --arg l "$label" '{label:$l}')") - Network accessline 438
resp=$(curl -sfS -X POST "$API/sessions" -H 'content-type: application/json' \ - Network accessline 439
-d "$(jq -cn --arg l "$label" '{label:$l}')") echo "$resp" | jq --arg api "$API" '. + {api:$api, cursor:0}' > "$CONF" chmod 600 "$CONF" - Network accessline 440
echo "$resp" | jq --arg api "$API" '. + {api:$api, cursor:0}' > "$CONF" - Network accessline 457
# +30s curl budget over the server-side timeout - Network accessline 458
local resp resp=$(curl -sS --max-time "$((timeout + 30))" -X POST "$API/calls" \ - Network accessline 459
resp=$(curl -sS --max-time "$((timeout + 30))" -X POST "$API/calls" \ - Network accessline 479
ensure_session local resp resp=$(curl -sfS -X POST "$API/messages" -H 'content-type: application/json' \ - Network accessline 480
local resp resp=$(curl -sfS -X POST "$API/messages" -H 'content-type: application/json' \ -d "$(jq -cn --arg t "$(conf session_token)" --arg to "$to" --arg b "$text" \ - Network accessline 481
resp=$(curl -sfS -X POST "$API/messages" -H 'content-type: application/json' \ - Network accessline 495
local cursor resp cursor=$(conf cursor) resp=$(curl -sfS --max-time "$(( $1 + 10 ))" -G "$API/sessions/events" \ - Network accessline 496
[Credential-related source omitted] - Network accessline 497
resp=$(curl -sfS --max-time "$(( $1 + 10 ))" -G "$API/sessions/events" \ - Network accessline 507
do_title() { need_jq; ensure_session curl -sfS -X POST "$API/sessions/label" -H 'content-type: application/json' \ - Network accessline 508
need_jq; ensure_session curl -sfS -X POST "$API/sessions/label" -H 'content-type: application/json' \ -d "$(jq -cn --arg t "$(conf session_token)" --arg l "$1" \ - Network accessline 509
curl -sfS -X POST "$API/sessions/label" -H 'content-type: application/json' \ - Dangerous shell operationline 538
if [ -z "$(find "$f" -mtime -30 2>/dev/null)" ]; then rm -f "$f"; n=$((n+1)); fi - Network accessline 560
title) [ $# -ge 1 ] || usage; do_title "$1";; whoami) need_jq; ensure_session; jq '{session_number, display, api}' "$CONF";; status) curl -sfS "$API/healthz"; echo;; - Network accessline 561
whoami) need_jq; ensure_session; jq '{session_number, display, api}' "$CONF";; status) curl -sfS "$API/healthz"; echo;; prune) do_prune;; - Network accessline 562
status) curl -sfS "$API/healthz"; echo;;
claude-code/skills/call-me/callme
- Executable scriptline 1
#!/usr/bin/env bash - Network accessline 2
# callme — call/text your human's phone from an AI session. bash + curl only. - Network accessline 6
API="${AIPHONE_API:-https://callmemcp.com/aiphone}" - Network accessline 42
need_jq() { command -v jq >/dev/null || { echo "callme needs jq (https://jqlang.github.io/jq/download/)" >&2; exit 2; }; } - Network accessline 73
Download Call Me from the App Store: https://apps.apple.com/app/call-me/id6789575165 - Network accessline 74
On Android, get it on Google Play: https://play.google.com/store/apps/details?id=com.serdaroztetik.callmeai - Dangerous shell operationline 137
rm -f "$USER_CONF" - Network accessline 251
APPSTORE_URL='https://apps.apple.com/app/id6789575165' - Network accessline 317
} }' <<< "$QR_MATRIX" echo "$APPSTORE_URL" - Network accessline 318
}' <<< "$QR_MATRIX" echo "$APPSTORE_URL" } - Network accessline 319
echo "$APPSTORE_URL" - Network accessline 356
1. Download Call Me from the App Store: https://apps.apple.com/app/call-me/id6789575165 - Network accessline 357
https://apps.apple.com/app/call-me/id6789575165 - Network accessline 364
On Android, get it on Google Play instead: https://play.google.com/store/apps/details?id=com.serdaroztetik.callmeai - Network accessline 365
https://play.google.com/store/apps/details?id=com.serdaroztetik.callmeai - Network accessline 436
local label="${1:-AI session}" local resp resp=$(curl -sfS -X POST "$API/sessions" -H 'content-type: application/json' \ - Network accessline 437
local resp resp=$(curl -sfS -X POST "$API/sessions" -H 'content-type: application/json' \ -d "$(jq -cn --arg l "$label" '{label:$l}')") - Network accessline 438
resp=$(curl -sfS -X POST "$API/sessions" -H 'content-type: application/json' \ - Network accessline 439
-d "$(jq -cn --arg l "$label" '{label:$l}')") echo "$resp" | jq --arg api "$API" '. + {api:$api, cursor:0}' > "$CONF" chmod 600 "$CONF" - Network accessline 440
echo "$resp" | jq --arg api "$API" '. + {api:$api, cursor:0}' > "$CONF" - Network accessline 457
# +30s curl budget over the server-side timeout - Network accessline 458
local resp resp=$(curl -sS --max-time "$((timeout + 30))" -X POST "$API/calls" \ - Network accessline 459
resp=$(curl -sS --max-time "$((timeout + 30))" -X POST "$API/calls" \ - Network accessline 479
ensure_session local resp resp=$(curl -sfS -X POST "$API/messages" -H 'content-type: application/json' \ - Network accessline 480
local resp resp=$(curl -sfS -X POST "$API/messages" -H 'content-type: application/json' \ -d "$(jq -cn --arg t "$(conf session_token)" --arg to "$to" --arg b "$text" \ - Network accessline 481
resp=$(curl -sfS -X POST "$API/messages" -H 'content-type: application/json' \ - Network accessline 495
local cursor resp cursor=$(conf cursor) resp=$(curl -sfS --max-time "$(( $1 + 10 ))" -G "$API/sessions/events" \ - Network accessline 496
[Credential-related source omitted] - Network accessline 497
resp=$(curl -sfS --max-time "$(( $1 + 10 ))" -G "$API/sessions/events" \ - Network accessline 507
do_title() { need_jq; ensure_session curl -sfS -X POST "$API/sessions/label" -H 'content-type: application/json' \ - Network accessline 508
need_jq; ensure_session curl -sfS -X POST "$API/sessions/label" -H 'content-type: application/json' \ -d "$(jq -cn --arg t "$(conf session_token)" --arg l "$1" \ - Network accessline 509
curl -sfS -X POST "$API/sessions/label" -H 'content-type: application/json' \ - Dangerous shell operationline 538
if [ -z "$(find "$f" -mtime -30 2>/dev/null)" ]; then rm -f "$f"; n=$((n+1)); fi - Network accessline 560
title) [ $# -ge 1 ] || usage; do_title "$1";; whoami) need_jq; ensure_session; jq '{session_number, display, api}' "$CONF";; status) curl -sfS "$API/healthz"; echo;; - Network accessline 561
whoami) need_jq; ensure_session; jq '{session_number, display, api}' "$CONF";; status) curl -sfS "$API/healthz"; echo;; prune) do_prune;; - Network accessline 562
status) curl -sfS "$API/healthz"; echo;;
plugin/skills/call-me/SKILL.md
- Network accessline 24
1. If `~/.aiphone/config.json` exists, use its `user_number`. 2. Otherwise ask the user for the number. If they do not have the app yet, call `setup` and show these links: [Download Call Me from the App Store](https://callmemcp.com/go/ag - Network accessline 25
2. Otherwise ask the user for the number. If they do not have the app yet, call `setup` and show these links: [Download Call Me from the App Store](https://callmemcp.com/go/agent-plugin) or [get it on Google Play](https://callmemcp.co - Network accessline 26
`setup` and show these links: [Download Call Me from the App Store](https://callmemcp.com/go/agent-plugin) - Network accessline 27
or [get it on Google Play](https://callmemcp.com/go/play-agent-plugin).
skill/SKILL.md
- Network accessline 16
When pairing is missing, always show a clickable link: [Download Call Me from the App Store](https://apps.apple.com/app/call-me/id6789575165) - Network accessline 17
[Download Call Me from the App Store](https://apps.apple.com/app/call-me/id6789575165) - Network accessline 18
on an iPhone, or [get it on Google Play](https://play.google.com/store/apps/details?id=com.serdaroztetik.callmeai) on Android. - Network accessline 43
CALLME_TO=$(jq -r .user_number ~/.aiphone/config.json) curl -sS https://callmemcp.com/ring \ - Network accessline 44
curl -sS https://callmemcp.com/ring \ - Network accessline 46
-d "$(jq -nc --arg to "$CALLME_TO" --arg text "Should I deploy to prod?" \ - Network accessline 122
1. They install [Call Me from the App Store](https://apps.apple.com/app/call-me/id6789575165) - Network accessline 123
(iPhone) or [Google Play](https://play.google.com/store/apps/details?id=com.serdaroztetik.callmeai) (Android).
skill/aiphone
- Executable scriptline 1
#!/usr/bin/env bash - Network accessline 2
# callme — call/text your human's phone from an AI session. bash + curl only. - Network accessline 6
API="${AIPHONE_API:-https://callmemcp.com/aiphone}" - Network accessline 42
need_jq() { command -v jq >/dev/null || { echo "callme needs jq (https://jqlang.github.io/jq/download/)" >&2; exit 2; }; } - Network accessline 73
Download Call Me from the App Store: https://apps.apple.com/app/call-me/id6789575165 - Network accessline 74
On Android, get it on Google Play: https://play.google.com/store/apps/details?id=com.serdaroztetik.callmeai - Dangerous shell operationline 137
rm -f "$USER_CONF" - Network accessline 251
APPSTORE_URL='https://apps.apple.com/app/id6789575165' - Network accessline 317
} }' <<< "$QR_MATRIX" echo "$APPSTORE_URL" - Network accessline 318
}' <<< "$QR_MATRIX" echo "$APPSTORE_URL" } - Network accessline 319
echo "$APPSTORE_URL" - Network accessline 356
1. Download Call Me from the App Store: https://apps.apple.com/app/call-me/id6789575165 - Network accessline 357
https://apps.apple.com/app/call-me/id6789575165 - Network accessline 364
On Android, get it on Google Play instead: https://play.google.com/store/apps/details?id=com.serdaroztetik.callmeai - Network accessline 365
https://play.google.com/store/apps/details?id=com.serdaroztetik.callmeai - Network accessline 436
local label="${1:-AI session}" local resp resp=$(curl -sfS -X POST "$API/sessions" -H 'content-type: application/json' \ - Network accessline 437
local resp resp=$(curl -sfS -X POST "$API/sessions" -H 'content-type: application/json' \ -d "$(jq -cn --arg l "$label" '{label:$l}')") - Network accessline 438
resp=$(curl -sfS -X POST "$API/sessions" -H 'content-type: application/json' \ - Network accessline 439
-d "$(jq -cn --arg l "$label" '{label:$l}')") echo "$resp" | jq --arg api "$API" '. + {api:$api, cursor:0}' > "$CONF" chmod 600 "$CONF" - Network accessline 440
echo "$resp" | jq --arg api "$API" '. + {api:$api, cursor:0}' > "$CONF" - Network accessline 457
# +30s curl budget over the server-side timeout - Network accessline 458
local resp resp=$(curl -sS --max-time "$((timeout + 30))" -X POST "$API/calls" \ - Network accessline 459
resp=$(curl -sS --max-time "$((timeout + 30))" -X POST "$API/calls" \ - Network accessline 479
ensure_session local resp resp=$(curl -sfS -X POST "$API/messages" -H 'content-type: application/json' \ - Network accessline 480
local resp resp=$(curl -sfS -X POST "$API/messages" -H 'content-type: application/json' \ -d "$(jq -cn --arg t "$(conf session_token)" --arg to "$to" --arg b "$text" \ - Network accessline 481
resp=$(curl -sfS -X POST "$API/messages" -H 'content-type: application/json' \ - Network accessline 495
local cursor resp cursor=$(conf cursor) resp=$(curl -sfS --max-time "$(( $1 + 10 ))" -G "$API/sessions/events" \ - Network accessline 496
[Credential-related source omitted] - Network accessline 497
resp=$(curl -sfS --max-time "$(( $1 + 10 ))" -G "$API/sessions/events" \ - Network accessline 507
do_title() { need_jq; ensure_session curl -sfS -X POST "$API/sessions/label" -H 'content-type: application/json' \ - Network accessline 508
need_jq; ensure_session curl -sfS -X POST "$API/sessions/label" -H 'content-type: application/json' \ -d "$(jq -cn --arg t "$(conf session_token)" --arg l "$1" \ - Network accessline 509
curl -sfS -X POST "$API/sessions/label" -H 'content-type: application/json' \ - Dangerous shell operationline 538
if [ -z "$(find "$f" -mtime -30 2>/dev/null)" ]; then rm -f "$f"; n=$((n+1)); fi - Network accessline 560
title) [ $# -ge 1 ] || usage; do_title "$1";; whoami) need_jq; ensure_session; jq '{session_number, display, api}' "$CONF";; status) curl -sfS "$API/healthz"; echo;; - Network accessline 561
whoami) need_jq; ensure_session; jq '{session_number, display, api}' "$CONF";; status) curl -sfS "$API/healthz"; echo;; prune) do_prune;; - Network accessline 562
status) curl -sfS "$API/healthz"; echo;;
skill/callme
- Executable scriptline 1
#!/usr/bin/env bash - Network accessline 2
# callme — call/text your human's phone from an AI session. bash + curl only. - Network accessline 6
API="${AIPHONE_API:-https://callmemcp.com/aiphone}" - Network accessline 42
need_jq() { command -v jq >/dev/null || { echo "callme needs jq (https://jqlang.github.io/jq/download/)" >&2; exit 2; }; } - Network accessline 73
Download Call Me from the App Store: https://apps.apple.com/app/call-me/id6789575165 - Network accessline 74
On Android, get it on Google Play: https://play.google.com/store/apps/details?id=com.serdaroztetik.callmeai - Dangerous shell operationline 137
rm -f "$USER_CONF" - Network accessline 251
APPSTORE_URL='https://apps.apple.com/app/id6789575165' - Network accessline 317
} }' <<< "$QR_MATRIX" echo "$APPSTORE_URL" - Network accessline 318
}' <<< "$QR_MATRIX" echo "$APPSTORE_URL" } - Network accessline 319
echo "$APPSTORE_URL" - Network accessline 356
1. Download Call Me from the App Store: https://apps.apple.com/app/call-me/id6789575165 - Network accessline 357
https://apps.apple.com/app/call-me/id6789575165 - Network accessline 364
On Android, get it on Google Play instead: https://play.google.com/store/apps/details?id=com.serdaroztetik.callmeai - Network accessline 365
https://play.google.com/store/apps/details?id=com.serdaroztetik.callmeai - Network accessline 436
local label="${1:-AI session}" local resp resp=$(curl -sfS -X POST "$API/sessions" -H 'content-type: application/json' \ - Network accessline 437
local resp resp=$(curl -sfS -X POST "$API/sessions" -H 'content-type: application/json' \ -d "$(jq -cn --arg l "$label" '{label:$l}')") - Network accessline 438
resp=$(curl -sfS -X POST "$API/sessions" -H 'content-type: application/json' \ - Network accessline 439
-d "$(jq -cn --arg l "$label" '{label:$l}')") echo "$resp" | jq --arg api "$API" '. + {api:$api, cursor:0}' > "$CONF" chmod 600 "$CONF" - Network accessline 440
echo "$resp" | jq --arg api "$API" '. + {api:$api, cursor:0}' > "$CONF" - Network accessline 457
# +30s curl budget over the server-side timeout - Network accessline 458
local resp resp=$(curl -sS --max-time "$((timeout + 30))" -X POST "$API/calls" \ - Network accessline 459
resp=$(curl -sS --max-time "$((timeout + 30))" -X POST "$API/calls" \ - Network accessline 479
ensure_session local resp resp=$(curl -sfS -X POST "$API/messages" -H 'content-type: application/json' \ - Network accessline 480
local resp resp=$(curl -sfS -X POST "$API/messages" -H 'content-type: application/json' \ -d "$(jq -cn --arg t "$(conf session_token)" --arg to "$to" --arg b "$text" \ - Network accessline 481
resp=$(curl -sfS -X POST "$API/messages" -H 'content-type: application/json' \ - Network accessline 495
local cursor resp cursor=$(conf cursor) resp=$(curl -sfS --max-time "$(( $1 + 10 ))" -G "$API/sessions/events" \ - Network accessline 496
[Credential-related source omitted] - Network accessline 497
resp=$(curl -sfS --max-time "$(( $1 + 10 ))" -G "$API/sessions/events" \ - Network accessline 507
do_title() { need_jq; ensure_session curl -sfS -X POST "$API/sessions/label" -H 'content-type: application/json' \ - Network accessline 508
need_jq; ensure_session curl -sfS -X POST "$API/sessions/label" -H 'content-type: application/json' \ -d "$(jq -cn --arg t "$(conf session_token)" --arg l "$1" \ - Network accessline 509
curl -sfS -X POST "$API/sessions/label" -H 'content-type: application/json' \ - Dangerous shell operationline 538
if [ -z "$(find "$f" -mtime -30 2>/dev/null)" ]; then rm -f "$f"; n=$((n+1)); fi - Network accessline 560
title) [ $# -ge 1 ] || usage; do_title "$1";; whoami) need_jq; ensure_session; jq '{session_number, display, api}' "$CONF";; status) curl -sfS "$API/healthz"; echo;; - Network accessline 561
whoami) need_jq; ensure_session; jq '{session_number, display, api}' "$CONF";; status) curl -sfS "$API/healthz"; echo;; prune) do_prune;; - Network accessline 562
status) curl -sfS "$API/healthz"; echo;;
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Declared and executed: 3 facts
- Contacts jqlang.github.io, which SKILL.md, the README and the plugin manifest do not mentioncall-me/aiphone:42High confidence
- Contacts jqlang.github.io, which SKILL.md, the README and the plugin manifest do not mentioncall-me/callme:42High confidence
- Contacts jqlang.github.io, which SKILL.md, the README and the plugin manifest do not mentionskill/callme:42High confidence
Signal confidence: 146 facts
- Executable script in code of a file that runsclaude-code/dist/channel.mjs:1High confidence
- Possible obfuscation in code of a file that runsclaude-code/dist/channel.mjs:2High confidence
- Possible obfuscation in code of a file that runsclaude-code/dist/channel.mjs:3High confidence
- Possible obfuscation in code of a file that runsclaude-code/dist/channel.mjs:6High confidence
- Possible obfuscation in code of a file that runsclaude-code/dist/channel.mjs:9High confidence
- Possible obfuscation in code of a file that runsclaude-code/dist/channel.mjs:10High confidence
- Network access in code of a file that runsclaude-code/dist/channel.mjs:11High confidence
- Possible obfuscation in code of a file that runsclaude-code/dist/channel.mjs:11High confidence
- Possible obfuscation in code of a file that runsclaude-code/dist/channel.mjs:70High confidence
- Network access in code of a file that runsclaude-code/dist/channel.mjs:72High confidence
- Possible obfuscation in code of a file that runsclaude-code/dist/channel.mjs:72High confidence
- Possible obfuscation in code of a file that runsclaude-code/dist/channel.mjs:73High confidence
- Possible obfuscation in code of a file that runsclaude-code/dist/channel.mjs:74High confidence
- Network access in code of a file that runsclaude-code/dist/channel.mjs:75High confidence
- Network access in code of a file that runsclaude-code/dist/channel.mjs:76High confidence
- Possible obfuscation in code of a file that runsclaude-code/dist/channel.mjs:76High confidence
- Network access in code of a file that runsclaude-code/dist/channel.mjs:80High confidence
- Possible obfuscation in code of a file that runsclaude-code/dist/channel.mjs:80High confidence
- Network access in prose of the SKILL.mdcall-me/SKILL.md:16Low confidence
- Network access in prose of the SKILL.mdcall-me/SKILL.md:17Low confidence
- Network access in prose of the SKILL.mdcall-me/SKILL.md:18Low confidence
- Network access in code of the SKILL.mdcall-me/SKILL.md:43High confidence
- Network access in code of the SKILL.mdcall-me/SKILL.md:44High confidence
- Network access in code of the SKILL.mdcall-me/SKILL.md:46High confidence
- Network access in prose of the SKILL.mdcall-me/SKILL.md:122Low confidence
- Network access in prose of the SKILL.mdcall-me/SKILL.md:123Low confidence
- Executable script in code of a file that runscall-me/aiphone:1High confidence
- Network access in a comment of a file that runscall-me/aiphone:2Low confidence
- Network access in code of a file that runscall-me/aiphone:6High confidence
- Network access in code of a file that runscall-me/aiphone:42High confidence
- Network access in code of a file that runscall-me/aiphone:73High confidence
- Network access in code of a file that runscall-me/aiphone:74High confidence
- Dangerous shell operation in code of a file that runscall-me/aiphone:137High confidence
- Network access in code of a file that runscall-me/aiphone:251High confidence
- Network access in code of a file that runscall-me/aiphone:317High confidence
- Network access in code of a file that runscall-me/aiphone:318High confidence
- Network access in code of a file that runscall-me/aiphone:319High confidence
- Network access in code of a file that runscall-me/aiphone:356High confidence
- Network access in code of a file that runscall-me/aiphone:357High confidence
- Network access in code of a file that runscall-me/aiphone:364High confidence
- Network access in code of a file that runscall-me/aiphone:365High confidence
- Network access in code of a file that runscall-me/aiphone:436High confidence
- Network access in code of a file that runscall-me/aiphone:437High confidence
- Network access in code of a file that runscall-me/aiphone:438High confidence
- Network access in code of a file that runscall-me/aiphone:439High confidence
- Network access in code of a file that runscall-me/aiphone:440High confidence
- Network access in a comment of a file that runscall-me/aiphone:457Low confidence
- Network access in code of a file that runscall-me/aiphone:458High confidence
- Network access in code of a file that runscall-me/aiphone:459High confidence
- Network access in code of a file that runscall-me/aiphone:479High confidence
and 96 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md claude-code/skills/call-me/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md claude-code/skills/call-me/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Native | Manifest gemini-extension.json | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md claude-code/skills/call-me/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md claude-code/skills/call-me/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.