emerging-market-skills
Agent skills for building software that works on the other five billion phones.
AI coding tools write for the environment they were trained on: fast networks, recent hardware, English interfaces, and bandwidth nobody pays for by the megabyte. These skills change that. Install them and your assistant starts asking what happens on 1GB of RAM, what an SMS costs in Lagos, and whether that button still fits once it is translated.
Built for PMs and engineers. Technical and build-focused — architecture, budgets, and code, not market sizing or go-to-market.
Install
Claude Code:
/plugin marketplace add Kaguara/emerging-market-skills
/plugin install emerging-market-skills@kaguara
Skills load on demand — Claude reads each description and pulls in the full skill only when the work matches.
Using Codex, Cursor, Copilot, Gemini CLI, Aider, Windsurf, or Zed? They read
AGENTS.md — one flat file with all 65 rules, generated from the
same source and kept current by CI. Drop it at your project root. Full
instructions for every tool in docs/INSTALL.md.
Then just work. Or invoke a review directly:
Use emerging-market-review on this PR. Target market is Kenya, tier C Android.
The skills
| Skill | Answers |
|---|---|
| emerging-market-review | The router. Establishes the target, dispatches to the rest, ranks findings by user impact. |
| network-resilience | What happens when the network is absent, slow, metered, or lying? |
| payload-budgets | How many bytes before someone on 2G gives up? |
| low-end-device-performance | Does it survive 2GB of RAM, an old SoC, and a tired battery? |
| integration-cost-modeling | What does one user action cost — in SMS, API calls, tokens, and their data bundle? |
| localization-and-literacy-ux | Does the interface survive translation, RTL, and a first-time smartphone user? |
| identity-and-onboarding | SIM churn, unreliable government ID authorities, and face capture that works on darker skin in bad light. |
Two more land in v0.2: money-movement and field-testing-and-telemetry.
What a skill actually is
Not a prompt. Each skill is three files, and the third is the one that makes this different from a list of best practices:
skills/network-resilience/
├── SKILL.md # judgment and tradeoffs — read by the model when it reasons
├── rules.yml # thresholds with severity, detection, remedy, and evidence
└── scripts/ # a runnable audit that checks a real artifact
rules.yml is the connective tissue. The prose cites rule IDs, CI fails if the
two drift apart, and every critical rule must carry evidence — field,
published, or vendor — or it cannot be critical. That constraint applies to the
maintainers too: two rules currently sit at warning with a TODO because the
evidence to promote them does not exist yet.
- id: NET-003
rule: Every state-changing request carries a client-generated idempotency key.
severity: critical
evidence:
- tier: field
source: Juvo Mobile — 6 markets, Central & South America, 2015–2020
observation: >
Ambiguous timeouts caused manual user retries. Without a stable key the
duplicate was indistinguishable from a second legitimate action.
It works on real code
examples/movietonight-audit.md audits a production Next.js product. The interesting part is not the two findings — it is that the first pass produced ten false ones, and the review rubric caught them before they were reported:
The first pass grepped for
fetch(without a timeout and found ten hits. All ten were false; the options object spans multiple lines. Reading the files showed every call site already setsAbortSignal.timeoutand every model call setsmax_output_tokens. The product passes NET-005 and COST-004 cleanly.
A review that reports what a Next.js app usually gets wrong, rather than what
this one does, buries its real findings under fabricated ones. That rule is
REVIEW-003, and it is in the repo because it is the failure mode these tools
have by default.
The constraints being designed around
| Network | Not slow — intermittent, ambiguous, and dishonest. Requests that neither succeed nor fail. Connectivity flags that report a live link carrying no traffic. |
| Device | 1–2GB RAM shared with the OS, a CPU a quarter as fast as yours, storage permanently near full, a battery at 60% of its original capacity. |
| Cost | Two meters running: yours per SMS, per call, per token; theirs a prepaid bundle bought in fifty-cent increments, from which your prefetch is deducted. |
| Interface | Read in a language with longer words than English, possibly by someone using a smartphone for the first time, who has not learned that a magnifying glass means search. |
Tier C — entry-level Android on congested 3G — is the design target throughout. Tiers are defined in docs/EVIDENCE.md.
Where this comes from
A decade of building for these markets: credit risk on telecom data across six
Latin American markets at Juvo, identity SDKs covering 200M+ identities
at Smile Identity, background checks for informal workers in Kenya,
a mobile wallet at IBM Research Africa, and creator tooling across Africa at
Wowzi. Rules tagged field come from those products. Rules tagged published
or vendor cite their source in docs/SOURCES.md.
The field tags are the point. Anything else here, a model could have guessed.
Contributing
Field reports that contradict a rule are the most welcome contribution. If something here does not hold in your market, on your users' devices, that is a boundary nobody has mapped yet. You do not need to propose a fix — say what you saw. Open a field report.
Rule changes need a market, a device tier, an observed effect, and an evidence tier. Full detail in CONTRIBUTING.md; the authoring spec is docs/AUTHORING.md.
pip install -r requirements.txt
python3 tools/validate_skills.py
Maintenance
Issues triaged weekly. Rules are versioned and never silently changed — a
replaced rule keeps its ID with superseded_by set, because someone cited it in
a code review once. Maintained by one person, so responses are sometimes slow; a
nudge after two weeks is welcome rather than rude.
MIT licensed. Citation metadata in CITATION.cff.
No comments yet
Be the first to share your take.