Mobilerun Docs Reference
droidrun/mobilerun
Answers questions about Mobilerun, the LLM-agent framework for automating Android and iOS devices, by pointing the agent to the right page of its v5 documentation.
Expert push notification systems covering APNs/FCM integration, notification channels, rich notifications, silent notifications, notification grouping, deep linking, scheduling, analytics, opt-in…
$ npx skills add FerroxLabs/wayland --skill push-notification -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install FerroxLabs/wayland push-notification --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/FerroxLabs/wayland.git skills-src && mkdir -p .claude/skills && cp -r skills-src/src/process/resources/skills-library/bodies/skills/software-engineering/push-notification .claude/skills/push-notification && 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 "push-notification" agent skill from https://github.com/FerroxLabs/wayland/tree/main/src/process/resources/skills-library/bodies/skills/software-engineering/push-notification into .claude/skills/push-notification/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "push-notification", 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/FerroxLabs/wayland/tree/main/src/process/resources/skills-library/bodies/skills/software-engineering/push-notificationType 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 FerroxLabs/wayland --skill push-notification -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install FerroxLabs/wayland push-notification --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/FerroxLabs/wayland.git skills-src && mkdir -p .agents/skills && cp -r skills-src/src/process/resources/skills-library/bodies/skills/software-engineering/push-notification .agents/skills/push-notification && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "push-notification" agent skill from https://github.com/FerroxLabs/wayland/tree/main/src/process/resources/skills-library/bodies/skills/software-engineering/push-notification into .agents/skills/push-notification/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "push-notification", 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 FerroxLabs/wayland --skill push-notification -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install FerroxLabs/wayland push-notification --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/FerroxLabs/wayland.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/src/process/resources/skills-library/bodies/skills/software-engineering/push-notification .cursor/skills/push-notification && 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 "push-notification" agent skill from https://github.com/FerroxLabs/wayland/tree/main/src/process/resources/skills-library/bodies/skills/software-engineering/push-notification into .cursor/skills/push-notification/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "push-notification", 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/FerroxLabs/wayland.git --path src/process/resources/skills-library/bodies/skills/software-engineering/push-notification--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 FerroxLabs/wayland --skill push-notification -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install FerroxLabs/wayland push-notification --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/FerroxLabs/wayland.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/src/process/resources/skills-library/bodies/skills/software-engineering/push-notification .gemini/skills/push-notification && 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 "push-notification" agent skill from https://github.com/FerroxLabs/wayland/tree/main/src/process/resources/skills-library/bodies/skills/software-engineering/push-notification into .gemini/skills/push-notification/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "push-notification", 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 FerroxLabs/wayland push-notificationInstalls 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 FerroxLabs/wayland --skill push-notification -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/FerroxLabs/wayland.git skills-src && mkdir -p .github/skills && cp -r skills-src/src/process/resources/skills-library/bodies/skills/software-engineering/push-notification .github/skills/push-notification && 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 "push-notification" agent skill from https://github.com/FerroxLabs/wayland/tree/main/src/process/resources/skills-library/bodies/skills/software-engineering/push-notification into .github/skills/push-notification/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "push-notification", 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 FerroxLabs/wayland --skill push-notification -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install FerroxLabs/wayland push-notification --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/FerroxLabs/wayland.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/src/process/resources/skills-library/bodies/skills/software-engineering/push-notification .opencode/skills/push-notification && 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 "push-notification" agent skill from https://github.com/FerroxLabs/wayland/tree/main/src/process/resources/skills-library/bodies/skills/software-engineering/push-notification into .opencode/skills/push-notification/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "push-notification", 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.
push-notificationExpert push notification systems covering APNs/FCM integration, notification channels, rich notifications, silent notifications, notification grouping, deep linking, scheduling, analytics, opt-in…
Push Notification is an agent skill from FerroxLabs/wayland. Expert push notification systems covering APNs/FCM integration, notification channels, rich notifications, silent notifications, notification grouping, deep linking, scheduling, analytics, opt-in strategies, and delivery optimization. Use when the user asks about push notification, push notification best practices, or needs guidance on push notification implementation. Do NOT use when the user needs a different specialized skill or is asking about an unrelated technology domain.
Its SKILL.md is about 4k 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 Mobile. It works with Android and iOS. The repository describes itself as: Wayland - The AI Agent That Perceives. Reasons. Acts. Evolves. The licence is Apache-2.0.
Read from SKILL.md and the folder at commit 4c030c7. 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 python, kotlin, json, swift and markdown).
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.
Push Notification loads about 4k tokens when it runs. Until then it costs about 125 tokens; SKILL.md has 570 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 FerroxLabs/wayland at commit 4c030c7, republished under its Apache-2.0 licence (© FerroxLabs). 570 words, ~4,035 tokens.
.claude/skills/push-notification/SKILL.md (or your agent's skills folder).This skill provides comprehensive expertise in designing, implementing, and optimizing push notification systems for mobile applications. It covers both Apple Push Notification service (APNs) and Firebase Cloud Messaging (FCM), from initial integration through advanced patterns like rich notifications, silent data sync, intelligent grouping, deep linking, scheduling strategies, analytics measurement, and user opt-in optimization.
Notification Delivery Pipeline:
1. Device Registration
App Launch → Request Permission → Register with OS → Receive Token
→ Send Token to Your Server → Store Token + User Association
2. Sending a Notification
Business Event → Your Server → Provider (APNs / FCM) → OS → Device
→ Foreground: App handles display
→ Background: System displays notification
→ Not Running: System displays, app launched on tap
3. User Interaction
Notification Displayed → User Taps → App Opens → Deep Link Route
→ Analytics: Delivery confirmed, Tap tracked, Conversion measuredRecommended Server Architecture:
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Business │────▶│ Notification │────▶│ Provider │
│ Logic │ │ Service │ │ Gateway │
│ (triggers) │ │ (queue + │ │ (APNs/FCM) │
└─────────────┘ │ templates) │ └─────────────┘
└──────────────┘ │
│ ▼
┌──────────────┐ ┌─────────────┐
│ Token Store │ │ Device │
# ... (condensed) ...
- Queue: RabbitMQ/SQS for reliable, ordered delivery
- Template Engine: Handlebars/Mustache for notification content
- Provider Gateway: Abstraction over APNs + FCM APIs
- Analytics Sink: Track delivery, opens, conversions# Python example using httpx for APNs HTTP/2
import httpx
import jwt
import time
class APNsClient:
def __init__(self, key_id: str, team_id: str, private_key: str, sandbox: bool = False):
self.key_id = key_id
self.team_id = team_id
self.private_key = private_key
self.base_url = (
# ... (condensed) ...
headers=headers,
json=payload,
)
return response.status_code, response.json() if response.status_code != 200 else None{
"aps": {
"alert": {
"title": "New Message",
"subtitle": "From John",
"body": "Hey, are you free for lunch today?"
},
"badge": 3,
"sound": "default",
"category": "MESSAGE_CATEGORY",
"thread-id": "conversation-123",
# ... (condensed) ...
"conversation_id": "123",
"sender_id": "user-456",
"deep_link": "myapp://chat/123"
}| Level | Behavior | Use Case |
|---|---|---|
passive | No sound, no screen wake | Low-priority updates |
active (default) | Sound, appears normally | Standard notifications |
time-sensitive | Breaks through Focus modes | Delivery updates, time-limited events |
critical | Supersedes mute, plays sound | Requires Apple entitlement, emergency only |
import google.auth.transport.requests
from google.oauth2 import service_account
import httpx
class FCMClient:
def __init__(self, service_account_file: str, project_id: str):
self.project_id = project_id
self.credentials = service_account.Credentials.from_service_account_file(
service_account_file,
scopes=["[reference URL]"]
)
# ... (condensed) ...
}
async with httpx.AsyncClient() as client:
response = await client.post(url, headers=headers, json={"message": message})
return response.json(){
"message": {
"token": "device_token_here",
"notification": {
"title": "New Order",
"body": "Your order #1234 has been shipped!"
},
"android": {
"priority": "high",
"notification": {
"channel_id": "orders",
# ... (condensed) ...
"type": "order_shipped"
}
}
}// Define channels at app startup
class NotificationChannelManager(private val context: Context) {
fun createChannels() {
val manager = context.getSystemService(NotificationManager::class.java)
val channels = listOf(
NotificationChannel(
"messages", "Messages",
NotificationManager.IMPORTANCE_HIGH
).apply {
# ... (condensed) ...
manager.createNotificationChannels(channels)
}
}| Importance | Behavior | Use Case |
|---|---|---|
| IMPORTANCE_MAX | Sound + heads-up + screen wake | Incoming calls |
| IMPORTANCE_HIGH | Sound + heads-up | Direct messages |
| IMPORTANCE_DEFAULT | Sound + status bar | Order updates |
| IMPORTANCE_LOW | No sound, status bar only | Promotions |
| IMPORTANCE_MIN | No sound, no status bar | Silent sync |
// NotificationServiceExtension/NotificationService.swift
class NotificationService: UNNotificationServiceExtension {
var contentHandler: ((UNNotificationContent) -> Void)?
var bestAttemptContent: UNMutableNotificationContent?
supersede func didReceive(
_ request: UNNotificationRequest,
withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void
) {
self.contentHandler = contentHandler
bestAttemptContent = request.content.mutableCopy() as? UNMutableNotificationContent
# ... (condensed) ...
completion(tmpURL)
}.resume()
}
}// Big picture notification
fun showImageNotification(context: Context, title: String, body: String, bitmap: Bitmap) {
val notification = NotificationCompat.Builder(context, "orders")
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle(title)
.setContentText(body)
.setStyle(
NotificationCompat.BigPictureStyle()
.bigPicture(bitmap)
.bigLargeIcon(null as Bitmap?) // Hide large icon when expanded
)
# ... (condensed) ...
.build()
NotificationManagerCompat.from(context).notify(conversationId, notification)
}Silent Notification Use Cases:
├── Background data sync
├── Cache invalidation
├── Configuration updates
├── Location tracking updates
├── Badge count updates
├── Content pre-fetching
└── Token refresh triggers
Implementation Rules:
├── iOS: content-available: 1, no alert/sound/badge
# ... (condensed) ...
│ ├── Handled by FirebaseMessagingService
│ ├── App gets ~20 seconds in onMessageReceived
│ ├── High priority: wakes dozing device
│ └── Normal priority: may be deferred by Doze mode// iOS silent notification handling
func application(
_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable: Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void
) {
guard let type = userInfo["type"] as? String else {
completionHandler(.noData)
return
}
# ... (condensed) ...
default:
completionHandler(.noData)
}
}Notification Grouping Rules:
├── Group by conversation (messaging apps)
│ └── thread-id (iOS) / group key (Android) = conversation ID
├── Group by category (e-commerce)
│ └── Orders, promotions, and account grouped separately
├── Group by sender (email/social)
│ └── All notifications from same person/account
├── Summary notification
│ ├── iOS: automatic summary with category
│ └── Android: setGroup() + summary notification with setGroupSummary(true)
└── Maximum visible: Show up to 4 individual, then collapse to summary// Android notification grouping
private val GROUP_KEY = "com.myapp.ORDERS"
fun showOrderNotification(order: Order) {
// Individual notification
val notification = NotificationCompat.Builder(context, "orders")
.setSmallIcon(R.drawable.ic_order)
.setContentTitle("Order ${order.id}")
.setContentText(order.statusMessage)
.setGroup(GROUP_KEY)
.build()
# ... (condensed) ...
val manager = NotificationManagerCompat.from(context)
manager.notify(order.id.hashCode(), notification)
manager.notify(0, summary) // Summary ID should be constant
}Deep Link Flow:
Notification Tap → OS Opens App → App Reads Notification Data
→ Parse deep_link field → Route to correct screen
Deep Link Formats:
├── Custom scheme: myapp://orders/1234
├── Universal Links (iOS): [reference URL]
├── App Links (Android): [reference URL]
└── Deferred deep links: Store link + route after install
Implementation Checklist:
├── Parse deep link in notification tap handler
├── Handle cold start (app not running) deep links
├── Handle warm start (app in background) deep links
├── Handle foreground notification tap deep links
├── Queue deep link if auth required, execute after login
└── Track deep link attribution in analyticsOptimal Send Time Strategy:
├── Per-user timezone delivery
│ └── Send at 10 AM local time, not 10 AM server time
├── Per-user engagement window
│ ├── Track when each user opens the app
│ ├── Track when each user opens notifications
│ └── Send during their peak engagement window
├── Frequency capping
│ ├── Maximum 1 promotional notification per day
│ ├── Maximum 3 transactional notifications per hour
│ └── Maximum 5 total notifications per day (unless real-time messaging)
# ... (condensed) ...
└── Quiet hours
├── Default: No notifications 10 PM - 8 AM local time
├── Exception: Time-sensitive and transactional
└── Let users configure their quiet hoursOpt-In Strategy (maximize permission grant rate):
1. Pre-permission screen (before iOS system prompt)
├── Explain VALUE the user gets from notifications
├── Show example notifications visually
├── Use specific benefit: "Get notified when your order ships"
├── NOT generic: "We'd like to send you notifications"
└── If user says "Not now" → Ask again after value delivery
2. Contextual permission request (at the right moment)
├── After placing first order → "Want delivery updates?"
# ... (condensed) ...
├── Check notification permission status regularly
├── Show in-app banner: "Turn on notifications for [benefit]"
├── Provide deep link to Settings app
└── Do NOT nag repeatedly| Metric | Formula | Target |
|---|---|---|
| Opt-in rate | Users with permission / Total users | >60% |
| Delivery rate | Delivered / Sent | >95% |
| Open rate | Opened / Delivered | >5% (varies by type) |
| Conversion rate | Conversions / Opened | Varies by goal |
| Opt-out rate | Disabled permissions / Total with permission | <2% per month |
| Uninstall attribution | Uninstalls within 24h of notification / Total | <0.1% |
# Server-side notification analytics tracking
class NotificationAnalytics:
def track_sent(self, notification_id: str, user_id: str, channel: str):
self.emit("notification.sent", {
"notification_id": notification_id,
"user_id": user_id,
"channel": channel, # "push", "email", "sms"
"timestamp": utcnow(),
})
def track_delivered(self, notification_id: str, user_id: str):
# ... (condensed) ...
"notification_id": notification_id,
"user_id": user_id,
"action": action, # "purchase", "signup", "view"
})Use this skill when:
Do NOT use this skill when:
# Push Notification Analysis
## Context Assessment
[Situation summary and constraints]
## Recommended Approach
[Primary recommendation with rationale]
## Implementation Steps
1. [Step with specific details]
2. [Step with specific details]
3. [Step with specific details]
## Trade-offs and Considerations
- [Key trade-off 1]
- [Key trade-off 2]
## Next Steps
- [Immediate action item]
- [Follow-up action item]Input: "Help me implement push notification for a medium-scale production application"
Output: A structured analysis covering current state assessment, recommended push notification approach with specific patterns, implementation roadmap with milestones, and risk mitigation strategies tailored to the application scale and constraints.
© FerroxLabs, Apache-2.0. 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 src/process/resources/skills-library/bodies/skills/software-engineering/push-notification of FerroxLabs/wayland.
Open the folder on GitHubat commit 4c030c7
Push Notification 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 |
|---|---|---|---|---|---|---|
| Push Notification this skillFerroxLabs/wayland | 608 | — | ~4k | Automated safety check: Pass | Apache-2.0 | |
| Mobilerun Docs Referencedroidrun/mobilerun | 9.6k | — | ~943 | Automated safety check: Pass | MIT | |
| App Store Screenshots GeneratorParthJadhav/app-store-screenshots | 7.2k | — | ~14k | Automated safety check: Pass | MIT | |
| Rnn Codebasewix/react-native-navigation | 13k | — | ~2k | Automated safety check: Pass | MIT | |
| Building Native UICherryHQ/cherry-studio-app | 4k | 8 repos | ~2.6k | Automated safety check: Pass | MIT | |
| Sim Uselycorp-jp/sim-use | 1.4k | — | ~3.2k | Automated safety check: Pass | Apache-2.0 |
droidrun/mobilerun
Answers questions about Mobilerun, the LLM-agent framework for automating Android and iOS devices, by pointing the agent to the right page of its v5 documentation.
ParthJadhav/app-store-screenshots
Scaffolds a Next.js editor for designing App Store and Google Play screenshots as ads and exporting them at every required size, for iOS, Mac and Android.
wix/react-native-navigation
Navigate and work with the react-native-navigation (RNN) codebase.
CherryHQ/cherry-studio-app
Complete guide for building beautiful apps with Expo Router.
lycorp-jp/sim-use
Drive iOS Simulator, Android emulator/device, and physical iPhone/iPad screens for AI agents.
blokadaorg/blokada
A skill your agent uses for dynamic inspection and navigation of the Blokada app through the repo-local Appium machine session.
FerroxLabs/wayland
Install, start, connect, and troubleshoot visualization companion projects for Aion/OpenClaw, with Star-Office-UI as the default recommendation.
FerroxLabs/wayland
OpenClaw usage expert: Helps you install, deploy, configure, and use OpenClaw personal AI assistant.
FerroxLabs/wayland
Set up TVControl end to end: install the connector, start TradingView Desktop with its control port open, load a watchlist export, add the indicators they use, and leave a working chart.
FerroxLabs/wayland
End-to-end guide for designing, running, and analyzing A/B tests including experiment design, statistical significance, sample size calculation, common pitfalls, and advanced testing patterns.
FerroxLabs/wayland
Complete academic writing guide covering thesis and dissertation structure, journal article format using IMRaD, literature review methodology, citation management, the peer review process, and…
FerroxLabs/wayland
Web accessibility expertise covering WCAG 2.2 conformance, audit methodology, ARIA patterns, keyboard navigation, screen reader testing, focus management, form accessibility, and automated vs manual…
Categories
Expert push notification systems covering APNs/FCM integration, notification channels, rich notifications, silent notifications, notification grouping, deep linking, scheduling, analytics, opt-in…. Push Notification is an agent skill from FerroxLabs/wayland. Expert push notification systems covering APNs/FCM integration, notification channels, rich notifications, silent notifications, notification grouping, deep linking, scheduling, analytics, opt-in strategies, and delivery optimization.
Push Notification fits situations like: the user asks about push notification; push notification best practices; needs guidance on push notification implementation; the user needs a different specialized skill.
Run `npx skills add FerroxLabs/wayland --skill push-notification -a claude-code`. Or copy the skill folder (src/process/resources/skills-library/bodies/skills/software-engineering/push-notification in FerroxLabs/wayland) into .claude/skills/push-notification in your project. Claude Code loads it when a task matches its description.
Run `npx skills add FerroxLabs/wayland --skill push-notification -a codex`. Or copy the skill folder (src/process/resources/skills-library/bodies/skills/software-engineering/push-notification in FerroxLabs/wayland) into .agents/skills/push-notification 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 FerroxLabs/wayland --skill push-notification -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/push-notification, .gemini/skills/push-notification, .github/skills/push-notification and .opencode/skills/push-notification in your project.
SKILL.md names no scripts, command-line tools or credentials: Push Notification is instructions for the agent only. Our summary lists: Python 3; A credential in GROUP_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. Review the folder before installing.
Push Notification is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 4k tokens (SKILL.md is roughly 16k 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 Push Notification: Mobilerun Docs Reference (droidrun/mobilerun, 9.6k stars), App Store Screenshots Generator (ParthJadhav/app-store-screenshots, 7.2k stars), Rnn Codebase (wix/react-native-navigation, 13k stars) and Building Native UI (CherryHQ/cherry-studio-app, 4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
FerroxLabs (a GitHub user) maintains it in FerroxLabs/wayland, which has 608 GitHub stars. The repository holds 1,194 skills in this directory. The repository was last updated on October 6, 2026.
Source: FerroxLabs/wayland on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.