@simonw
New TIL: I figured out how to use my LLM CLI tool in a shebang line, which means you can write executable scripts in English, or hook up more complex scripts with a snippet of YAML template https://t.co/8mngqTbiTO
Viewing enriched Twitter post
New TIL: I figured out how to use my LLM CLI tool in a shebang line, which means you can write executable scripts in English, or hook up more complex scripts with a snippet of YAML template https://t.co/8mngqTbiTO
{
"media": [
{
"url": "https://crmoxkoizveukayfjuyo.supabase.co/storage/v1/object/public/media/posts/2053914709720764770/media_0.jpg",
"media_url": "https://crmoxkoizveukayfjuyo.supabase.co/storage/v1/object/public/media/posts/2053914709720764770/media_0.jpg",
"type": "photo",
"filename": "media_0.jpg"
}
],
"processed_at": "2026-06-15T21:01:34.886190",
"pipeline_version": "2.0"
} {
"type": "tweet",
"id": "2053914709720764770",
"url": "https://x.com/simonw/status/2053914709720764770",
"twitterUrl": "https://twitter.com/simonw/status/2053914709720764770",
"text": "New TIL: I figured out how to use my LLM CLI tool in a shebang line, which means you can write executable scripts in English, or hook up more complex scripts with a snippet of YAML template https://t.co/8mngqTbiTO",
"source": "Twitter for iPhone",
"retweetCount": 26,
"replyCount": 47,
"likeCount": 370,
"quoteCount": 10,
"viewCount": 27442,
"createdAt": "Mon May 11 19:06:41 +0000 2026",
"lang": "en",
"bookmarkCount": 176,
"isReply": false,
"inReplyToId": null,
"conversationId": "2053914709720764770",
"displayTextRange": [
0,
189
],
"inReplyToUserId": null,
"inReplyToUsername": null,
"author": {
"type": "user",
"userName": "simonw",
"url": "https://x.com/simonw",
"twitterUrl": "https://twitter.com/simonw",
"id": "12497",
"name": "Simon Willison",
"isVerified": false,
"isBlueVerified": true,
"verifiedType": null,
"profilePicture": "https://pbs.twimg.com/profile_images/378800000261649705/be9cc55e64014e6d7663c50d7cb9fc75_normal.jpeg",
"coverPicture": "https://pbs.twimg.com/profile_banners/12497/1642751752",
"description": "Creator @datasetteproj, co-creator Django. PSF board. Hangs out with @natbat. He/Him. Mastodon: https://t.co/t0MrmnJW0K Bsky: https://t.co/OnWIyhX4CH",
"location": "San Francisco, CA",
"followers": 191649,
"following": 5638,
"status": "",
"canDm": true,
"canMediaTag": true,
"createdAt": "Wed Nov 15 13:18:50 +0000 2006",
"entities": {
"description": {
"urls": [
{
"display_url": "fedi.simonwillison.net/@simon",
"expanded_url": "https://fedi.simonwillison.net/@simon",
"indices": [
96,
119
],
"url": "https://t.co/t0MrmnJW0K"
},
{
"display_url": "simonwillison.net",
"expanded_url": "http://simonwillison.net",
"indices": [
126,
149
],
"url": "https://t.co/OnWIyhX4CH"
}
]
},
"url": {
"urls": [
{
"display_url": "simonwillison.net",
"expanded_url": "https://simonwillison.net/",
"indices": [
0,
23
],
"url": "https://t.co/p4R0XiEYEc"
}
]
}
},
"fastFollowersCount": 0,
"favouritesCount": 63102,
"hasCustomTimelines": true,
"isTranslator": false,
"mediaCount": 3937,
"statusesCount": 60926,
"withheldInCountries": [],
"affiliatesHighlightedLabel": {},
"possiblySensitive": false,
"pinnedTweetIds": [],
"profile_bio": {},
"isAutomated": false,
"automatedBy": null
},
"extendedEntities": {
"media": [
{
"allow_download_status": {
"allow_download": true
},
"display_url": "pic.x.com/8mngqTbiTO",
"expanded_url": "https://x.com/simonw/status/2053914709720764770/photo/1",
"ext_alt_text": "#!/usr/bin/env -S llm -x -f\nGenerate an SVG of a pelican riding a bicycle\n\nBut you can also incorporate tool calls:\n\n#!/usr/bin/env -S llm -T llm_time -f\nWrite a haiku that mentions the exact current time\n\nOr even execute YAML templates directly that define extra tools as Python functions:\n\n#!/usr/bin/env -S llm -t\nmodel: gpt-5.4-mini\nsystem: |\n Use tools to run calculations\nfunctions: |\n def add(a: int, b: int) -> int:\n return a + b\n def multiply(a: int, b: int) -> int:\n return a * b\n\nThen:\n\n./calc.sh 'what is 2344 * 5252 + 134' --td\n\nWhich outputs (thanks to that --td tools debug option):\n\nTool call: multiply({'a': 2344, 'b': 5252})\n 12310688\n\nTool call: add({'a': 12310688, 'b': 134})\n 12310822\n\n2344 × 5252 + 134 = **12,310,822**",
"ext_media_availability": {
"status": "Available"
},
"features": {
"large": {
"faces": []
},
"medium": {
"faces": []
},
"orig": {
"faces": []
},
"small": {
"faces": []
}
},
"id_str": "2053914219834384384",
"indices": [
190,
213
],
"media_key": "3_2053914219834384384",
"media_results": {
"result": {
"media_key": "3_2053914219834384384"
}
},
"media_url_https": "https://pbs.twimg.com/media/HID4GdBaIAAXppG.jpg",
"original_info": {
"focus_rects": [
{
"h": 641,
"w": 1144,
"x": 0,
"y": 687
},
{
"h": 1144,
"w": 1144,
"x": 0,
"y": 184
},
{
"h": 1304,
"w": 1144,
"x": 0,
"y": 24
},
{
"h": 1328,
"w": 664,
"x": 0,
"y": 0
},
{
"h": 1328,
"w": 1144,
"x": 0,
"y": 0
}
],
"height": 1328,
"width": 1144
},
"sizes": {
"large": {
"h": 1328,
"resize": "fit",
"w": 1144
},
"medium": {
"h": 1200,
"resize": "fit",
"w": 1034
},
"small": {
"h": 680,
"resize": "fit",
"w": 586
},
"thumb": {
"h": 150,
"resize": "crop",
"w": 150
}
},
"type": "photo",
"url": "https://t.co/8mngqTbiTO"
}
]
},
"card": null,
"place": {},
"entities": {
"media": [
{
"allow_download_status": {
"allow_download": true
},
"display_url": "pic.x.com/8mngqTbiTO",
"expanded_url": "https://x.com/simonw/status/2053914709720764770/photo/1",
"ext_alt_text": "#!/usr/bin/env -S llm -x -f\nGenerate an SVG of a pelican riding a bicycle\n\nBut you can also incorporate tool calls:\n\n#!/usr/bin/env -S llm -T llm_time -f\nWrite a haiku that mentions the exact current time\n\nOr even execute YAML templates directly that define extra tools as Python functions:\n\n#!/usr/bin/env -S llm -t\nmodel: gpt-5.4-mini\nsystem: |\n Use tools to run calculations\nfunctions: |\n def add(a: int, b: int) -> int:\n return a + b\n def multiply(a: int, b: int) -> int:\n return a * b\n\nThen:\n\n./calc.sh 'what is 2344 * 5252 + 134' --td\n\nWhich outputs (thanks to that --td tools debug option):\n\nTool call: multiply({'a': 2344, 'b': 5252})\n 12310688\n\nTool call: add({'a': 12310688, 'b': 134})\n 12310822\n\n2344 × 5252 + 134 = **12,310,822**",
"ext_media_availability": {
"status": "Available"
},
"features": {
"large": {
"faces": []
},
"medium": {
"faces": []
},
"orig": {
"faces": []
},
"small": {
"faces": []
}
},
"id_str": "2053914219834384384",
"indices": [
190,
213
],
"media_key": "3_2053914219834384384",
"media_results": {
"result": {
"media_key": "3_2053914219834384384"
}
},
"media_url_https": "https://pbs.twimg.com/media/HID4GdBaIAAXppG.jpg",
"original_info": {
"focus_rects": [
{
"h": 641,
"w": 1144,
"x": 0,
"y": 687
},
{
"h": 1144,
"w": 1144,
"x": 0,
"y": 184
},
{
"h": 1304,
"w": 1144,
"x": 0,
"y": 24
},
{
"h": 1328,
"w": 664,
"x": 0,
"y": 0
},
{
"h": 1328,
"w": 1144,
"x": 0,
"y": 0
}
],
"height": 1328,
"width": 1144
},
"sizes": {
"large": {
"h": 1328,
"resize": "fit",
"w": 1144
},
"medium": {
"h": 1200,
"resize": "fit",
"w": 1034
},
"small": {
"h": 680,
"resize": "fit",
"w": 586
},
"thumb": {
"h": 150,
"resize": "crop",
"w": 150
}
},
"type": "photo",
"url": "https://t.co/8mngqTbiTO"
}
]
},
"quoted_tweet": null,
"retweeted_tweet": null,
"article": null
}