Quick way to peek inside a JWT without spinning up a debugger or hitting jwt.io. Paste in a token and you get the header, payload, and all claims formatted cleanly, with exp/iat timestamps converted to human-readable dates. It'll yell at you if it spots alg:none (the classic bypass attack), tokens with no expiry, or sensitive data sitting in plain view. This is decode only, no signature verification, so it's for inspection and debugging, not trust decisions. If you need to actually verify a token's signature, you want jwt-validate instead.
npx -y skills add jsonwebtoken/jwt-skills --skill jwt-decode --agent claude-codeInstalls into .claude/skills of the current project.
Decode a JWT by base64url-decoding its header and payload. Does NOT verify signatures — use jwt-validate for that.
. into three parts (header, payload, signature).exp, nbf, iat — show both the Unix timestamp and human-readable UTC. If exp is past, note expired and by how long.## Header
{ "alg": "RS256", "typ": "JWT", "kid": "abc123" }
## Payload
{ "iss": "https://auth.example.com/", "sub": "user|12345", "exp": 1735689600 }
exp: 2025-01-01T00:00:00Z — EXPIRED (3 months ago)
iat: 2024-12-31T00:00:00Z
## Signature
Algorithm: RS256 | Signature: [base64url string]
(Not verified — use jwt-validate to verify)
Flag these prominently when found:
alg: none — Token is unsigned. Warn: "This token has no signature and cannot be trusted. Any party could have created or modified it." This is a known attack vector (CVE-2015-9235) where attackers strip signatures to bypass verification.exp — Token never expires. Flag as a security risk.jku/jwk/x5u in header — These can be used to trick verifiers into fetching attacker-controlled keys. Flag if present.cty header is "JWT", the payload is a nested JWT — decode recursively.jwt-validate for verification.juliusbrussee/caveman
mattpocock/skills
shadcn/improve
obra/superpowers
forrestchang/andrej-karpathy-skills
vercel-labs/skills