{"id":"d9338185-f67e-4e8a-89d3-17354eaceed9","shortId":"Esn6GL","kind":"skill","title":"age-file-encryption","tagline":"Encrypt and decrypt files or streams using age — a simple, modern, and secure encryption tool with small explicit keys, passphrase support, SSH key support, post-quantum hybrid keys, and UNIX-style composability. No config options, no footguns.","description":"# age File Encryption\n\n[age](https://github.com/FiloSottile/age) is a minimal, modern encryption tool. It replaces GPG for most file encryption needs with a much simpler design: small explicit keys, no config files, and clean composability with UNIX pipes.\n\n## When to Use This Skill\n\n- Encrypting files or directories before storing or sharing them\n- Securely sending files to specific recipients by public key\n- Encrypting secrets with a passphrase for backup or storage\n- Encrypting to existing SSH public keys (ed25519 or RSA)\n- Encrypting to multiple recipients at once\n- Encrypting to a GitHub user's SSH keys\n- Automating encryption/decryption in scripts\n\n## Installation\n\n```bash\n# macOS / Linux (Homebrew)\nbrew install age\n\n# Debian / Ubuntu 22.04+\napt install age\n\n# Arch Linux\npacman -S age\n\n# Alpine Linux\napk add age\n\n# Fedora\ndnf install age\n\n# Windows\nwinget install --id FiloSottile.age\n\n# From source (requires Go)\ngo install filippo.io/age/cmd/...@latest\n```\n\nPre-built binaries:\n```\nhttps://dl.filippo.io/age/latest?for=linux/amd64\nhttps://dl.filippo.io/age/latest?for=darwin/arm64\nhttps://dl.filippo.io/age/latest?for=windows/amd64\n```\n\n## Core Concepts\n\n| Term | Meaning |\n|------|---------|\n| **recipient** | Public key — who can decrypt the file |\n| **identity** | Private key file — used to decrypt |\n| **age public key** | Starts with `age1...` |\n| **age private key** | Starts with `AGE-SECRET-KEY-1...`, stored in a key file |\n\n## Key Generation\n\n```bash\n# Generate a key pair and save to key.txt\nage-keygen -o key.txt\n# Output: Public key: age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p\n\n# Print only the public key from an existing key file\nage-keygen -y key.txt\n```\n\n## Encrypting Files\n\n### With a recipient's public key\n\n```bash\n# Encrypt a file\nage -r age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p -o secret.txt.age secret.txt\n\n# Using a pipe\ncat secret.txt | age -r age1ql3z7hjy54... > secret.txt.age\n```\n\n### With a passphrase\n\n```bash\n# age will prompt for a passphrase (or autogenerate a secure one)\nage -p secret.txt > secret.txt.age\n```\n\n### To multiple recipients\n\n```bash\n# Each recipient can independently decrypt the file\nage -o file.age \\\n  -r age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p \\\n  -r age1lggyhqrw2nlhcxprm67z43rta597azn8gknawjehu9d9dl0jq3yqqvfafg \\\n  file.txt\n```\n\n### With a recipients file\n\n```bash\n# recipients.txt — one public key per line, # for comments\ncat recipients.txt\n# Alice\nage1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p\n# Bob\nage1lggyhqrw2nlhcxprm67z43rta597azn8gknawjehu9d9dl0jq3yqqvfafg\n\nage -R recipients.txt file.txt > file.txt.age\n```\n\n### With SSH keys\n\n```bash\n# Encrypt using an SSH public key\nage -R ~/.ssh/id_ed25519.pub secret.txt > secret.txt.age\n\n# Encrypt to all SSH keys on a GitHub profile\ncurl https://github.com/username.keys | age -R - secret.txt > secret.txt.age\n```\n\n### With armor (PEM text output)\n\n```bash\n# Produces ASCII-safe output, safe to paste in email or config\nage -a -r age1ql3z7... secret.txt > secret.txt.age\n```\n\n### Encrypting a directory (tar + age)\n\n```bash\ntar czf - ~/data | age -r age1ql3z7... > data.tar.gz.age\n```\n\n## Decrypting Files\n\n### With an identity (key) file\n\n```bash\nage -d -i key.txt secret.txt.age > secret.txt\n```\n\n### With passphrase\n\n```bash\n# age auto-detects passphrase-encrypted files\nage -d secret.txt.age > secret.txt\n# Prompts: Enter passphrase:\n```\n\n### With an SSH private key\n\n```bash\nage -d -i ~/.ssh/id_ed25519 secret.txt.age > secret.txt\n```\n\n### Decrypting to stdout (piping)\n\n```bash\nage -d -i key.txt archive.tar.gz.age | tar xzf -\n```\n\n## Post-Quantum Keys (v1.3.0+)\n\nHybrid post-quantum keys protect against future quantum computer attacks.\n\n```bash\n# Generate a post-quantum key pair\nage-keygen -pq -o key.txt\n\n# Extract the public key (recipients start with age1pq1...)\nage-keygen -y key.txt > recipient.txt\n\n# Encrypt\nage -R recipient.txt file.txt > file.txt.age\n\n# Decrypt\nage -d -i key.txt file.txt.age > file.txt\n```\n\n## Passphrase-Protected Identity Files\n\nStore your private key encrypted with a passphrase:\n\n```bash\n# Generate key and immediately encrypt it with a passphrase\nage-keygen | age -p > key.age\n# Output: Public key: age1yhm4gctwfmrpz87tdslm550wrx6m79y9f2hdzt0lndjnehwj0ukqrjpyx5\n\n# Encrypt a file using the public key\nage -r age1yhm4gctwfmrpz87tdslm550wrx6m79y9f2hdzt0lndjnehwj0ukqrjpyx5 secrets.txt > secrets.txt.age\n\n# Decrypt — age will prompt for the passphrase to unlock key.age first\nage -d -i key.age secrets.txt.age > secrets.txt\n```\n\n## Inspect an Encrypted File\n\n```bash\nage-inspect secrets.age\n\n# JSON output for scripting\nage-inspect --json secrets.age\n```\n\n## CLI Reference\n\n```\nUsage:\n    age [--encrypt] (-r RECIPIENT | -R PATH)... [--armor] [-o OUTPUT] [INPUT]\n    age [--encrypt] --passphrase [--armor] [-o OUTPUT] [INPUT]\n    age --decrypt [-i PATH]... [-o OUTPUT] [INPUT]\n\nOptions:\n    -e, --encrypt               Encrypt (default if omitted)\n    -d, --decrypt               Decrypt\n    -o, --output OUTPUT         Write result to file\n    -a, --armor                 Output PEM-encoded text\n    -p, --passphrase            Encrypt with a passphrase\n    -r, --recipient RECIPIENT   Encrypt to recipient (repeatable)\n    -R, --recipients-file PATH  Encrypt to recipients from file (repeatable)\n    -i, --identity PATH         Identity file for decryption (repeatable)\n```\n\nINPUT defaults to stdin, OUTPUT defaults to stdout.\n\n## Tips\n\n- Use `-a` / `--armor` when the output needs to be text-safe (email, config files)\n- Multiple `-i` flags can be passed; unused identity files are silently ignored\n- Pass `-` as a path to read recipients or identities from stdin\n- Encrypted files have the `.age` extension by convention\n- age is composable — pipe freely with `tar`, `gzip`, `ssh`, etc.\n- For automation, store the public key in the repo and keep the private key secret\n\n## Security Notes\n\n- SSH key encryption embeds a public key tag in the file, making it possible to fingerprint which key was used\n- Passphrase-protected identity files are useful for keys stored remotely, but usually unnecessary for local keys\n- Post-quantum keys have ~2000-character public keys — use a recipients file for convenience\n\n## Related Skills\n\n- `anonymous-file-upload` — Upload the encrypted `.age` file anonymously after encrypting\n- `send-email-programmatically` — Send encrypted files over email using armored output (`-a`)\n- `nostr-logging-system` — Publish encrypted payloads to Nostr","tags":["age","file","encryption","open","skills","besoeasy","agent-skills","ai-agents","claude-code","clawdbot","clawdbot-skill","llm-tools"],"capabilities":["skill","source-besoeasy","skill-age-file-encryption","topic-agent-skills","topic-ai-agents","topic-claude-code","topic-clawdbot","topic-clawdbot-skill","topic-llm-tools","topic-mcp-server","topic-openai","topic-openclaw","topic-vibe-coding","topic-vibecoding"],"categories":["open-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/besoeasy/open-skills/age-file-encryption","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add besoeasy/open-skills","source_repo":"https://github.com/besoeasy/open-skills","install_from":"skills.sh"}},"qualityScore":"0.505","qualityRationale":"deterministic score 0.51 from registry signals: · indexed on github topic:agent-skills · 111 github stars · SKILL.md body (6,526 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-02T12:55:02.417Z","embedding":null,"createdAt":"2026-04-18T22:10:31.120Z","updatedAt":"2026-05-02T12:55:02.417Z","lastSeenAt":"2026-05-02T12:55:02.417Z","tsv":"'/.ssh/id_ed25519':470 '/.ssh/id_ed25519.pub':372 '/age/cmd/...@latest':182 '/age/latest?for=darwin/arm64':192 '/age/latest?for=linux/amd64':189 '/age/latest?for=windows/amd64':195 '/data':424 '/filosottile/age)':50 '/username.keys':387 '1':230 '2000':829 '22.04':151 'add':163 'age':2,12,44,47,148,154,159,164,168,215,221,227,248,267,283,294,302,313,328,355,370,388,410,420,425,437,446,454,467,478,510,524,530,536,566,568,582,588,598,610,618,625,635,642,756,760,848 'age-file-encrypt':1 'age-inspect':609,617 'age-keygen':247,266,509,523,565 'age-secret-key':226 'age1':220 'age1lggyhqrw2nlhcxprm67z43rta597azn8gknawjehu9d9dl0jq3yqqvfafg':334,354 'age1pq1':522 'age1ql3z7':413,427 'age1ql3z7hjy54':296 'age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p':255,285,332,352 'age1yhm4gctwfmrpz87tdslm550wrx6m79y9f2hdzt0lndjnehwj0ukqrjpyx5':574,584 'alic':351 'alpin':160 'anonym':842,850 'anonymous-file-upload':841 'apk':162 'apt':152 'arch':155 'archive.tar.gz.age':482 'armor':393,631,638,667,716,863 'ascii':400 'ascii-saf':399 'attack':500 'auto':448 'auto-detect':447 'autogener':309 'autom':137,771 'backup':111 'bash':142,238,279,301,320,340,363,397,421,436,445,466,477,501,555,608 'binari':186 'bob':353 'brew':146 'built':185 'cat':292,349 'charact':830 'clean':77 'cli':622 'comment':348 'compos':38,78,762 'comput':499 'concept':197 'config':40,74,409,727 'conveni':838 'convent':759 'core':196 'curl':384 'czf':423 'd':438,455,468,479,537,599,656 'data.tar.gz.age':428 'debian':149 'decrypt':7,205,214,325,429,473,535,587,643,657,658,703 'default':653,706,710 'design':69 'detect':449 'directori':90,418 'dl.filippo.io':188,191,194 'dl.filippo.io/age/latest?for=darwin/arm64':190 'dl.filippo.io/age/latest?for=linux/amd64':187 'dl.filippo.io/age/latest?for=windows/amd64':193 'dnf':166 'e':650 'ed25519':120 'email':407,726,855,861 'emb':790 'encod':671 'encrypt':4,5,18,46,55,63,87,105,114,123,129,271,280,364,375,416,452,529,551,560,575,606,626,636,651,652,675,682,691,752,789,847,852,858,871 'encryption/decryption':138 'enter':459 'etc':769 'exist':116,263 'explicit':22,71 'extens':757 'extract':515 'fedora':165 'file':3,8,45,62,75,88,98,207,211,235,265,272,282,327,339,430,435,453,546,577,607,665,689,695,701,728,737,753,797,811,836,843,849,859 'file.age':330 'file.txt':335,358,533,541 'file.txt.age':359,534,540 'filippo.io':181 'filippo.io/age/cmd/...@latest':180 'filosottile.age':173 'fingerprint':802 'first':597 'flag':731 'footgun':43 'freeli':764 'futur':497 'generat':237,239,502,556 'github':132,382 'github.com':49,386 'github.com/filosottile/age)':48 'github.com/username.keys':385 'go':177,178 'gpg':59 'gzip':767 'homebrew':145 'hybrid':32,490 'id':172 'ident':208,433,545,698,700,736,749,810 'ignor':740 'immedi':559 'independ':324 'input':634,641,648,705 'inspect':604,611,619 'instal':141,147,153,167,171,179 'json':613,620 'keep':780 'key':23,27,33,72,104,119,136,202,210,217,223,229,234,236,241,254,260,264,278,344,362,369,379,434,465,488,494,507,518,550,557,573,581,775,783,788,793,804,815,823,827,832 'key.age':570,596,601 'key.txt':246,251,270,440,481,514,527,539 'keygen':249,268,511,525,567 'line':346 'linux':144,156,161 'local':822 'log':868 'maco':143 'make':798 'mean':199 'minim':53 'modern':15,54 'much':67 'multipl':125,318,729 'need':64,720 'nostr':867,874 'nostr-logging-system':866 'note':786 'o':250,286,329,513,632,639,646,659 'omit':655 'one':312,342 'option':41,649 'output':252,396,402,571,614,633,640,647,660,661,668,709,719,864 'p':314,569,673 'pacman':157 'pair':242,508 'pass':734,741 'passphras':24,109,300,307,444,451,460,543,554,564,593,637,674,678,808 'passphrase-encrypt':450 'passphrase-protect':542,807 'past':405 'path':630,645,690,699,744 'payload':872 'pem':394,670 'pem-encod':669 'per':345 'pipe':81,291,476,763 'possibl':800 'post':30,486,492,505,825 'post-quantum':29,485,491,504,824 'pq':512 'pre':184 'pre-built':183 'print':256 'privat':209,222,464,549,782 'produc':398 'profil':383 'programmat':856 'prompt':304,458,590 'protect':495,544,809 'public':103,118,201,216,253,259,277,343,368,517,572,580,774,792,831 'publish':870 'quantum':31,487,493,498,506,826 'r':284,295,331,333,356,371,389,412,426,531,583,627,629,679,686 'read':746 'recipi':101,126,200,275,319,322,338,519,628,680,681,684,688,693,747,835 'recipient.txt':528,532 'recipients-fil':687 'recipients.txt':341,350,357 'refer':623 'relat':839 'remot':817 'repeat':685,696,704 'replac':58 'repo':778 'requir':176 'result':663 'rsa':122 'safe':401,403,725 'save':244 'script':140,616 'secret':106,228,784 'secret.txt':288,293,315,373,390,414,442,457,472 'secret.txt.age':287,297,316,374,391,415,441,456,471 'secrets.age':612,621 'secrets.txt':585,603 'secrets.txt.age':586,602 'secur':17,96,311,785 'send':97,854,857 'send-email-programmat':853 'share':94 'silent':739 'simpl':14 'simpler':68 'skill':86,840 'skill-age-file-encryption' 'small':21,70 'sourc':175 'source-besoeasy' 'specif':100 'ssh':26,117,135,361,367,378,463,768,787 'start':218,224,520 'stdin':708,751 'stdout':475,712 'storag':113 'store':92,231,547,772,816 'stream':10 'style':37 'support':25,28 'system':869 'tag':794 'tar':419,422,483,766 'term':198 'text':395,672,724 'text-saf':723 'tip':713 'tool':19,56 'topic-agent-skills' 'topic-ai-agents' 'topic-claude-code' 'topic-clawdbot' 'topic-clawdbot-skill' 'topic-llm-tools' 'topic-mcp-server' 'topic-openai' 'topic-openclaw' 'topic-vibe-coding' 'topic-vibecoding' 'ubuntu':150 'unix':36,80 'unix-styl':35 'unlock':595 'unnecessari':820 'unus':735 'upload':844,845 'usag':624 'use':11,84,212,289,365,578,714,806,813,833,862 'user':133 'usual':819 'v1.3.0':489 'window':169 'winget':170 'write':662 'xzf':484 'y':269,526","prices":[{"id":"425d1b5c-1e51-4b9c-a760-3a8d168c6924","listingId":"d9338185-f67e-4e8a-89d3-17354eaceed9","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"besoeasy","category":"open-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T22:10:31.120Z"}],"sources":[{"listingId":"d9338185-f67e-4e8a-89d3-17354eaceed9","source":"github","sourceId":"besoeasy/open-skills/age-file-encryption","sourceUrl":"https://github.com/besoeasy/open-skills/tree/main/skills/age-file-encryption","isPrimary":false,"firstSeenAt":"2026-04-18T22:10:31.120Z","lastSeenAt":"2026-05-02T12:55:02.417Z"}],"details":{"listingId":"d9338185-f67e-4e8a-89d3-17354eaceed9","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"besoeasy","slug":"age-file-encryption","github":{"repo":"besoeasy/open-skills","stars":111,"topics":["agent-skills","ai","ai-agents","claude-code","clawdbot","clawdbot-skill","llm-tools","mcp-server","openai","openclaw","vibe-coding","vibecoding"],"license":null,"html_url":"https://github.com/besoeasy/open-skills","pushed_at":"2026-03-31T13:05:30Z","description":"Battle-tested skill library for AI agents. Save 98% of API costs with ready-to-use code for crypto, PDFs, search, web scraping & more. No trial-and-error, no expensive APIs.","skill_md_sha":"b9888620d0dbc04986304ffe1feb1fe476333159","skill_md_path":"skills/age-file-encryption/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/besoeasy/open-skills/tree/main/skills/age-file-encryption"},"layout":"multi","source":"github","category":"open-skills","frontmatter":{"name":"age-file-encryption","description":"Encrypt and decrypt files or streams using age — a simple, modern, and secure encryption tool with small explicit keys, passphrase support, SSH key support, post-quantum hybrid keys, and UNIX-style composability. No config options, no footguns."},"skills_sh_url":"https://skills.sh/besoeasy/open-skills/age-file-encryption"},"updatedAt":"2026-05-02T12:55:02.417Z"}}