Php Concurrency
HoangNguyen0403/agent-skills-standard
Implement concurrency and non-blocking I/O in modern PHP. An agent skill from HoangNguyen0403/agent-skills-standard.
Maintain Discord.php runtime bootstrapping, startup options, event loop, gateway connection, reconnection, member chunking, cache configuration, and process lifecycle.
$ npx skills add discord-php/DiscordPHP --skill runtime-bootstrap-keeper -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install discord-php/DiscordPHP runtime-bootstrap-keeper --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/discord-php/DiscordPHP.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/runtime-bootstrap-keeper .claude/skills/runtime-bootstrap-keeper && 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 "runtime-bootstrap-keeper" agent skill from https://github.com/discord-php/DiscordPHP/tree/master/.agents/skills/runtime-bootstrap-keeper into .claude/skills/runtime-bootstrap-keeper/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "runtime-bootstrap-keeper", 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/discord-php/DiscordPHP/tree/master/.agents/skills/runtime-bootstrap-keeperType 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 discord-php/DiscordPHP --skill runtime-bootstrap-keeper -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install discord-php/DiscordPHP runtime-bootstrap-keeper --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/discord-php/DiscordPHP.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/runtime-bootstrap-keeper .agents/skills/runtime-bootstrap-keeper && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "runtime-bootstrap-keeper" agent skill from https://github.com/discord-php/DiscordPHP/tree/master/.agents/skills/runtime-bootstrap-keeper into .agents/skills/runtime-bootstrap-keeper/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "runtime-bootstrap-keeper", 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 discord-php/DiscordPHP --skill runtime-bootstrap-keeper -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install discord-php/DiscordPHP runtime-bootstrap-keeper --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/discord-php/DiscordPHP.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/runtime-bootstrap-keeper .cursor/skills/runtime-bootstrap-keeper && 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 "runtime-bootstrap-keeper" agent skill from https://github.com/discord-php/DiscordPHP/tree/master/.agents/skills/runtime-bootstrap-keeper into .cursor/skills/runtime-bootstrap-keeper/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "runtime-bootstrap-keeper", 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/discord-php/DiscordPHP.git --path .agents/skills/runtime-bootstrap-keeper--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 discord-php/DiscordPHP --skill runtime-bootstrap-keeper -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install discord-php/DiscordPHP runtime-bootstrap-keeper --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/discord-php/DiscordPHP.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/runtime-bootstrap-keeper .gemini/skills/runtime-bootstrap-keeper && 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 "runtime-bootstrap-keeper" agent skill from https://github.com/discord-php/DiscordPHP/tree/master/.agents/skills/runtime-bootstrap-keeper into .gemini/skills/runtime-bootstrap-keeper/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "runtime-bootstrap-keeper", 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 discord-php/DiscordPHP runtime-bootstrap-keeperInstalls 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 discord-php/DiscordPHP --skill runtime-bootstrap-keeper -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/discord-php/DiscordPHP.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/runtime-bootstrap-keeper .github/skills/runtime-bootstrap-keeper && 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 "runtime-bootstrap-keeper" agent skill from https://github.com/discord-php/DiscordPHP/tree/master/.agents/skills/runtime-bootstrap-keeper into .github/skills/runtime-bootstrap-keeper/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "runtime-bootstrap-keeper", 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 discord-php/DiscordPHP --skill runtime-bootstrap-keeper -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install discord-php/DiscordPHP runtime-bootstrap-keeper --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/discord-php/DiscordPHP.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/runtime-bootstrap-keeper .opencode/skills/runtime-bootstrap-keeper && 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 "runtime-bootstrap-keeper" agent skill from https://github.com/discord-php/DiscordPHP/tree/master/.agents/skills/runtime-bootstrap-keeper into .opencode/skills/runtime-bootstrap-keeper/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "runtime-bootstrap-keeper", 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.
runtime-bootstrap-keeperMaintain Discord.php runtime bootstrapping, startup options, event loop, gateway connection, reconnection, member chunking, cache configuration, and process lifecycle.
Runtime Bootstrap Keeper is an agent skill from discord-php/DiscordPHP. Maintain Discord.php runtime bootstrapping, startup options, event loop, gateway connection, reconnection, member chunking, cache configuration, and process lifecycle. Use when touching Discord.php, startup wiring, intents, or root repositories.
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 Development, covering Async programming. It works with Discord and PHP. The repository describes itself as: An API to interact with the popular messaging app Discord. The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 580c66a. 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 php).
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.
Runtime Bootstrap Keeper loads about 4k tokens when it runs. Until then it costs about 68 tokens; SKILL.md has 1,925 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 discord-php/DiscordPHP at commit 580c66a, republished under its MIT licence (© discord-php). 1,925 words, ~4,047 tokens.
.claude/skills/runtime-bootstrap-keeper/SKILL.md (or your agent's skills folder).Use this skill when work touches src/Discord/Discord.php, startup options, loop setup, cache configuration, gateway connection behavior, readiness, member chunking, reconnect logic, or root repositories.
This is not generic PHP skill. This is the orchestrator-lifecycle guard. Load it when changing how the client boots, what dependencies it wires, how it connects to Discord's gateway, or how it reaches the ready state.
Keep Discord as the single bootstrapping orchestrator:
OptionsResolverrun() methodClient partsrc/Discord/Discord.php — the entire orchestratorsrc/Discord/WebSockets/Handlers.php — handler registry for gateway eventssrc/Discord/WebSockets/Event.php — event constant definitionssrc/Discord/Factory/Factory.php — part/repository factory, created once heresrc/Discord/Parts/User/Client.php — the Client part that holds root reposREADME.md — public-facing construction examplesguide/basics.rst — user-facing lifecycle guideDo not start by reading individual event classes. Understand the wiring in Discord.php first, then follow references outward.
Discord is the application entry point. It is not a service class, not a controller, not a request handler. It is a long-running CLI process orchestrator built on ReactPHP. The entire class rests on these guarantees:
__construct() does real work: resolves options, creates HTTP client, creates Factory, creates Client part, registers handlers, and calls connectWs() to open the gatewayrun() only starts the ReactPHP event loop — it must stay a one-linerphp_sapi_name() is not cli or microFactory is created exactly once and shared across the entire systemguilds, users, private_channels, emojis, sounds, sticker_packs, lobbies) live on the Client part, proxied through Discord::__get()If a change violates any of these, the runtime becomes unpredictable.
All user-facing configuration is resolved in resolveOptions() using Symfony's OptionsResolver. This is the single normalization point for the entire client.
| Option | Type | Default | Purpose |
|---|---|---|---|
token | string | required | Bot authentication token |
loop | LoopInterface | Loop::get() | ReactPHP event loop |
logger | LoggerInterface|null | Monolog stdout | PSR-3 logger |
intents | array|int | Intents::getDefaultIntents() | Gateway intents bitmask |
loadAllMembers | bool|array | false | Enable member chunking for all or specific guild IDs |
disabledEvents | array | [] | Event names to skip in handler registry |
storeMessages | bool | false | Whether to cache messages |
retrieveBans | bool|array | false | Whether to fetch bans on guild create |
cache | array|CacheConfig|CacheInterface | [AbstractRepository::class => null] | Cache backend for repositories |
collection | string | Collection::class | Collection class implementing ExCollectionInterface |
useTransportCompression | bool | true | zlib-stream transport compression |
usePayloadCompression | bool | true | Per-payload compression |
socket_options | array | [] | Passed to React socket connector |
large_threshold | int|null | null | Guild member threshold for "large" guilds |
presence | array|null | null | Initial presence payload |
If intents is passed as an array of intent constants, resolveOptions() folds them into a single bitmask with bitwise OR. This happens once at resolution time — the rest of the system sees only the integer.
If loadAllMembers is enabled, the resolver enforces that GUILD_MEMBERS intent is included, throwing IntentException otherwise.
The cache option normalizer converts bare CacheInterface or CacheConfig values into the canonical [AbstractRepository::class => $config] array shape. The default null value means LegacyCacheWrapper (in-memory) is used. External cache backends are treated as experimental and logged as warnings.
__construct() does (in order)resolveOptions() — all normalization and validation happens here$token, $loop, $logger, $cacheConfig, $collectionClassSocketConnector and Connector (WebSocket factory)Handlers instance — the gateway event handler registryGUILD_CREATE, GUILD_DELETE, RESUMED, READY, GUILD_MEMBERS_CHUNK) are in disabledEventsHttp client with React driverFactory — the single part/repository factory for the systemClient part via factory — this is where root repositories are bornconnectWs() — initiates the gateway connectionrun() doespublic function run(): void
{
$this->loop->run();
}Nothing else. The loop was already wired during construction. run() simply unblocks the event loop. Do not add bootstrap logic here.
The eager constructor means the system is fully wired before run() is called. User code that registers event listeners between new Discord(...) and $discord->run() works because the loop has not started yet but all infrastructure is ready. Moving connection logic to run() would break this contract.
connectWs()Retrieves the gateway URL via setGateway(), then opens a WebSocket connection through $this->wsFactory. On success, calls handleWsConnection(). On failure, calls handleWsConnectionFailed() which retries after 5 seconds.
setGateway() calls the REST endpoint Endpoint::GATEWAY_BOT to get the gateway URL and session start limit. The URL is decorated with v, encoding, and optional compress=zlib-stream query parameters in buildParams(). If a resume_gateway_url was received from a prior READY, that is used instead.
handleWsConnection()Sets $this->connected = true, initializes the payload rate counter (120/60s limit with 5 reserved for heartbeats), and registers message, close, and error listeners on the WebSocket.
handleWsClose()Cancels heartbeat and payload timers. If $this->closing is true, returns silently. If the close code is a critical op code (checked via Op::getCriticalCloseCodes()), does not reconnect. Otherwise, sets $reconnecting = true and calls connectWs() after a 2-second delay.
handleHello()Received when the gateway connection is established. Calls setupHeartbeat() with the server-provided interval, then calls identify().
identify() vs resume()identify() sends OP_IDENTIFY with token, properties, intents, shard info, and presence. resume() sends OP_RESUME with token, session ID, and last sequence number. The gateway decides which path to use after reconnection via handleInvalidSession().
handleInvalidSession()If the session is resumable ($data->d is true), attempts resume(). Otherwise, calls identify() after a 2-second delay.
setupHeartbeat() creates a periodic timer at the server-specified interval. Each heartbeat() call sends OP_HEARTBEAT with the current sequence number and starts a guard timer. If no HEARTBEAT_ACK arrives within one heartbeat interval, the connection is closed with code 1001, triggering reconnect.
The ready sequence is the most delicate part of the bootstrap. It ensures all guilds are loaded and optionally chunked before userland code runs.
handleReady()Receives the READY payload. If $this->reconnecting is true, it skips full re-parsing and just emits reconnected. Otherwise:
resume_gateway_url for future reconnectsClient part with user data and stores sessionIdcontent->guilds and processes each through GuildCreate::handle()If all guilds are immediately available, calls ready() directly. Otherwise, sets up temporary GUILD_CREATE and GUILD_DELETE listeners to track when unavailable guilds become available. A 60-second safety timer also triggers ready() as fallback.
setupChunking()Called when all guilds are available. If loadAllMembers is false, calls ready() immediately. Otherwise, starts a periodic 5-second timer that calls checkForChunks().
checkForChunks()Drains the $largeGuilds array in batches of 50, sending OP_REQUEST_GUILD_MEMBERS for each. Guilds are added to $largeGuilds by addLargeGuild(), which is called from GuildCreate event handling. If loadAllMembers is an array of guild IDs, only those guilds are chunked.
handleGuildMembersChunk()Processes incoming member chunk payloads, caching each Member into the guild's member repository and each User into the top-level user repository. When a guild's cached member count reaches its member_count, it is removed from $largeSent. When $largeSent is empty, ready() fires.
ready()Guarded by $emittedInit — runs at most once. Initializes the voice manager if the class exists. Emits init (the primary ready event). Emits deprecated ready with a warning. Drains $unparsedPackets — dispatch events that arrived before init are processed here.
Root repositories are not properties of Discord itself. They live on the Client part (src/Discord/Parts/User/Client.php), which defines $repositories:
guilds → GuildRepositoryusers → UserRepositoryprivate_channels → PrivateChannelRepositoryemojis → EmojiRepositorysounds → SoundRepositorysticker_packs → StickerPackRepositorylobbies → LobbyRepositoryDiscord::__get() proxies all unknown property accesses to $this->client, so $discord->guilds resolves to $this->client->guilds. A small allowlist (loop, options, logger, http, application_commands) is intercepted before delegation.
These repositories are long-lived for the entire process lifetime. They are the system of record for cached Discord state.
Factory is created once in the constructor: $this->factory = new Factory($this). It holds a reference back to the Discord instance and provides part() and repository() methods for typed construction.
The Client part is the first object the factory creates: $this->client = $this->factory->part(Client::class, []). After that, all part and repository creation flows through this single factory instance.
Callers access the factory via $discord->getFactory() or the convenience $discord->factory($class, $data, $created) method. Do not create ad-hoc factory instances elsewhere — the system assumes one factory tied to one client.
The cacheConfig property is an array keyed by repository class names. getCacheConfig($repository_class) looks up the config for a specific repository class, falling back to AbstractRepository::class as the default key.
Default behavior: null config means LegacyCacheWrapper is used (in-memory WeakMap-backed cache). External cache backends (React\Cache\CacheInterface, Psr\SimpleCache\CacheInterface) are wrapped in CacheConfig and logged as experimental.
Per-repository cache configs can be set by passing an array keyed by repository class names in the cache option. This allows different repositories to use different cache backends.
| Property | Type | Meaning |
|---|---|---|
$connected | bool | WebSocket is currently open |
$closing | bool | Client is intentionally shutting down |
$reconnecting | bool | Client is in reconnect cycle |
$emittedInit | bool | init event has been emitted at least once |
$reconnectCount | int | Number of reconnections since boot |
$seq | int | Current gateway sequence number |
$sessionId | string | Current gateway session ID |
These flags are checked across connection, dispatch, and close handlers. Changing their semantics or lifecycle ordering can silently break reconnection or event delivery.
If no logger is provided, resolveOptions() creates a Monolog instance writing to stdout at Debug level with LineFormatter. The logger is stored on $this->logger and exposed via getLogger() and __get('logger').
processWsMessage() decodes JSON payloads and routes by opcode. OP_DISPATCH goes to handleDispatch(), which checks Handlers for a registered event class. If found, it instantiates the handler, runs handle() as a coroutine, and emits the event name with resolved data. If not found, it checks a static map of internal handlers (VOICE_STATE_UPDATE, VOICE_SERVER_UPDATE, RESUMED, READY, GUILD_MEMBERS_CHUNK).
Before $emittedInit is true, non-critical dispatch events are queued in $unparsedPackets rather than processed immediately. Only GUILD_CREATE and GUILD_DELETE are allowed through during the ready flow.
Stop if you see:
run() instead of __construct()Factory instance created anywhereresolveOptions()$emittedInit checked or set from outside Discord.phpGUILD_CREATE, GUILD_DELETE, READY, GUILD_MEMBERS_CHUNK) removed without understanding the ready flowDiscord.phpOp::getCriticalCloseCodes()Client partresolveOptions() handles any new option with proper type, default, and normalization__construct() wiring order preserved — options first, then HTTP, then factory, then client, then connectrun() remains a one-liner$connected, $closing, $reconnecting, $emittedInit) not repurposedconnectWs() → handleWsConnection() → handleHello() → identify() chain intact$unparsedPackets drain in ready() still workshandleWsClose() → delay → connectWs()) handles critical vs non-critical close codesDiscord.php is the single eager orchestrator for a long-running CLI process. It resolves options once, wires dependencies once, connects to the gateway eagerly, and starts the loop on demand. Keep it centered on that job — do not turn it into a service locator, request handler, or lazy-boot framework.
© discord-php, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/runtime-bootstrap-keeper of discord-php/DiscordPHP.
Open the folder on GitHubat commit 580c66a
Runtime Bootstrap Keeper 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 |
|---|---|---|---|---|---|---|
| Runtime Bootstrap Keeper this skilldiscord-php/DiscordPHP | 1.1k | — | ~4k | Automated safety check: Pass | MIT | |
| Php ConcurrencyHoangNguyen0403/agent-skills-standard | 570 | — | ~683 | Automated safety check: Pass | MIT | |
| Dt Obs ServicesDynatrace/dynatrace-for-ai | 161 | — | ~3.3k | Automated safety check: Pass | Apache-2.0 | |
| Code Audit3stoneBrother/code-audit | 893 | 1 repos | ~2.7k | Automated safety check: Pass | None | |
| WooCommerce Code Reviewwoocommerce/woocommerce | 11k | 3 repos | ~1.1k | Automated safety check: Pass | Custom licence | |
| Skill Doli Code ReviewDolibarr/dolibarr | 7.7k | 1 repos | ~1.1k | Automated safety check: Pass | MIT |
HoangNguyen0403/agent-skills-standard
Implement concurrency and non-blocking I/O in modern PHP. An agent skill from HoangNguyen0403/agent-skills-standard.
Dynatrace/dynatrace-for-ai
Service performance monitoring with RED metrics (Rate, Errors, Duration) and runtime-specific telemetry for Java, .NET, Node.js, Python, PHP, and Go.
3stoneBrother/code-audit
Professional code security audit skill covering 55+ vulnerability types.
woocommerce/woocommerce
Reviews WooCommerce code changes against the project's standards, flagging backend PHP architecture, naming, documentation, data integrity and testing violations.
Dolibarr/dolibarr
Reviews Dolibarr PHP code for compliance with coding standards and security best practices, and fixes identified issues.
symfony/symfony
Decide whether open Bug PRs target the correct branch. An agent skill from symfony/symfony.
discord-php/DiscordPHP
Maintain test and documentation alignment — PHPUnit tests, async testing patterns, PHPDoc contracts, guide pages, and documentation workflow.
discord-php/DiscordPHP
Audit checklist for DiscordPHP bots and API libraries — stop the bot token leaking to third-party APIs or logs, keep secrets out of customids and exception messages, use constant-time comparison and…
discord-php/DiscordPHP
Scaffold and maintain a DiscordPHP-based bot or an API-library-on-DiscordPHP (the DiscordPHP-MTG / DiscordPHP-NHA / DiscordPHP-Sabacc pattern) — client subclass, third-party HTTP layer, Parts…
discord-php/DiscordPHP
Build DiscordPHP slash commands and message components — global command trees with subcommands, user- AND guild-installable commands usable in DMs / group DMs / guild channels, Components V2…
discord-php/DiscordPHP
Work with DiscordPHP's infrastructure utilities — CacheWrapper, CacheConfig, BigInt, Multipart, Endpoint::bind URL templates, Collection base class, and domain Exceptions.
discord-php/DiscordPHP
Maintain Part domain models — fillable attributes, mutators, typed nested data, save/fetch behavior, permission checks, PHPDoc, and repository bindings.
Categories
Maintain Discord.php runtime bootstrapping, startup options, event loop, gateway connection, reconnection, member chunking, cache configuration, and process lifecycle. Runtime Bootstrap Keeper is an agent skill from discord-php/DiscordPHP.php runtime bootstrapping, startup options, event loop, gateway connection, reconnection, member chunking, cache configuration, and process lifecycle.
Runtime Bootstrap Keeper fits situations like: touching Discord.php; root repositories.
Run `npx skills add discord-php/DiscordPHP --skill runtime-bootstrap-keeper -a claude-code`. Or copy the skill folder (.agents/skills/runtime-bootstrap-keeper in discord-php/DiscordPHP) into .claude/skills/runtime-bootstrap-keeper in your project. Claude Code loads it when a task matches its description.
Run `npx skills add discord-php/DiscordPHP --skill runtime-bootstrap-keeper -a codex`. Or copy the skill folder (.agents/skills/runtime-bootstrap-keeper in discord-php/DiscordPHP) into .agents/skills/runtime-bootstrap-keeper 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 discord-php/DiscordPHP --skill runtime-bootstrap-keeper -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/runtime-bootstrap-keeper, .gemini/skills/runtime-bootstrap-keeper, .github/skills/runtime-bootstrap-keeper and .opencode/skills/runtime-bootstrap-keeper in your project.
SKILL.md names no scripts, command-line tools or credentials: Runtime Bootstrap Keeper is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Runtime Bootstrap Keeper is published under the MIT licence (the repository's licence). 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 Runtime Bootstrap Keeper: Php Concurrency (HoangNguyen0403/agent-skills-standard, 570 stars), Dt Obs Services (Dynatrace/dynatrace-for-ai, 161 stars), Code Audit (3stoneBrother/code-audit, 893 stars) and WooCommerce Code Review (woocommerce/woocommerce, 11k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
discord-php (a GitHub organization) maintains it in discord-php/DiscordPHP, which has 1,080 GitHub stars. The repository holds 14 skills in this directory. The repository was last updated on October 6, 2026.
Source: discord-php/DiscordPHP on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.