Claude Code / Codex / Agent Skills / and many more agents skill for integrating Fayda Digital ID (VeriFayda 2.0 / eSignet) — Ethiopia's national ID — into apps. Covers the OIDC+PKCE flow, JWT client assertions, KYC claims, and error handling, with Node.js and Python reference code.
# fayda-esignet
A Claude Code / Agent Skills skill for integrating **Fayda Digital ID (VeriFayda 2.0 / eSignet)** — Ethiopia's national ID system — into web and mobile apps.
Drop this into Claude's skills folder and it teaches Claude the full OAuth 2.0 / OpenID Connect (PKCE) flow that eSignet uses, including the parts that are specific to Fayda: JWT-signed client assertions instead of a client secret, KYC-style claim requests, multi-language (English/Amharic) claim decoding, and eSignet's specific error codes.
## What it covers
- **Authorization Code Flow with PKCE** — generating `code_verifier`/`code_challenge`, building the authorization URL, `acr_values` (OTP / biometrics), `claims_locales`, and the `claims` object for requesting specific KYC fields as essential/optional.
- **Client assertion JWTs** — signing a JWT with the app's private key (RS256) for token exchange, since eSignet doesn't use a plain `client_secret`.
- **Token exchange & userinfo retrieval** — the full request/response shape, plus decoding the JWT-encoded userinfo response.
- **Multi-language claims** — why userinfo keys change shape (`name` → `name#en` / `name#am`) when more than one locale is requested.
- **Error handling** — what `invalid_request`, `invalid_transaction`, and `invalid_assertion` actually mean and how to debug each.
- **Working reference code** in both Node.js/Express (`jose`) and Python/Flask (`authlib`).
## Install
### Claude Code CLI
Personal (available in every project):
```bash
mkdir -p ~/.claude/skills
git clone
github.com /fayda-esignet ~/.claude/skills/fayda-esignet
```
Project-local (travels with a specific repo — commit it):
```bash
mkdir -p .claude/skills
git clone
github.com /fayda-esignet .claude/skills/fayda-esignet
```
Or download the `.skill` zip and unzip it into either location:
```bash
unzip fayda-esignet.skill -d ~/.claude/skills/
```
Start (or restart) `claude` and it's available — Claude will reach for it automatically when yo …