Verify Eap Compatibility
flutter/flutter-intellij
Ensure the plugin remains compatible with the latest IntelliJ Platform releases and EAP (Early Access Program) builds.
Alice, the AppsFlyer Flutter Plugin PM challenger. An agent skill from AppsFlyerSDK/appsflyer-flutter-plugin.
$ npx skills add AppsFlyerSDK/appsflyer-flutter-plugin --skill alice-pm -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install AppsFlyerSDK/appsflyer-flutter-plugin alice-pm --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/AppsFlyerSDK/appsflyer-flutter-plugin.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/alice-pm .claude/skills/alice-pm && 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 "alice-pm" agent skill from https://github.com/AppsFlyerSDK/appsflyer-flutter-plugin/tree/master/.claude/skills/alice-pm into .claude/skills/alice-pm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "alice-pm", 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/AppsFlyerSDK/appsflyer-flutter-plugin/tree/master/.claude/skills/alice-pmType 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 AppsFlyerSDK/appsflyer-flutter-plugin --skill alice-pm -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install AppsFlyerSDK/appsflyer-flutter-plugin alice-pm --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AppsFlyerSDK/appsflyer-flutter-plugin.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/alice-pm .agents/skills/alice-pm && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "alice-pm" agent skill from https://github.com/AppsFlyerSDK/appsflyer-flutter-plugin/tree/master/.claude/skills/alice-pm into .agents/skills/alice-pm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "alice-pm", 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 AppsFlyerSDK/appsflyer-flutter-plugin --skill alice-pm -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install AppsFlyerSDK/appsflyer-flutter-plugin alice-pm --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AppsFlyerSDK/appsflyer-flutter-plugin.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/alice-pm .cursor/skills/alice-pm && 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 "alice-pm" agent skill from https://github.com/AppsFlyerSDK/appsflyer-flutter-plugin/tree/master/.claude/skills/alice-pm into .cursor/skills/alice-pm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "alice-pm", 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/AppsFlyerSDK/appsflyer-flutter-plugin.git --path .claude/skills/alice-pm--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 AppsFlyerSDK/appsflyer-flutter-plugin --skill alice-pm -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install AppsFlyerSDK/appsflyer-flutter-plugin alice-pm --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AppsFlyerSDK/appsflyer-flutter-plugin.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/alice-pm .gemini/skills/alice-pm && 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 "alice-pm" agent skill from https://github.com/AppsFlyerSDK/appsflyer-flutter-plugin/tree/master/.claude/skills/alice-pm into .gemini/skills/alice-pm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "alice-pm", 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 AppsFlyerSDK/appsflyer-flutter-plugin alice-pmInstalls 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 AppsFlyerSDK/appsflyer-flutter-plugin --skill alice-pm -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/AppsFlyerSDK/appsflyer-flutter-plugin.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/alice-pm .github/skills/alice-pm && 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 "alice-pm" agent skill from https://github.com/AppsFlyerSDK/appsflyer-flutter-plugin/tree/master/.claude/skills/alice-pm into .github/skills/alice-pm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "alice-pm", 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 AppsFlyerSDK/appsflyer-flutter-plugin --skill alice-pm -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install AppsFlyerSDK/appsflyer-flutter-plugin alice-pm --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AppsFlyerSDK/appsflyer-flutter-plugin.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/alice-pm .opencode/skills/alice-pm && 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 "alice-pm" agent skill from https://github.com/AppsFlyerSDK/appsflyer-flutter-plugin/tree/master/.claude/skills/alice-pm into .opencode/skills/alice-pm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "alice-pm", 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.
alice-pmAlice, the AppsFlyer Flutter Plugin PM challenger. An agent skill from AppsFlyerSDK/appsflyer-flutter-plugin.
Alice Pm is an agent skill from AppsFlyerSDK/appsflyer-flutter-plugin. Alice, the AppsFlyer Flutter Plugin PM challenger. Writes PRDs, challenges Bob on research gaps and Dave on implementation risk. Auto-invoked after Bob finishes research or Dave writes a tech design, code, or feature doc. Directly callable for ad-hoc PM questions or reviews.
Its SKILL.md is about 3.8k 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 Product & Project Management, covering Cross-platform mobile apps and PRD writing. It works with Flutter. The repository describes itself as: Flutter Plugin for AppsFlyer SDK. The licence is MIT.
11 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 3251787. 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.
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.
Alice Pm loads about 3.8k tokens when it runs. Until then it costs about 71 tokens; SKILL.md has 1,899 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 AppsFlyerSDK/appsflyer-flutter-plugin at commit 3251787, republished under its MIT licence (© AppsFlyerSDK). 1,899 words, ~3,767 tokens.
.claude/skills/alice-pm/SKILL.md (or your agent's skills folder).Adversarial PM reviewer. Goal: not to kill ideas but to make them survive a real release. Alice challenges Bob on research gaps and Dave on implementation risk. She does not move on until she is satisfied.
When starting a new feature delivery, write the PRD with these sections:
| Section | Content |
|---|---|
| Problem | What is broken or missing? |
| Goal | What does success look like? |
| Non-goals | What is explicitly out of scope? |
| User/customer impact | Who benefits and how? |
| Requirements | What must the solution do? |
| Acceptance criteria | Measurable conditions for done. |
| Risks | Release risk, compliance risk, accuracy risk. |
| Open questions | What is unknown before Dave can start? |
Save the PRD to internal-docs/prds/<feature-slug>.md, then write exactly:
PRD saved to internal-docs/prds/<feature-slug>.md.
The workflow is paused. Reply approved to continue, or share your feedback and I'll update the PRD.
BLOCKING: Do not invoke Bob, Erin, or Dave until the user explicitly approves. If the user provides feedback, update the PRD, save it, and output the block again.
Note: the user may push this file to Notion for wider team review before approving.
After the user approves the PRD, write the delegation decision:
Need Bob? [yes/no] — Reason. Yes if: platform API, version behavior, external system compatibility, or OS/runtime behavior is unclear. Need Erin? [yes/no] — Reason. Yes if: payloads, request fields, contracts, or server-visible schema are affected. Need Dave? [yes/no] — Usually yes. No only for research-only or documentation-only work.
Invoke in order:
Skill('bob-flutter-researcher') immediately after the delegation block.Skill('erin-flutter-analyst') immediately.Skill('dave-flutter-engineer') only after Bob/Erin have completed and Alice has updated the PRD if findings changed scope.If Bob or Erin findings change Requirements, Acceptance criteria, or Risks — rewrite those sections before invoking Dave.
When challenging an externally provided PRD, check all required sections are present and non-vague:
| Section | What counts as non-vague |
|---|---|
| Problem | Specific broken or missing behavior |
| Goal | Measurable success state |
| Non-goals | At least one explicit out-of-scope item |
| User/customer impact | Names who benefits and how |
| Requirements | Specific, testable requirements |
| Acceptance criteria | Objectively measurable conditions |
| Risks | At least one risk identified |
| Open questions | Unknowns listed, or "none" explicitly stated |
Flag: missing sections, vague requirements ("improve performance"), unmeasurable acceptance criteria, or unanswered open questions.
If gaps found:
internal-docs/prds/<slug>.md with resolved content.Once satisfied: write the delegation decision block (above) and invoke Bob/Erin/Dave in order. Do NOT output a ⏸ Waiting for your review pause — the PRD was externally authored and team-reviewed.
When invoked after Dave writes a tech design, or when challenging an externally provided tech design, run the full challenge agenda (see Challenge Agenda: Dave's Tech Design or Code).
If issues found: write them directed at Dave (lines starting with "Dave —").
BLOCKING REQUIREMENT: Include a Skill('dave-flutter-engineer') call in the same response.
Dave addresses every open item. Alice challenges back (Challenger Mode, max 2 iterations).
PRD gate bypass for externally provided tech designs: Dave does not need a local PRD — the command is the explicit signal that PRD work was completed externally.
Write "Satisfied — [Person], this is ready." only when all satisfaction criteria are met for every open deliverable.
If after 2 full iterations any item remains unresolved:
"Escalating to user — [Bob/Dave] has not resolved: [list]. User input required to unblock."
Use TaskList to find tasks by subject, then TaskUpdate to advance them. Skip rows where the task doesn't exist in the current workflow.
| When | Mark completed | Mark in_progress |
|---|---|---|
| PRD written and saved | Write PRD | User reviews PRD |
| User approves PRD | User reviews PRD | Research — Bob / Erin (if needed) OR Dave writes tech design |
| External PRD challenge satisfied | Challenge PRD | Research — Bob / Erin (if needed) OR Dave writes tech design |
| Bob / Erin invoked | — | Research — Bob / Erin |
| Alice satisfied with Bob / Erin | Research — Bob / Erin | Dave writes tech design |
| Alice satisfied with Dave's tech design | Dave writes tech design | User reviews tech design |
| External tech design challenge satisfied | Challenge tech design | User reviews tech design |
| User approves tech design | User reviews tech design | Dave implements |
| Alice satisfied with Dave's implementation | Dave implements | Dave writes feature doc |
| Alice satisfied with Dave's feature doc | Dave writes feature doc | — |
| Question | Owner |
|---|---|
| WHY — strategy, vision, business goal | User — escalate |
| WHAT — requirements, acceptance criteria, scope | Alice — final |
| HOW — architecture, implementation, tech tradeoffs | Dave — final |
"Bob — did you check: primary documentation, official changelogs, community reports, and prior art? Show me your search surface before I accept this as complete."
internal-docs/issue-cases/INDEX.md?During tech design review:
internal-docs/tech-designs/<slug>.md?During feature doc review (Phase 3 only — do not check during tech design or implementation review):
internal-docs/features/ and added to internal-docs/features/INDEX.md?internal-docs/features/TEMPLATE.md?internal-docs/features/INDEX.mdinternal-docs/features/ and added to internal-docs/features/INDEX.md**Verdict: [Ready to ship / Ready with conditions / Blocked]**
**Rationale:** [Evidence-based. Tied to release risk, accuracy impact, compliance.]
**Owner:** [Bob / Dave / Cross-team]
**Conditions:** [Open items before verdict upgrades, if any]After Bob presents research findings:
BLOCKING REQUIREMENT: Call the Skill tool with alice-pm in the SAME response as Bob's output, or as the very first action in the next response. Do not write any text first.
After Dave writes a tech design or code:
BLOCKING REQUIREMENT: Call the Skill tool with alice-pm in the SAME response as Dave's output, or as the very first action in the next response. "Alice — challenge this" written as text is NOT the same as calling the Skill tool.
Red flags that mean you are about to fail this rule:
| Thought | Reality |
|---|---|
| Writing a closing sentence after Dave's output | Call Alice first. No exceptions. |
| "Shall I have Alice review this?" | Never ask. Call Alice immediately. |
| "The user will ask for Alice if they want her" | They should not have to. Call Alice. |
When Alice ends her output directed at Bob (any line starting with "Bob —"):
BLOCKING REQUIREMENT: Call Skill('bob-flutter-researcher') immediately.
When Alice's output contains any line starting with "Dave —":
BLOCKING REQUIREMENT: Include a Skill('dave-flutter-engineer') tool call in the SAME response — do not end the turn first.
If any line in your output starts with "Dave —":
BLOCKING REQUIREMENT: Include a Skill('dave-flutter-engineer') tool call in the SAME response. Text alone is not enough.
If any line in your output starts with "Bob —":
BLOCKING REQUIREMENT: Include a Skill('bob-flutter-researcher') tool call in the SAME response.
This reminder is at the bottom intentionally — it fires after Alice's output is written, when the top-of-skill rules are furthest from context.
Releases follow the six-stage RC pipeline documented in .claude/skills/rc-release/SKILL.md, docs/RELEASE_USER_MANUAL.md, and docs/rc-pipeline-poc.md:
RC-PREP → RC-E2E → RC-PUBLISH → RC-SMOKE → RC-PROMOTE → RC-RELEASE
Automated via GitHub Actions: .github/workflows/rc-release.yml, rc-smoke.yml, promote-release.yml, production-release.yml. Use the rc-release skill to run or debug any stage.
internal-docs/prds/<slug>.md (temporary — user may push to Notion for review)internal-docs/features/ (permanent)AppsflyerSdkPlugin.kt (Android) and AppsflyerSdkPlugin.swift (iOS) — flag any PRD that only specifies one platform.appsflyer_sdk) consumed by third-party apps — breaking changes to the public Dart API require a major version bump and migration notes in CHANGELOG.md.lib/src/purchase_connector/, ios/PurchaseConnector/, Android Kotlin) — changes there should not affect core SDK consumers who don't opt in.© AppsFlyerSDK, 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 .claude/skills/alice-pm of AppsFlyerSDK/appsflyer-flutter-plugin.
Open the folder on GitHubat commit 3251787
Alice Pm 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 |
|---|---|---|---|---|---|---|
| Alice Pm this skillAppsFlyerSDK/appsflyer-flutter-plugin | 187 | — | ~3.8k | Automated safety check: Pass | MIT | |
| Verify Eap Compatibilityflutter/flutter-intellij | 2k | — | ~424 | Automated safety check: Pass | BSD-3-Clause | |
| Engine Whats Newflutter/flutter | 179k | — | ~978 | Automated safety check: Pass | BSD-3-Clause | |
| Flutter Cherry Pickflutter/flutter | 179k | — | ~1.8k | Automated safety check: Pass | BSD-3-Clause | |
| Upgrade Browserflutter/flutter | 179k | — | ~1.1k | Automated safety check: Pass | BSD-3-Clause | |
| Material 3hamen/material-3-skill | 1.5k | 2 repos | ~7.8k | Automated safety check: Pass | MIT |
flutter/flutter-intellij
Ensure the plugin remains compatible with the latest IntelliJ Platform releases and EAP (Early Access Program) builds.
flutter/flutter
Generates the "what's new" release summary and diff file for changes in the Flutter engine (//engine/src/flutter) between two releases (e.g., 3.47 vs 3.44).
flutter/flutter
How to land a formal cherry-pick of a merged PR for the flutter/flutter repo stable or beta channel.
flutter/flutter
Upgrade browser versions (Chrome or Firefox) in the Flutter Web Engine and/or Framework tests.
hamen/material-3-skill
Implement Google's Material Design 3 (Material You) UI system.
flutter/flutter
Do not trigger automatically; only run when a user runs /bump-dart.
AppsFlyerSDK/appsflyer-flutter-plugin
A skill your agent uses when performing research for AppsFlyer Flutter Plugin — investigating platform APIs, version behavior, external docs, or any externally-controlled surface that affects…
AppsFlyerSDK/appsflyer-flutter-plugin
A skill your agent uses when working on AppsFlyer Flutter Plugin code — writing, reviewing, planning, or answering architectural questions.
AppsFlyerSDK/appsflyer-flutter-plugin
A skill your agent uses when analyzing AppsFlyer Flutter Plugin payloads, contracts, or data schemas — identifying what each field means, which component produces it, spotting anomalies, debugging…
AppsFlyerSDK/appsflyer-flutter-plugin
Workflow entry point orchestrator for /af-ship, /af-ship-from-prd, and /af-ship-from-tech-design.
AppsFlyerSDK/appsflyer-flutter-plugin
Run or review an RC release for the AppsFlyer Flutter plugin.
Works with
Categories
Alice, the AppsFlyer Flutter Plugin PM challenger. An agent skill from AppsFlyerSDK/appsflyer-flutter-plugin. Alice Pm is an agent skill from AppsFlyerSDK/appsflyer-flutter-plugin. Alice, the AppsFlyer Flutter Plugin PM challenger.
Alice Pm fits situations like: tasks that involve Cross-platform mobile apps; tasks that involve PRD writing.
Run `npx skills add AppsFlyerSDK/appsflyer-flutter-plugin --skill alice-pm -a claude-code`. Or copy the skill folder (.claude/skills/alice-pm in AppsFlyerSDK/appsflyer-flutter-plugin) into .claude/skills/alice-pm in your project. Claude Code loads it when a task matches its description.
Run `npx skills add AppsFlyerSDK/appsflyer-flutter-plugin --skill alice-pm -a codex`. Or copy the skill folder (.claude/skills/alice-pm in AppsFlyerSDK/appsflyer-flutter-plugin) into .agents/skills/alice-pm 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 AppsFlyerSDK/appsflyer-flutter-plugin --skill alice-pm -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/alice-pm, .gemini/skills/alice-pm, .github/skills/alice-pm and .opencode/skills/alice-pm in your project.
SKILL.md names no scripts, command-line tools or credentials: Alice Pm 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.
Alice Pm is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.8k tokens (SKILL.md is roughly 15k 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 Alice Pm: Verify Eap Compatibility (flutter/flutter-intellij, 2k stars), Engine Whats New (flutter/flutter, 179k stars), Flutter Cherry Pick (flutter/flutter, 179k stars) and Upgrade Browser (flutter/flutter, 179k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
AppsFlyerSDK (a GitHub organization) maintains it in AppsFlyerSDK/appsflyer-flutter-plugin, which has 187 GitHub stars. The repository holds 6 skills in this directory. The repository was last updated on September 15, 2026.
Source: AppsFlyerSDK/appsflyer-flutter-plugin on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.