[{"data":1,"prerenderedAt":6955},["ShallowReactive",2],{"footer-articles":3,"/blog/climail-the-email-client-for-your-agent":3980,"related-/blog/climail-the-email-client-for-your-agent":4955},[4,1342,2318,3653],{"id":5,"title":6,"body":7,"category":1331,"date":1332,"description":1333,"draft":1334,"extension":1335,"image":1336,"meta":1337,"navigation":51,"path":1338,"seo":1339,"stem":1340,"tighten":1334,"__hash__":1341},"blog/blog/climail-the-email-client-for-your-agent.md","climail: The Email Client for Your Agent",{"type":8,"value":9,"toc":1315},"minimark",[10,21,41,44,54,57,62,68,73,79,136,145,149,152,166,188,192,195,210,465,472,487,491,505,508,512,515,529,532,769,773,776,1018,1028,1044,1048,1054,1142,1148,1163,1166,1188,1198,1219,1223,1226,1229,1232,1241,1248,1251,1257,1273,1277,1280,1298,1302,1308,1311],[11,12,13],"p",{},[14,15,16,20],"strong",{},[17,18,19],"code",{},"climail"," is a clanker-friendly command line email client.",[22,23,24,28,35,38],"ul",{},[25,26,27],"li",{},"📬 Read, write & organize emails",[25,29,30,31,34],{},"⚡ Run instantly with ",[17,32,33],{},"npx"," (no install)",[25,36,37],{},"🔐 IMAP + SMTP",[25,39,40],{},"💌 Gmail ready",[11,42,43],{},"Built for agents 🤖 (and humans, too!)",[11,45,46],{},[47,48],"video",{"src":49,"poster":50,"controls":51,"playsInline":51,"preload":52,"style":53},"https://github.com/user-attachments/assets/192c5f2f-4456-49e3-9851-2b9b5c797a44","/img/blog/give-your-agent-an-inbox-with-climail.png",true,"metadata","width:100%;border:0;border-radius:16px;margin:1.5rem 0;display:block",[11,55,56],{},"It's a minimalist email client that lives in your terminal. Every command hands back clean JSON, so an AI agent can read your inbox as easily as you can. Let me show you what's behind those bullet points.",[58,59,61],"h2",{"id":60},"features","Features",[11,63,64,65,67],{},"There isn't much to ",[17,66,19],{},", and that's on purpose. It does a handful of things, and it tries to do each of them in the least surprising way possible.",[69,70,72],"h3",{"id":71},"just-npx","Just npx",[11,74,75,76,78],{},"There's nothing to install and no process to keep alive. It's just an ",[17,77,33],{}," command that uses IMAP and SMTP under the hood.",[80,81,86],"pre",{"className":82,"code":83,"language":84,"meta":85,"style":85},"language-bash shiki shiki-themes monokai","npx climail list --unread\nnpx climail mark 167 read\nnpx climail archive 167\n","bash","",[17,87,88,107,123],{"__ignoreMap":85},[89,90,93,96,100,103],"span",{"class":91,"line":92},"line",1,[89,94,33],{"class":95},"sHkqI",[89,97,99],{"class":98},"s_Ekj"," climail",[89,101,102],{"class":98}," list",[89,104,106],{"class":105},"s7s5_"," --unread\n",[89,108,110,112,114,117,120],{"class":91,"line":109},2,[89,111,33],{"class":95},[89,113,99],{"class":98},[89,115,116],{"class":98}," mark",[89,118,119],{"class":105}," 167",[89,121,122],{"class":98}," read\n",[89,124,126,128,130,133],{"class":91,"line":125},3,[89,127,33],{"class":95},[89,129,99],{"class":98},[89,131,132],{"class":98}," archive",[89,134,135],{"class":105}," 167\n",[11,137,138,139,141,142,144],{},"If you can run ",[17,140,33],{},", you can run ",[17,143,19],{},": on your laptop, on a server, everywhere.",[69,146,148],{"id":147},"configure-it-in-a-minute","Configure It in a Minute",[11,150,151],{},"Run the setup wizard and answer a few questions:",[80,153,155],{"className":82,"code":154,"language":84,"meta":85,"style":85},"npx climail init\n",[17,156,157],{"__ignoreMap":85},[89,158,159,161,163],{"class":91,"line":92},[89,160,33],{"class":95},[89,162,99],{"class":98},[89,164,165],{"class":98}," init\n",[11,167,168,169,172,173,176,177,179,180,183,184,187],{},"It asks where to save the config: ",[14,170,171],{},"global"," (",[17,174,175],{},"~/.config/climail.conf",", which lets ",[17,178,19],{}," work from any directory, no per-project setup) or ",[14,181,182],{},"local"," (a ",[17,185,186],{},"climail.conf"," in the current directory, handy when a project has its own mailbox). Pick global and you're done. We'll look at the file itself further down.",[69,189,191],{"id":190},"every-command-speaks-json","Every Command Speaks JSON",[11,193,194],{},"Every data command prints clean JSON to stdout, so there's nothing to scrape and no columns to line up. Ask for your unread mail:",[80,196,198],{"className":82,"code":197,"language":84,"meta":85,"style":85},"npx climail list --unread\n",[17,199,200],{"__ignoreMap":85},[89,201,202,204,206,208],{"class":91,"line":92},[89,203,33],{"class":95},[89,205,99],{"class":98},[89,207,102],{"class":98},[89,209,106],{"class":105},[80,211,215],{"className":212,"code":213,"language":214,"meta":85,"style":85},"language-json shiki shiki-themes monokai","{\n  \"ok\": true,\n  \"mailbox\": \"INBOX\",\n  \"total\": 2481,\n  \"returned\": 2,\n  \"messages\": [\n    {\n      \"seq\": 2480,\n      \"uid\": 166,\n      \"date\": \"2026-07-12T09:03:11.000Z\",\n      \"from\": \"newsletter@somesaas.io\",\n      \"subject\": \"🚀 10 game-changing tips\",\n      \"unread\": true\n    },\n    {\n      \"seq\": 2481,\n      \"uid\": 167,\n      \"date\": \"2026-07-12T09:41:55.000Z\",\n      \"from\": \"sarah@acme.co\",\n      \"subject\": \"Export button throws a 500\",\n      \"unread\": true\n    }\n  ]\n}\n","json",[17,216,217,223,238,251,264,277,286,292,305,318,331,344,357,368,374,379,390,402,414,426,438,447,453,459],{"__ignoreMap":85},[89,218,219],{"class":91,"line":92},[89,220,222],{"class":221},"sCdxs","{\n",[89,224,225,229,232,235],{"class":91,"line":109},[89,226,228],{"class":227},"sOx1s","  \"ok\"",[89,230,231],{"class":221},": ",[89,233,234],{"class":105},"true",[89,236,237],{"class":221},",\n",[89,239,240,243,245,249],{"class":91,"line":125},[89,241,242],{"class":227},"  \"mailbox\"",[89,244,231],{"class":221},[89,246,248],{"class":247},"susgL","\"INBOX\"",[89,250,237],{"class":221},[89,252,254,257,259,262],{"class":91,"line":253},4,[89,255,256],{"class":227},"  \"total\"",[89,258,231],{"class":221},[89,260,261],{"class":105},"2481",[89,263,237],{"class":221},[89,265,267,270,272,275],{"class":91,"line":266},5,[89,268,269],{"class":227},"  \"returned\"",[89,271,231],{"class":221},[89,273,274],{"class":105},"2",[89,276,237],{"class":221},[89,278,280,283],{"class":91,"line":279},6,[89,281,282],{"class":227},"  \"messages\"",[89,284,285],{"class":221},": [\n",[89,287,289],{"class":91,"line":288},7,[89,290,291],{"class":221},"    {\n",[89,293,295,298,300,303],{"class":91,"line":294},8,[89,296,297],{"class":227},"      \"seq\"",[89,299,231],{"class":221},[89,301,302],{"class":105},"2480",[89,304,237],{"class":221},[89,306,308,311,313,316],{"class":91,"line":307},9,[89,309,310],{"class":227},"      \"uid\"",[89,312,231],{"class":221},[89,314,315],{"class":105},"166",[89,317,237],{"class":221},[89,319,321,324,326,329],{"class":91,"line":320},10,[89,322,323],{"class":227},"      \"date\"",[89,325,231],{"class":221},[89,327,328],{"class":247},"\"2026-07-12T09:03:11.000Z\"",[89,330,237],{"class":221},[89,332,334,337,339,342],{"class":91,"line":333},11,[89,335,336],{"class":227},"      \"from\"",[89,338,231],{"class":221},[89,340,341],{"class":247},"\"newsletter@somesaas.io\"",[89,343,237],{"class":221},[89,345,347,350,352,355],{"class":91,"line":346},12,[89,348,349],{"class":227},"      \"subject\"",[89,351,231],{"class":221},[89,353,354],{"class":247},"\"🚀 10 game-changing tips\"",[89,356,237],{"class":221},[89,358,360,363,365],{"class":91,"line":359},13,[89,361,362],{"class":227},"      \"unread\"",[89,364,231],{"class":221},[89,366,367],{"class":105},"true\n",[89,369,371],{"class":91,"line":370},14,[89,372,373],{"class":221},"    },\n",[89,375,377],{"class":91,"line":376},15,[89,378,291],{"class":221},[89,380,382,384,386,388],{"class":91,"line":381},16,[89,383,297],{"class":227},[89,385,231],{"class":221},[89,387,261],{"class":105},[89,389,237],{"class":221},[89,391,393,395,397,400],{"class":91,"line":392},17,[89,394,310],{"class":227},[89,396,231],{"class":221},[89,398,399],{"class":105},"167",[89,401,237],{"class":221},[89,403,405,407,409,412],{"class":91,"line":404},18,[89,406,323],{"class":227},[89,408,231],{"class":221},[89,410,411],{"class":247},"\"2026-07-12T09:41:55.000Z\"",[89,413,237],{"class":221},[89,415,417,419,421,424],{"class":91,"line":416},19,[89,418,336],{"class":227},[89,420,231],{"class":221},[89,422,423],{"class":247},"\"sarah@acme.co\"",[89,425,237],{"class":221},[89,427,429,431,433,436],{"class":91,"line":428},20,[89,430,349],{"class":227},[89,432,231],{"class":221},[89,434,435],{"class":247},"\"Export button throws a 500\"",[89,437,237],{"class":221},[89,439,441,443,445],{"class":91,"line":440},21,[89,442,362],{"class":227},[89,444,231],{"class":221},[89,446,367],{"class":105},[89,448,450],{"class":91,"line":449},22,[89,451,452],{"class":221},"    }\n",[89,454,456],{"class":91,"line":455},23,[89,457,458],{"class":221},"  ]\n",[89,460,462],{"class":91,"line":461},24,[89,463,464],{"class":221},"}\n",[11,466,467,468,471],{},"Every message carries a ",[17,469,470],{},"uid",", and that little number is the ID you pass to every other command.",[11,473,474,475,478,479,482,483,486],{},"It's the same idea as ",[17,476,477],{},"gh"," or ",[17,480,481],{},"kubectl -o json",": a small tool that pipes cleanly into the next thing, whether that next thing is ",[17,484,485],{},"jq"," or an agent.",[69,488,490],{"id":489},"gmail-ready-out-of-the-box","Gmail-Ready Out of the Box",[11,492,493,494,496,497,500,501,504],{},"Labels, archiving, and stars are the operations you actually perform on a Gmail inbox, so ",[17,495,19],{}," speaks them natively. Labeling applies a real Gmail label, archiving drops the ",[17,498,499],{},"Inbox"," label instead of trashing the message (exactly like the archive button in the web UI), and starring toggles ",[17,502,503],{},"\\Flagged",".",[11,506,507],{},"But if you are not using a Google email, don't worry: any email works, as long as you have the IMAP and SMTP credentials.",[58,509,511],{"id":510},"usage","Usage",[11,513,514],{},"Every interaction follows the same shape:",[80,516,518],{"className":82,"code":517,"language":84,"meta":85,"style":85},"npx climail ⟪command⟫\n",[17,519,520],{"__ignoreMap":85},[89,521,522,524,526],{"class":91,"line":92},[89,523,33],{"class":95},[89,525,99],{"class":98},[89,527,528],{"class":98}," ⟪command⟫\n",[11,530,531],{},"Here's the full set of commands. It looks like a lot, but you'll live in five or six of them and reach for the rest when you need them.",[533,534,535,548],"table",{},[536,537,538],"thead",{},[539,540,541,545],"tr",{},[542,543,544],"th",{},"Command",[542,546,547],{},"What it does",[549,550,551,564,584,621,635,650,660,691,707,721,736,749,759],"tbody",{},[539,552,553,559],{},[554,555,556],"td",{},[17,557,558],{},"init",[554,560,561,562,504],{},"Setup wizard for your IMAP credentials. Writes ",[17,563,175],{},[539,565,566,571],{},[554,567,568],{},[17,569,570],{},"list",[554,572,573,574,577,578,577,581,504],{},"List recent messages as JSON, each with its UID. Flags: ",[17,575,576],{},"--count \u003Cn>",", ",[17,579,580],{},"--unread",[17,582,583],{},"--mailbox \u003Cname>",[539,585,586,591],{},[554,587,588],{},[17,589,590],{},"search",[554,592,593,594,577,597,577,600,577,603,577,606,577,609,577,612,577,615,577,617,577,619,504],{},"Search a mailbox. Flags: ",[17,595,596],{},"--from",[17,598,599],{},"--to",[17,601,602],{},"--subject",[17,604,605],{},"--body",[17,607,608],{},"--text",[17,610,611],{},"--since",[17,613,614],{},"--before",[17,616,580],{},[17,618,576],{},[17,620,583],{},[539,622,623,628],{},[554,624,625],{},[17,626,627],{},"labels",[554,629,630,631,634],{},"List available labels/folders. Flag: ",[17,632,633],{},"--counts"," adds message counts per label.",[539,636,637,642],{},[554,638,639],{},[17,640,641],{},"read \u003Cuid>",[554,643,644,645,577,648,504],{},"Fetch one message: parsed text, HTML, and attachment metadata. Flags: ",[17,646,647],{},"--save-attachments \u003Cdir>",[17,649,583],{},[539,651,652,657],{},[554,653,654],{},[17,655,656],{},"label \u003Cuid> \u003Cname>",[554,658,659],{},"Apply a Gmail label, creating it if needed.",[539,661,662,667],{},[554,663,664],{},[17,665,666],{},"mark \u003Cuid> \u003Caction>",[554,668,669,670,673,674,577,677,673,680,683,684,673,687,690],{},"Set flags: ",[17,671,672],{},"read","/",[17,675,676],{},"unread",[17,678,679],{},"flag",[17,681,682],{},"unflag"," (aliases ",[17,685,686],{},"star",[17,688,689],{},"unstar",").",[539,692,693,698],{},[554,694,695],{},[17,696,697],{},"draft-reply \u003Cuid>",[554,699,700,701,577,703,706],{},"Stage a threaded reply in Drafts. Flags: ",[17,702,605],{},[17,704,705],{},"--all",". Nothing is sent.",[539,708,709,714],{},[554,710,711],{},[17,712,713],{},"send",[554,715,716,717,720],{},"Send over SMTP (needs ",[17,718,719],{},"smtp.host","): a new email, a threaded reply, or an existing draft.",[539,722,723,728],{},[554,724,725],{},[17,726,727],{},"forward \u003Cuid>",[554,729,730,731,733,734,504],{},"Forward a message over SMTP. Flag: ",[17,732,599],{}," (required), ",[17,735,605],{},[539,737,738,743],{},[554,739,740],{},[17,741,742],{},"delete \u003Cuid>",[554,744,745,746,504],{},"Delete a message (Trash on Gmail). Flag: ",[17,747,748],{},"--from \u003Cmailbox>",[539,750,751,756],{},[554,752,753],{},[17,754,755],{},"archive \u003Cuid>",[554,757,758],{},"Archive a message (drops the Inbox label on Gmail).",[539,760,761,766],{},[554,762,763],{},[17,764,765],{},"move \u003Cuid> \u003Cmailbox>",[554,767,768],{},"Move a message to another mailbox.",[69,770,772],{"id":771},"examples","Examples",[11,774,775],{},"Reading the table is one thing, but the commands click faster when you see them lined up. Here's a full triage session, top to bottom:",[80,777,779],{"className":82,"code":778,"language":84,"meta":85,"style":85},"npx climail init\nnpx climail list --unread\nnpx climail search --from boss@work.com --since 2026-06-01 --unread\nnpx climail labels --counts\nnpx climail read 167 --save-attachments ./att\nnpx climail mark 167 read\nnpx climail list --mailbox \"[Gmail]/All Mail\" --unread\nnpx climail mark 167 read --mailbox \"[Gmail]/All Mail\"\nnpx climail label 167 Triaged\nnpx climail draft-reply 167 --all --body \"Thanks, will take a look.\"\nnpx climail send --to them@example.com --reply-to 167 --all --body \"On it.\"\nnpx climail send --to a@b.com --subject \"Report\" --body \"Attached.\" --attach ./report.pdf\nnpx climail forward 167 --to colleague@work.com --body \"FYI\"\nnpx climail archive 167\n",[17,780,781,789,799,822,834,851,863,879,896,910,930,957,987,1008],{"__ignoreMap":85},[89,782,783,785,787],{"class":91,"line":92},[89,784,33],{"class":95},[89,786,99],{"class":98},[89,788,165],{"class":98},[89,790,791,793,795,797],{"class":91,"line":109},[89,792,33],{"class":95},[89,794,99],{"class":98},[89,796,102],{"class":98},[89,798,106],{"class":105},[89,800,801,803,805,808,811,814,817,820],{"class":91,"line":125},[89,802,33],{"class":95},[89,804,99],{"class":98},[89,806,807],{"class":98}," search",[89,809,810],{"class":105}," --from",[89,812,813],{"class":98}," boss@work.com",[89,815,816],{"class":105}," --since",[89,818,819],{"class":98}," 2026-06-01",[89,821,106],{"class":105},[89,823,824,826,828,831],{"class":91,"line":253},[89,825,33],{"class":95},[89,827,99],{"class":98},[89,829,830],{"class":98}," labels",[89,832,833],{"class":105}," --counts\n",[89,835,836,838,840,843,845,848],{"class":91,"line":266},[89,837,33],{"class":95},[89,839,99],{"class":98},[89,841,842],{"class":98}," read",[89,844,119],{"class":105},[89,846,847],{"class":105}," --save-attachments",[89,849,850],{"class":98}," ./att\n",[89,852,853,855,857,859,861],{"class":91,"line":279},[89,854,33],{"class":95},[89,856,99],{"class":98},[89,858,116],{"class":98},[89,860,119],{"class":105},[89,862,122],{"class":98},[89,864,865,867,869,871,874,877],{"class":91,"line":288},[89,866,33],{"class":95},[89,868,99],{"class":98},[89,870,102],{"class":98},[89,872,873],{"class":105}," --mailbox",[89,875,876],{"class":98}," \"[Gmail]/All Mail\"",[89,878,106],{"class":105},[89,880,881,883,885,887,889,891,893],{"class":91,"line":294},[89,882,33],{"class":95},[89,884,99],{"class":98},[89,886,116],{"class":98},[89,888,119],{"class":105},[89,890,842],{"class":98},[89,892,873],{"class":105},[89,894,895],{"class":98}," \"[Gmail]/All Mail\"\n",[89,897,898,900,902,905,907],{"class":91,"line":307},[89,899,33],{"class":95},[89,901,99],{"class":98},[89,903,904],{"class":98}," label",[89,906,119],{"class":105},[89,908,909],{"class":98}," Triaged\n",[89,911,912,914,916,919,921,924,927],{"class":91,"line":320},[89,913,33],{"class":95},[89,915,99],{"class":98},[89,917,918],{"class":98}," draft-reply",[89,920,119],{"class":105},[89,922,923],{"class":105}," --all",[89,925,926],{"class":105}," --body",[89,928,929],{"class":98}," \"Thanks, will take a look.\"\n",[89,931,932,934,936,939,942,945,948,950,952,954],{"class":91,"line":333},[89,933,33],{"class":95},[89,935,99],{"class":98},[89,937,938],{"class":98}," send",[89,940,941],{"class":105}," --to",[89,943,944],{"class":98}," them@example.com",[89,946,947],{"class":105}," --reply-to",[89,949,119],{"class":105},[89,951,923],{"class":105},[89,953,926],{"class":105},[89,955,956],{"class":98}," \"On it.\"\n",[89,958,959,961,963,965,967,970,973,976,978,981,984],{"class":91,"line":346},[89,960,33],{"class":95},[89,962,99],{"class":98},[89,964,938],{"class":98},[89,966,941],{"class":105},[89,968,969],{"class":98}," a@b.com",[89,971,972],{"class":105}," --subject",[89,974,975],{"class":98}," \"Report\"",[89,977,926],{"class":105},[89,979,980],{"class":98}," \"Attached.\"",[89,982,983],{"class":105}," --attach",[89,985,986],{"class":98}," ./report.pdf\n",[89,988,989,991,993,996,998,1000,1003,1005],{"class":91,"line":359},[89,990,33],{"class":95},[89,992,99],{"class":98},[89,994,995],{"class":98}," forward",[89,997,119],{"class":105},[89,999,941],{"class":105},[89,1001,1002],{"class":98}," colleague@work.com",[89,1004,926],{"class":105},[89,1006,1007],{"class":98}," \"FYI\"\n",[89,1009,1010,1012,1014,1016],{"class":91,"line":370},[89,1011,33],{"class":95},[89,1013,99],{"class":98},[89,1015,132],{"class":98},[89,1017,135],{"class":105},[11,1019,1020,1021,1024,1025,1027],{},"Notice that ",[17,1022,1023],{},"draft-reply"," and ",[17,1026,713],{}," are two different commands:",[22,1029,1030,1039],{},[25,1031,1032,1034,1035,1038],{},[17,1033,1023],{}," writes a proper threaded reply, correct subject and headers, straight into your ",[14,1036,1037],{},"Drafts"," folder. Nothing leaves your account.",[25,1040,1041,1043],{},[17,1042,713],{}," is the one that actually puts mail on the wire, and it only works once you've configured SMTP. Reading your inbox and emailing people on your behalf are two very different levels of trust, so they're two different commands you opt into separately.",[58,1045,1047],{"id":1046},"configuration","Configuration",[11,1049,1050,1053],{},[17,1051,1052],{},"npx climail init"," writes the config for you, but it's a plain text file, so you can just as easily write it yourself:",[80,1055,1059],{"className":1056,"code":1057,"filename":175,"language":1058,"meta":85,"style":85},"language-dotenv shiki shiki-themes monokai","imap.host=imap.gmail.com\nimap.port=993\nimap.secure=true\nimap.username=you@gmail.com\nimap.password=\"app password here\"\n\n# Optional: only needed for the `send` command\nsmtp.host=smtp.gmail.com\nsmtp.port=465\n","dotenv",[17,1060,1061,1073,1083,1092,1102,1112,1117,1123,1132],{"__ignoreMap":85},[89,1062,1063,1066,1070],{"class":91,"line":92},[89,1064,1065],{"class":221},"imap.host",[89,1067,1069],{"class":1068},"s8I7P","=",[89,1071,1072],{"class":221},"imap.gmail.com\n",[89,1074,1075,1078,1080],{"class":91,"line":109},[89,1076,1077],{"class":221},"imap.port",[89,1079,1069],{"class":1068},[89,1081,1082],{"class":221},"993\n",[89,1084,1085,1088,1090],{"class":91,"line":125},[89,1086,1087],{"class":221},"imap.secure",[89,1089,1069],{"class":1068},[89,1091,367],{"class":221},[89,1093,1094,1097,1099],{"class":91,"line":253},[89,1095,1096],{"class":221},"imap.username",[89,1098,1069],{"class":1068},[89,1100,1101],{"class":221},"you@gmail.com\n",[89,1103,1104,1107,1109],{"class":91,"line":266},[89,1105,1106],{"class":221},"imap.password",[89,1108,1069],{"class":1068},[89,1110,1111],{"class":98},"\"app password here\"\n",[89,1113,1114],{"class":91,"line":279},[89,1115,1116],{"emptyLinePlaceholder":51},"\n",[89,1118,1119],{"class":91,"line":288},[89,1120,1122],{"class":1121},"snpHw","# Optional: only needed for the `send` command\n",[89,1124,1125,1127,1129],{"class":91,"line":294},[89,1126,719],{"class":221},[89,1128,1069],{"class":1068},[89,1130,1131],{"class":221},"smtp.gmail.com\n",[89,1133,1134,1137,1139],{"class":91,"line":307},[89,1135,1136],{"class":221},"smtp.port",[89,1138,1069],{"class":1068},[89,1140,1141],{"class":221},"465\n",[11,1143,1144,1145,1147],{},"The IMAP block is all you need to start reading. The SMTP block is optional, and its absence is exactly why ",[17,1146,713],{}," stays locked until you deliberately add it.",[1149,1150,1153],"callout",{"color":1151,"icon":1152},"#057ccd","fa6-solid:circle-info",[11,1154,1155,1156,1159,1160,1162],{},"Gmail won't let a raw IMAP client sign in with your normal account password. You need an ",[14,1157,1158],{},"app password",", a 16-character token you generate in your Google account settings. Drop that into ",[17,1161,1106],{}," and you're in.",[11,1164,1165],{},"Always keep your config file out of version control, since it holds your credentials.",[11,1167,1168,1170,1171,1174,1175,1177,1178,1180,1181,1184,1185,1187],{},[17,1169,558],{}," lets you choose where this file lives. ",[14,1172,1173],{},"Global"," puts it at ",[17,1176,175],{},", following the XDG convention, so ",[17,1179,19],{}," works from any directory. ",[14,1182,1183],{},"Local"," drops a ",[17,1186,186],{}," in the current directory, which takes precedence over the global one when you run commands from there, perfect for a project with its own inbox.",[11,1189,1190,1191,1194,1195,1197],{},"If you manage more than one email address, you can also point any command at a specific file with ",[17,1192,1193],{},"--config"," (which skips the prompt in ",[17,1196,558],{}," too):",[80,1199,1201],{"className":82,"code":1200,"language":84,"meta":85,"style":85},"npx climail list --config ~/work/mail.conf --unread\n",[17,1202,1203],{"__ignoreMap":85},[89,1204,1205,1207,1209,1211,1214,1217],{"class":91,"line":92},[89,1206,33],{"class":95},[89,1208,99],{"class":98},[89,1210,102],{"class":98},[89,1212,1213],{"class":105}," --config",[89,1215,1216],{"class":98}," ~/work/mail.conf",[89,1218,106],{"class":105},[58,1220,1222],{"id":1221},"an-email-client-for-agents","An Email Client for Agents",[11,1224,1225],{},"So that's the tool. I created it to give my agent an easy way of interacting with an inbox.",[11,1227,1228],{},"These days our agents can automate an incredible amount of our daily work. They write code, review pull requests, update documentation, and poke at APIs through a handful of little CLIs. Yet for many of us, email is still one of the last manual parts of the workflow. And that's odd, because email is exactly the kind of tedious, repetitive triage I'd love to hand off.",[11,1230,1231],{},"The problem was never the agent, it was the interface. A full mail client is a GUI, useless to a clanker. A raw IMAP library means the agent has to write code every time it wants to ask a simple question. Neither one lets you hand the agent a command and get back something it can read.",[11,1233,1234,1235,1237,1238,1240],{},"That's the gap ",[17,1236,19],{}," fills, and it's why the two boring-sounding features up top are actually the important ones: zero-install ",[17,1239,33],{}," and JSON on stdout aren't just convenient for you at the terminal. They're the exact two things an agent needs to use a tool with no help from anyone.",[11,1242,1243,1244,1247],{},"Once your agent runs ",[17,1245,1246],{},"npx climail",", it learns how to use it just by reading the help text. No MCP server to stand up, no SDK to wire in.",[11,1249,1250],{},"You can say something like:",[1252,1253,1254],"blockquote",{},[11,1255,1256],{},"Go through my unread mail. Label anything from a customer as \"Triaged\", and for the ones reporting a bug, draft a short reply letting them know we're on it.",[11,1258,1259,1260,1262,1263,1265,1266,1269,1270,1272],{},"And it will just... do it, by chaining the commands you saw above: ",[17,1261,590],{}," to find them, ",[17,1264,672],{}," to understand each one, ",[17,1267,1268],{},"label"," to file them, ",[17,1271,1023],{}," to stage the answers, checking the JSON at every step before taking the next.",[69,1274,1276],{"id":1275},"the-skill","The Skill",[11,1278,1279],{},"Do you like agent skills? We got you:",[80,1281,1283],{"className":82,"code":1282,"language":84,"meta":85,"style":85},"npx skills add nicodevs/climail\n",[17,1284,1285],{"__ignoreMap":85},[89,1286,1287,1289,1292,1295],{"class":91,"line":92},[89,1288,33],{"class":95},[89,1290,1291],{"class":98}," skills",[89,1293,1294],{"class":98}," add",[89,1296,1297],{"class":98}," nicodevs/climail\n",[58,1299,1301],{"id":1300},"in-closing","In Closing",[11,1303,1304,1305,1307],{},"I hope you enjoy ",[17,1306,19],{},". If you have any comments or questions, feel free to create an issue. And throw in a star on GitHub, if you want to help!",[11,1309,1310],{},"See you next time.",[1312,1313,1314],"style",{},"html pre.shiki code .sHkqI, html code.shiki .sHkqI{--shiki-default:#A6E22E}html pre.shiki code .s_Ekj, html code.shiki .s_Ekj{--shiki-default:#E6DB74}html pre.shiki code .s7s5_, html code.shiki .s7s5_{--shiki-default:#AE81FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sCdxs, html code.shiki .sCdxs{--shiki-default:#F8F8F2}html pre.shiki code .sOx1s, html code.shiki .sOx1s{--shiki-default:#66D9EF;--shiki-default-font-style:italic}html pre.shiki code .susgL, html code.shiki .susgL{--shiki-default:#CFCFC2}html pre.shiki code .s8I7P, html code.shiki .s8I7P{--shiki-default:#F92672}html pre.shiki code .snpHw, html code.shiki .snpHw{--shiki-default:#88846F}",{"title":85,"searchDepth":109,"depth":109,"links":1316},[1317,1323,1326,1327,1330],{"id":60,"depth":109,"text":61,"children":1318},[1319,1320,1321,1322],{"id":71,"depth":125,"text":72},{"id":147,"depth":125,"text":148},{"id":190,"depth":125,"text":191},{"id":489,"depth":125,"text":490},{"id":510,"depth":109,"text":511,"children":1324},[1325],{"id":771,"depth":125,"text":772},{"id":1046,"depth":109,"text":1047},{"id":1221,"depth":109,"text":1222,"children":1328},[1329],{"id":1275,"depth":125,"text":1276},{"id":1300,"depth":109,"text":1301},"AI","2026-07-15","A clanker-friendly command line email client. Read, write, and organize your inbox from the terminal, with clean JSON that any AI agent can pick up.",false,"md","/img/blog/climail-the-email-client-for-your-agent.png",{},"/blog/climail-the-email-client-for-your-agent",{"title":6,"description":1333},"blog/climail-the-email-client-for-your-agent","U1Y0-RXeFqpKPlwUHWDogPTgPbVduvw92YFEzXneJ-k",{"id":1343,"title":1344,"body":1345,"category":1331,"date":2310,"description":2311,"draft":1334,"extension":1335,"image":2312,"meta":2313,"navigation":51,"path":2314,"seo":2315,"stem":2316,"tighten":1334,"__hash__":2317},"blog/blog/advanced-agentic-workflows-with-stacked-skills.md","Advanced Agentic Workflows With Stacked Skills",{"type":8,"value":1346,"toc":2301},[1347,1350,1355,1358,1361,1366,1369,1372,1376,1388,1391,1410,1417,1423,1427,1430,1433,1443,1446,1463,1466,1469,1512,1515,1557,1560,1563,1567,1575,1582,1687,1690,1693,1700,2076,2080,2083,2193,2202,2205,2209,2212,2217,2220,2227,2231,2234,2282,2285,2289,2292,2295,2298],[11,1348,1349],{},"We all know that simply asking a clanker:",[1252,1351,1352],{},[11,1353,1354],{},"Build a million-dollar app. Make no mistakes.",[11,1356,1357],{},"...won't work as magically as you'd expect, no matter what the vibe coders on Twitter say. However, there are far more effective ways to automate workflows for our agents.",[11,1359,1360],{},"Imagine having a list of 12 to-do cards in Trello and simply saying:",[1252,1362,1363],{},[11,1364,1365],{},"Tackle all my pending tasks.",[11,1367,1368],{},"...then letting the agent run until you have 12 PRs ready for review. Pretty cool, right?",[11,1370,1371],{},"Today, we'll explore how to create skills, compose them together, and build exactly that kind of workflow.",[58,1373,1375],{"id":1374},"skills-can-call-other-skills","Skills Can Call Other Skills",[11,1377,1378,1379,1384,1385],{},"In ",[1380,1381,1383],"a",{"href":1382},"/blog/skills-i-know-kung-fu","the last post"," I built a skill to ",[14,1386,1387],{},"automate creating PRs in GitHub.",[11,1389,1390],{},"What's great is that not only I can run it in my agent session, but also call it from other skills. A skill can call another skill by naming its slash command as a step in its own instructions, the same way you would type it into the prompt.",[80,1392,1396],{"className":1393,"code":1394,"filename":1395,"language":1335,"meta":85,"style":85},"language-md shiki shiki-themes monokai","- Once you are done, create a PR using `/github-pr main`\n","SKILL.md",[17,1397,1398],{"__ignoreMap":85},[89,1399,1400,1403,1406],{"class":91,"line":92},[89,1401,1402],{"class":95},"-",[89,1404,1405],{"class":221}," Once you are done, create a PR using ",[89,1407,1409],{"class":1408},"szGx7","`/github-pr main`\n",[11,1411,1412,1413,1416],{},"When reading that line, the agent will run that ",[17,1414,1415],{},"/github-pr"," skill. There is no API or plugin system to set up, the agent is smart enough to figure it out.",[11,1418,1419,1420,1422],{},"That may sound like a small detail, but it changes how you design skills: instead of one large ",[17,1421,1395],{}," that tries to handle an entire process, you can write skills that each do one thing well and let them delegate the rest.",[58,1424,1426],{"id":1425},"the-goal","The Goal",[11,1428,1429],{},"Let's explore a complex workflow to put this in practice.",[11,1431,1432],{},"I'd love to leave my agent running in the background, tackling all the pending items of a given project.",[11,1434,1435,1436,1442],{},"How can we organize the tasks? Well, perhaps we can use ",[1380,1437,1441],{"href":1438,"rel":1439},"https://trello.com",[1440],"nofollow","Trello",". A simple board will do: \"To Do\", \"Doing\", \"Under Review\" and \"Done\".",[11,1444,1445],{},"The full agentic workflow will be:",[22,1447,1448,1451,1454,1457,1460],{},[25,1449,1450],{},"Pick the first card from the \"To Do\" list",[25,1452,1453],{},"Move the card to \"Doing\"",[25,1455,1456],{},"Complete the task",[25,1458,1459],{},"Create a PR",[25,1461,1462],{},"Move the card to \"Under Review\"",[11,1464,1465],{},"We'll keep things simple: each card will represent a feature, a concrete and rather small amount of work. Each card will have its own, dedicated PR.",[11,1467,1468],{},"If we are building an online shop, a card could be:",[80,1470,1472],{"className":1393,"code":1471,"language":1335,"meta":85,"style":85},"# Implement Product Search\n\n- Add a search input to the product listing page\n- As the user types, filter the list of products by name\n- If no products match the search, display a \"No products found\" message\n- Clearing the search input should restore the full product list\n",[17,1473,1474,1480,1484,1491,1498,1505],{"__ignoreMap":85},[89,1475,1476],{"class":91,"line":92},[89,1477,1479],{"class":1478},"ssRA_","# Implement Product Search\n",[89,1481,1482],{"class":91,"line":109},[89,1483,1116],{"emptyLinePlaceholder":51},[89,1485,1486,1488],{"class":91,"line":125},[89,1487,1402],{"class":95},[89,1489,1490],{"class":221}," Add a search input to the product listing page\n",[89,1492,1493,1495],{"class":91,"line":253},[89,1494,1402],{"class":95},[89,1496,1497],{"class":221}," As the user types, filter the list of products by name\n",[89,1499,1500,1502],{"class":91,"line":266},[89,1501,1402],{"class":95},[89,1503,1504],{"class":221}," If no products match the search, display a \"No products found\" message\n",[89,1506,1507,1509],{"class":91,"line":279},[89,1508,1402],{"class":95},[89,1510,1511],{"class":221}," Clearing the search input should restore the full product list\n",[11,1513,1514],{},"Looks like a good unit of work, right? Another card could be:",[80,1516,1518],{"className":1393,"code":1517,"language":1335,"meta":85,"style":85},"# Implement Product Categories\n\n- Display the list of available categories on the product listing page\n- Selecting a category should filter the displayed products\n- The user can clear the selected category to view all products again\n- The selected category should remain active while navigating the product list\n",[17,1519,1520,1525,1529,1536,1543,1550],{"__ignoreMap":85},[89,1521,1522],{"class":91,"line":92},[89,1523,1524],{"class":1478},"# Implement Product Categories\n",[89,1526,1527],{"class":91,"line":109},[89,1528,1116],{"emptyLinePlaceholder":51},[89,1530,1531,1533],{"class":91,"line":125},[89,1532,1402],{"class":95},[89,1534,1535],{"class":221}," Display the list of available categories on the product listing page\n",[89,1537,1538,1540],{"class":91,"line":253},[89,1539,1402],{"class":95},[89,1541,1542],{"class":221}," Selecting a category should filter the displayed products\n",[89,1544,1545,1547],{"class":91,"line":266},[89,1546,1402],{"class":95},[89,1548,1549],{"class":221}," The user can clear the selected category to view all products again\n",[89,1551,1552,1554],{"class":91,"line":279},[89,1553,1402],{"class":95},[89,1555,1556],{"class":221}," The selected category should remain active while navigating the product list\n",[11,1558,1559],{},"And so on and so forth!",[11,1561,1562],{},"We already have a skill that takes care of interacting with GitHub. Now, we only need one to interact with Trello.",[58,1564,1566],{"id":1565},"the-trello-skill","The Trello Skill",[11,1568,1569,1570,1574],{},"Let's create this simple skill to teach the agent how to work with Trello's API. Of course, the reasoning model can ",[1571,1572,1573],"em",{},"figure it out,"," but it's faster (and less token consuming) to steer it in the right direction.",[11,1576,1577,1578,1581],{},"First, we need a file with the credentials and the IDs of the board and lists we want to work with. In the root of our project, we can save a ",[17,1579,1580],{},"trello.json"," that would look something like this:",[80,1583,1585],{"className":212,"code":1584,"filename":1580,"language":214,"meta":85,"style":85},"{\n  \"apiKey\": \"...\",\n  \"apiToken\": \"...\",\n  \"board\": \"\u003Cboard-id>\",\n  \"lists\": {\n    \"To Do\": \"\u003Clist-id>\",\n    \"Doing\": \"\u003Clist-id>\",\n    \"Under Review\": \"\u003Clist-id>\",\n    \"Done\": \"\u003Clist-id>\"\n  }\n}\n",[17,1586,1587,1591,1603,1614,1626,1634,1646,1657,1668,1678,1683],{"__ignoreMap":85},[89,1588,1589],{"class":91,"line":92},[89,1590,222],{"class":221},[89,1592,1593,1596,1598,1601],{"class":91,"line":109},[89,1594,1595],{"class":227},"  \"apiKey\"",[89,1597,231],{"class":221},[89,1599,1600],{"class":247},"\"...\"",[89,1602,237],{"class":221},[89,1604,1605,1608,1610,1612],{"class":91,"line":125},[89,1606,1607],{"class":227},"  \"apiToken\"",[89,1609,231],{"class":221},[89,1611,1600],{"class":247},[89,1613,237],{"class":221},[89,1615,1616,1619,1621,1624],{"class":91,"line":253},[89,1617,1618],{"class":227},"  \"board\"",[89,1620,231],{"class":221},[89,1622,1623],{"class":247},"\"\u003Cboard-id>\"",[89,1625,237],{"class":221},[89,1627,1628,1631],{"class":91,"line":266},[89,1629,1630],{"class":227},"  \"lists\"",[89,1632,1633],{"class":221},": {\n",[89,1635,1636,1639,1641,1644],{"class":91,"line":279},[89,1637,1638],{"class":227},"    \"To Do\"",[89,1640,231],{"class":221},[89,1642,1643],{"class":247},"\"\u003Clist-id>\"",[89,1645,237],{"class":221},[89,1647,1648,1651,1653,1655],{"class":91,"line":288},[89,1649,1650],{"class":227},"    \"Doing\"",[89,1652,231],{"class":221},[89,1654,1643],{"class":247},[89,1656,237],{"class":221},[89,1658,1659,1662,1664,1666],{"class":91,"line":294},[89,1660,1661],{"class":227},"    \"Under Review\"",[89,1663,231],{"class":221},[89,1665,1643],{"class":247},[89,1667,237],{"class":221},[89,1669,1670,1673,1675],{"class":91,"line":307},[89,1671,1672],{"class":227},"    \"Done\"",[89,1674,231],{"class":221},[89,1676,1677],{"class":247},"\"\u003Clist-id>\"\n",[89,1679,1680],{"class":91,"line":320},[89,1681,1682],{"class":221},"  }\n",[89,1684,1685],{"class":91,"line":333},[89,1686,464],{"class":221},[11,1688,1689],{},"Of course, remember to add that file to gitignore so you don't leak your credentials.",[11,1691,1692],{},"Now, we only need to tell our agent how to operate with Trello so it knows exactly what to do when we ask it to \"create a new card\" or \"move this card to Done\".",[11,1694,1695,1696,1699],{},"This is how the ",[17,1697,1698],{},"/trello"," skill could look like:",[80,1701,1704],{"className":1393,"code":1702,"filename":1703,"language":1335,"meta":85,"style":85},"---\nname: trello\ndescription: Interacts with a Trello board. Triggered by \"/trello\".\n---\n\nUse this skill whenever the user asks you to read, create, update, delete, or move cards.\n\n## Credentials\n\nRead board credentials from `trello.json` in the project root:\n\n```json\n{\n  \"apiKey\": \"...\",\n  \"apiToken\": \"...\",\n  \"board\": \"\u003Cboard-id>\",\n  \"lists\": {\n    \"To Do\": \"\u003Clist-id>\",\n    \"Doing\": \"\u003Clist-id>\",\n    \"Under Review\": \"\u003Clist-id>\",\n    \"Done\": \"\u003Clist-id>\"\n  }\n}\n```\n\n## Read list\n\n`curl -s \"https://api.trello.com/1/lists/\u003Clist-id>/cards?key=\u003CapiKey>&token=\u003CapiToken>\"`\n\n## Create card\n\nThe card name is the title and the description holds the body. Use `--data-urlencode` so spaces and line breaks survive:\n\n`curl -s -X POST \"https://api.trello.com/1/cards?key=\u003CapiKey>&token=\u003CapiToken>\" --data-urlencode \"idList=\u003Clist-id>\" --data-urlencode \"name=\u003Ccard-title>\" --data-urlencode \"desc=\u003Ccard-body>\"`\n\n## Move card\n\n`curl -s -X PUT \"https://api.trello.com/1/cards/\u003Ccard-id>?key=\u003CapiKey>&token=\u003CapiToken>&idList=\u003Clist-id>\"`\n\n## Update card\n\nSame endpoint as moving, just pass whichever fields changed:\n\n`curl -s -X PUT \"https://api.trello.com/1/cards/\u003Ccard-id>?key=\u003CapiKey>&token=\u003CapiToken>\" --data-urlencode \"name=\u003Ccard-title>\" --data-urlencode \"desc=\u003Ccard-body>\"`\n\n## Delete card\n\n`curl -s -X DELETE \"https://api.trello.com/1/cards/\u003Ccard-id>?key=\u003CapiKey>&token=\u003CapiToken>\"`\n\n## Attach a URL\n\nAttach a link to a card, for example the PR you just opened:\n\n`curl -s -X POST \"https://api.trello.com/1/cards/\u003Ccard-id>/attachments?key=\u003CapiKey>&token=\u003CapiToken>\" --data-urlencode \"url=https://google.com\"`\n\n## Error handling\n\n- If `trello.json` is missing or malformed, stop and tell the user.\n- If the Trello API returns a non-2xx status, show the error and stop.\n",".claude/skills/trello/SKILL.md",[17,1705,1706,1711,1721,1731,1735,1739,1744,1748,1753,1757,1768,1772,1777,1781,1791,1801,1811,1817,1827,1837,1847,1855,1859,1863,1868,1873,1879,1884,1890,1895,1901,1906,1918,1923,1929,1934,1940,1945,1951,1956,1962,1967,1973,1978,1984,1989,1995,2000,2006,2011,2017,2022,2028,2033,2039,2044,2050,2055,2068],{"__ignoreMap":85},[89,1707,1708],{"class":91,"line":92},[89,1709,1710],{"class":221},"---\n",[89,1712,1713,1716,1718],{"class":91,"line":109},[89,1714,1715],{"class":1068},"name",[89,1717,231],{"class":221},[89,1719,1720],{"class":98},"trello\n",[89,1722,1723,1726,1728],{"class":91,"line":125},[89,1724,1725],{"class":1068},"description",[89,1727,231],{"class":221},[89,1729,1730],{"class":98},"Interacts with a Trello board. Triggered by \"/trello\".\n",[89,1732,1733],{"class":91,"line":253},[89,1734,1710],{"class":221},[89,1736,1737],{"class":91,"line":266},[89,1738,1116],{"emptyLinePlaceholder":51},[89,1740,1741],{"class":91,"line":279},[89,1742,1743],{"class":221},"Use this skill whenever the user asks you to read, create, update, delete, or move cards.\n",[89,1745,1746],{"class":91,"line":288},[89,1747,1116],{"emptyLinePlaceholder":51},[89,1749,1750],{"class":91,"line":294},[89,1751,1752],{"class":1478},"## Credentials\n",[89,1754,1755],{"class":91,"line":307},[89,1756,1116],{"emptyLinePlaceholder":51},[89,1758,1759,1762,1765],{"class":91,"line":320},[89,1760,1761],{"class":221},"Read board credentials from ",[89,1763,1764],{"class":1408},"`trello.json`",[89,1766,1767],{"class":221}," in the project root:\n",[89,1769,1770],{"class":91,"line":333},[89,1771,1116],{"emptyLinePlaceholder":51},[89,1773,1774],{"class":91,"line":346},[89,1775,1776],{"class":221},"```json\n",[89,1778,1779],{"class":91,"line":359},[89,1780,222],{"class":221},[89,1782,1783,1785,1787,1789],{"class":91,"line":370},[89,1784,1595],{"class":227},[89,1786,231],{"class":221},[89,1788,1600],{"class":247},[89,1790,237],{"class":221},[89,1792,1793,1795,1797,1799],{"class":91,"line":376},[89,1794,1607],{"class":227},[89,1796,231],{"class":221},[89,1798,1600],{"class":247},[89,1800,237],{"class":221},[89,1802,1803,1805,1807,1809],{"class":91,"line":381},[89,1804,1618],{"class":227},[89,1806,231],{"class":221},[89,1808,1623],{"class":247},[89,1810,237],{"class":221},[89,1812,1813,1815],{"class":91,"line":392},[89,1814,1630],{"class":227},[89,1816,1633],{"class":221},[89,1818,1819,1821,1823,1825],{"class":91,"line":404},[89,1820,1638],{"class":227},[89,1822,231],{"class":221},[89,1824,1643],{"class":247},[89,1826,237],{"class":221},[89,1828,1829,1831,1833,1835],{"class":91,"line":416},[89,1830,1650],{"class":227},[89,1832,231],{"class":221},[89,1834,1643],{"class":247},[89,1836,237],{"class":221},[89,1838,1839,1841,1843,1845],{"class":91,"line":428},[89,1840,1661],{"class":227},[89,1842,231],{"class":221},[89,1844,1643],{"class":247},[89,1846,237],{"class":221},[89,1848,1849,1851,1853],{"class":91,"line":440},[89,1850,1672],{"class":227},[89,1852,231],{"class":221},[89,1854,1677],{"class":247},[89,1856,1857],{"class":91,"line":449},[89,1858,1682],{"class":221},[89,1860,1861],{"class":91,"line":455},[89,1862,464],{"class":221},[89,1864,1865],{"class":91,"line":461},[89,1866,1867],{"class":221},"```\n",[89,1869,1871],{"class":91,"line":1870},25,[89,1872,1116],{"emptyLinePlaceholder":51},[89,1874,1876],{"class":91,"line":1875},26,[89,1877,1878],{"class":1478},"## Read list\n",[89,1880,1882],{"class":91,"line":1881},27,[89,1883,1116],{"emptyLinePlaceholder":51},[89,1885,1887],{"class":91,"line":1886},28,[89,1888,1889],{"class":1408},"`curl -s \"https://api.trello.com/1/lists/\u003Clist-id>/cards?key=\u003CapiKey>&token=\u003CapiToken>\"`\n",[89,1891,1893],{"class":91,"line":1892},29,[89,1894,1116],{"emptyLinePlaceholder":51},[89,1896,1898],{"class":91,"line":1897},30,[89,1899,1900],{"class":1478},"## Create card\n",[89,1902,1904],{"class":91,"line":1903},31,[89,1905,1116],{"emptyLinePlaceholder":51},[89,1907,1909,1912,1915],{"class":91,"line":1908},32,[89,1910,1911],{"class":221},"The card name is the title and the description holds the body. Use ",[89,1913,1914],{"class":1408},"`--data-urlencode`",[89,1916,1917],{"class":221}," so spaces and line breaks survive:\n",[89,1919,1921],{"class":91,"line":1920},33,[89,1922,1116],{"emptyLinePlaceholder":51},[89,1924,1926],{"class":91,"line":1925},34,[89,1927,1928],{"class":1408},"`curl -s -X POST \"https://api.trello.com/1/cards?key=\u003CapiKey>&token=\u003CapiToken>\" --data-urlencode \"idList=\u003Clist-id>\" --data-urlencode \"name=\u003Ccard-title>\" --data-urlencode \"desc=\u003Ccard-body>\"`\n",[89,1930,1932],{"class":91,"line":1931},35,[89,1933,1116],{"emptyLinePlaceholder":51},[89,1935,1937],{"class":91,"line":1936},36,[89,1938,1939],{"class":1478},"## Move card\n",[89,1941,1943],{"class":91,"line":1942},37,[89,1944,1116],{"emptyLinePlaceholder":51},[89,1946,1948],{"class":91,"line":1947},38,[89,1949,1950],{"class":1408},"`curl -s -X PUT \"https://api.trello.com/1/cards/\u003Ccard-id>?key=\u003CapiKey>&token=\u003CapiToken>&idList=\u003Clist-id>\"`\n",[89,1952,1954],{"class":91,"line":1953},39,[89,1955,1116],{"emptyLinePlaceholder":51},[89,1957,1959],{"class":91,"line":1958},40,[89,1960,1961],{"class":1478},"## Update card\n",[89,1963,1965],{"class":91,"line":1964},41,[89,1966,1116],{"emptyLinePlaceholder":51},[89,1968,1970],{"class":91,"line":1969},42,[89,1971,1972],{"class":221},"Same endpoint as moving, just pass whichever fields changed:\n",[89,1974,1976],{"class":91,"line":1975},43,[89,1977,1116],{"emptyLinePlaceholder":51},[89,1979,1981],{"class":91,"line":1980},44,[89,1982,1983],{"class":1408},"`curl -s -X PUT \"https://api.trello.com/1/cards/\u003Ccard-id>?key=\u003CapiKey>&token=\u003CapiToken>\" --data-urlencode \"name=\u003Ccard-title>\" --data-urlencode \"desc=\u003Ccard-body>\"`\n",[89,1985,1987],{"class":91,"line":1986},45,[89,1988,1116],{"emptyLinePlaceholder":51},[89,1990,1992],{"class":91,"line":1991},46,[89,1993,1994],{"class":1478},"## Delete card\n",[89,1996,1998],{"class":91,"line":1997},47,[89,1999,1116],{"emptyLinePlaceholder":51},[89,2001,2003],{"class":91,"line":2002},48,[89,2004,2005],{"class":1408},"`curl -s -X DELETE \"https://api.trello.com/1/cards/\u003Ccard-id>?key=\u003CapiKey>&token=\u003CapiToken>\"`\n",[89,2007,2009],{"class":91,"line":2008},49,[89,2010,1116],{"emptyLinePlaceholder":51},[89,2012,2014],{"class":91,"line":2013},50,[89,2015,2016],{"class":1478},"## Attach a URL\n",[89,2018,2020],{"class":91,"line":2019},51,[89,2021,1116],{"emptyLinePlaceholder":51},[89,2023,2025],{"class":91,"line":2024},52,[89,2026,2027],{"class":221},"Attach a link to a card, for example the PR you just opened:\n",[89,2029,2031],{"class":91,"line":2030},53,[89,2032,1116],{"emptyLinePlaceholder":51},[89,2034,2036],{"class":91,"line":2035},54,[89,2037,2038],{"class":1408},"`curl -s -X POST \"https://api.trello.com/1/cards/\u003Ccard-id>/attachments?key=\u003CapiKey>&token=\u003CapiToken>\" --data-urlencode \"url=https://google.com\"`\n",[89,2040,2042],{"class":91,"line":2041},55,[89,2043,1116],{"emptyLinePlaceholder":51},[89,2045,2047],{"class":91,"line":2046},56,[89,2048,2049],{"class":1478},"## Error handling\n",[89,2051,2053],{"class":91,"line":2052},57,[89,2054,1116],{"emptyLinePlaceholder":51},[89,2056,2058,2060,2063,2065],{"class":91,"line":2057},58,[89,2059,1402],{"class":95},[89,2061,2062],{"class":221}," If ",[89,2064,1764],{"class":1408},[89,2066,2067],{"class":221}," is missing or malformed, stop and tell the user.\n",[89,2069,2071,2073],{"class":91,"line":2070},59,[89,2072,1402],{"class":95},[89,2074,2075],{"class":221}," If the Trello API returns a non-2xx status, show the error and stop.\n",[58,2077,2079],{"id":2078},"the-orchestrator-skill","The Orchestrator Skill",[11,2081,2082],{},"Great! Now that we have skills that know how to deal with Trello and GitHub, we can create an orchestrator skill that makes use of both.",[80,2084,2087],{"className":1393,"code":2085,"filename":2086,"language":1335,"meta":85,"style":85},"---\nname: tackle-task\ndescription: Pick the first card in the Trello \"To Do\" list, build the feature it describes, open a PR, and move the card to \"Under Review\".\n---\n\n## Steps\n\n1. Use `/trello` to read the first card in \"To Do\". If the list is empty, stop here.\n2. Use `/trello` to move that card to \"Doing\".\n3. Treat the card's title and description as the feature spec and build it, following the conventions already in the codebase.\n4. Use `/github-pr main` to open the pull request. If this card builds on an earlier one, target that branch instead so the PRs stack: `/github-pr \u003Cbase-branch>`.\n5. Use `/trello` to move the card to \"Under Review\" and attach the PR link.\n",".claude/skills/tackle-task/SKILL.md",[17,2088,2089,2093,2102,2111,2115,2119,2124,2128,2142,2154,2162,2181],{"__ignoreMap":85},[89,2090,2091],{"class":91,"line":92},[89,2092,1710],{"class":221},[89,2094,2095,2097,2099],{"class":91,"line":109},[89,2096,1715],{"class":1068},[89,2098,231],{"class":221},[89,2100,2101],{"class":98},"tackle-task\n",[89,2103,2104,2106,2108],{"class":91,"line":125},[89,2105,1725],{"class":1068},[89,2107,231],{"class":221},[89,2109,2110],{"class":98},"Pick the first card in the Trello \"To Do\" list, build the feature it describes, open a PR, and move the card to \"Under Review\".\n",[89,2112,2113],{"class":91,"line":253},[89,2114,1710],{"class":221},[89,2116,2117],{"class":91,"line":266},[89,2118,1116],{"emptyLinePlaceholder":51},[89,2120,2121],{"class":91,"line":279},[89,2122,2123],{"class":1478},"## Steps\n",[89,2125,2126],{"class":91,"line":288},[89,2127,1116],{"emptyLinePlaceholder":51},[89,2129,2130,2133,2136,2139],{"class":91,"line":294},[89,2131,2132],{"class":95},"1.",[89,2134,2135],{"class":221}," Use ",[89,2137,2138],{"class":1408},"`/trello`",[89,2140,2141],{"class":221}," to read the first card in \"To Do\". If the list is empty, stop here.\n",[89,2143,2144,2147,2149,2151],{"class":91,"line":307},[89,2145,2146],{"class":95},"2.",[89,2148,2135],{"class":221},[89,2150,2138],{"class":1408},[89,2152,2153],{"class":221}," to move that card to \"Doing\".\n",[89,2155,2156,2159],{"class":91,"line":320},[89,2157,2158],{"class":95},"3.",[89,2160,2161],{"class":221}," Treat the card's title and description as the feature spec and build it, following the conventions already in the codebase.\n",[89,2163,2164,2167,2169,2172,2175,2178],{"class":91,"line":333},[89,2165,2166],{"class":95},"4.",[89,2168,2135],{"class":221},[89,2170,2171],{"class":1408},"`/github-pr main`",[89,2173,2174],{"class":221}," to open the pull request. If this card builds on an earlier one, target that branch instead so the PRs stack: ",[89,2176,2177],{"class":1408},"`/github-pr \u003Cbase-branch>`",[89,2179,2180],{"class":221},".\n",[89,2182,2183,2186,2188,2190],{"class":91,"line":346},[89,2184,2185],{"class":95},"5.",[89,2187,2135],{"class":221},[89,2189,2138],{"class":1408},[89,2191,2192],{"class":221}," to move the card to \"Under Review\" and attach the PR link.\n",[11,2194,2195,2196,2198,2199,2201],{},"As you can see, this skill never explains how to name a branch, write a PR body, or talk to GitHub. It delegates all of that to ",[17,2197,1415],{},". Same goes for the Trello operations: saying \"move card to Doing\" is enough, since ",[17,2200,1698],{}," knows how to do it.",[11,2203,2204],{},"Each skill stays small, and neither has to absorb the other's job.",[58,2206,2208],{"id":2207},"running-the-whole-board","Running the Whole Board",[11,2210,2211],{},"Because the workflow lives in skills rather than in my head, scaling from one card to the entire backlog takes a single instruction:",[1252,2213,2214],{},[11,2215,2216],{},"Sequentially tackle every task in our Trello.",[11,2218,2219],{},"That's it! That instruction makes the agent work until we have no more cards in \"To Do\".",[11,2221,2222,2223,2226],{},"The end result is a bunch of PRs in GitHub, ready for human review. Yeah, ",[1571,2224,2225],{},"human review:"," I think it's important to take a moment to read the code the clanker generated. We saved so much time already (not only in the coding aspect, but all the ceremony that goes with it: writing PRs, moving cards, etc.) that taking a look can't hurt anyone... and can save you from shipping slop.",[58,2228,2230],{"id":2229},"designing-skills-that-stack","Designing Skills That Stack",[11,2232,2233],{},"A few principles made the difference between skills that compose cleanly and skills that fight each other:",[22,2235,2236,2252,2265,2273],{},[25,2237,2238,2241,2242,2244,2245,2247,2248,2251],{},[14,2239,2240],{},"One job per skill."," ",[17,2243,1415],{}," only knows how to open a PR, and ",[17,2246,1698],{}," only knows how to talk to the board. That's exactly why ",[17,2249,2250],{},"/tackle-task"," can lean on both without dragging their guts into its own instructions.",[25,2253,2254,2257,2258,1024,2261,2264],{},[14,2255,2256],{},"Give each skill a small handle to grab."," The base-branch argument is the whole reason ",[17,2259,2260],{},"/github-pr main",[17,2262,2263],{},"/github-pr some-feature"," both work. One little parameter turns a fixed command into a building block.",[25,2266,2267,2241,2270,2272],{},[14,2268,2269],{},"Let the orchestrator do the deciding.",[17,2271,2250],{}," owns the order of things and the \"does this card stack on another?\" call. The skills it invokes never need to know that context exists.",[25,2274,2275,2278,2279,2281],{},[14,2276,2277],{},"Stop when something looks off."," An empty \"To Do\" list, a missing ",[17,2280,1580],{},", a non-2xx from the API: any of those halts the run instead of quietly plowing ahead and making a mess you have to untangle later.",[11,2283,2284],{},"None of this depends on an exotic feature. It's the same design thinking you already apply to code, pointed at the skills your agent runs.",[58,2286,2288],{"id":2287},"where-this-goes","Where This Goes",[11,2290,2291],{},"Once you start seeing skills as stackable recipes, it's hard not to notice more places to apply them.",[11,2293,2294],{},"The one I'm building now checks my inbox, reads emails from my app users, turns their requests into Trello cards, works on them, opens a PR for each one, and drafts an email reply for me to send later.",[11,2296,2297],{},"Here's a challenge for you: think about what you can automate with skills. Build it, and let me know how it goes!",[1312,2299,2300],{},"html pre.shiki code .sHkqI, html code.shiki .sHkqI{--shiki-default:#A6E22E}html pre.shiki code .sCdxs, html code.shiki .sCdxs{--shiki-default:#F8F8F2}html pre.shiki code .szGx7, html code.shiki .szGx7{--shiki-default:#FD971F}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .ssRA_, html code.shiki .ssRA_{--shiki-default:#A6E22E;--shiki-default-font-weight:bold}html pre.shiki code .sOx1s, html code.shiki .sOx1s{--shiki-default:#66D9EF;--shiki-default-font-style:italic}html pre.shiki code .susgL, html code.shiki .susgL{--shiki-default:#CFCFC2}html pre.shiki code .s8I7P, html code.shiki .s8I7P{--shiki-default:#F92672}html pre.shiki code .s_Ekj, html code.shiki .s_Ekj{--shiki-default:#E6DB74}",{"title":85,"searchDepth":109,"depth":109,"links":2302},[2303,2304,2305,2306,2307,2308,2309],{"id":1374,"depth":109,"text":1375},{"id":1425,"depth":109,"text":1426},{"id":1565,"depth":109,"text":1566},{"id":2078,"depth":109,"text":2079},{"id":2207,"depth":109,"text":2208},{"id":2229,"depth":109,"text":2230},{"id":2287,"depth":109,"text":2288},"2026-07-09","A single skill removes one repetitive task. Stacking skills, letting one call another, turns a backlog into a workflow your agent can run end to end.","/img/blog/advanced-agentic-workflows-with-stacked-skills.png",{},"/blog/advanced-agentic-workflows-with-stacked-skills",{"title":1344,"description":2311},"blog/advanced-agentic-workflows-with-stacked-skills","dhbCP-c8nD_KIMpxzUk_rO96Kxg8PL8uJl3vdqTIGwM",{"id":2319,"title":2320,"body":2321,"category":1331,"date":3646,"description":3647,"draft":1334,"extension":1335,"image":3648,"meta":3649,"navigation":51,"path":1382,"seo":3650,"stem":3651,"tighten":1334,"__hash__":3652},"blog/blog/skills-i-know-kung-fu.md","Skills: I Know Kung Fu!",{"type":8,"value":2322,"toc":3636},[2323,2334,2341,2344,2347,2356,2359,2364,2374,2378,2381,2384,2398,2403,2416,2419,2460,2463,2481,2490,2496,2499,2503,2510,2514,2517,2520,2537,2540,2555,2563,2568,2760,2770,2786,2789,2792,2796,2799,2804,2807,2847,2850,2860,2866,2870,2877,2880,2920,2927,2930,2934,2940,2943,2963,2966,2972,2978,2997,3000,3319,3329,3335,3530,3537,3596,3602,3605,3607,3609,3612,3615,3624,3630,3633],[11,2324,2325,2326,2329,2330,2333],{},"There's this famous scene in ",[1571,2327,2328],{},"The Matrix"," where Neo gets a ",[1571,2331,2332],{},"software update"," that instantly teaches him Kung Fu. I'd love that in real life! Maybe then I could finally play the keyboard without sounding like a cat walked across it.",[11,2335,2336,2337,2340],{},"Unfortunately, we don't have that. But we do have ",[14,2338,2339],{},"skills for our agents",", which, while not nearly as cool, can still save you a big chunk of time.",[11,2342,2343],{},"Think about everything you asked Claude to do this week. Was there one request you found yourself repeating over and over, using almost the exact same prompt?",[11,2345,2346],{},"For me, it's creating GitHub PRs.",[1252,2348,2349],{},[11,2350,2351,2352,2355],{},"Open a PR. Keep the description short. No emojis. Don't list yourself as a co-author. Don't use the word ",[1571,2353,2354],{},"seamlessly","...",[11,2357,2358],{},"I'd type it, the agent would do a decent job, and a couple of hours later I'd find myself typing the exact same thing again for the next branch.",[1252,2360,2361],{},[11,2362,2363],{},"Open a PR. Short description. No emojis...",[11,2365,2366,2367,2370,2371],{},"You know the saying, ",[1571,2368,2369],{},"\"This meeting could have been an email\"?"," That's how I feel every time I catch myself repeating a prompt: ",[1571,2372,2373],{},"\"This prompt should have been a skill.\"",[58,2375,2377],{"id":2376},"what-is-a-skill","What Is a Skill?",[11,2379,2380],{},"A skill is a recipe you write once so the agent can perform the same task over and over without you narrating every step again.",[11,2382,2383],{},"Unlike a prompt, a skill can bring along everything the task needs: scripts, references, templates, rules, etc.",[11,2385,2386,2387,2390,2391,2394,2395,2397],{},"You create a folder under ",[17,2388,2389],{},".claude/skills/",". Call it whatever you like, for example ",[17,2392,2393],{},"joke",". Inside it, create a ",[17,2396,1395],{}," file.",[11,2399,2400,2402],{},[17,2401,1395],{}," should have two parts:",[22,2404,2405,2413],{},[25,2406,2407,2408,2410,2411,504],{},"A frontmatter block with a ",[17,2409,1715],{}," and a ",[17,2412,1725],{},[25,2414,2415],{},"A markdown body with the actual instructions, written in natural language.",[11,2417,2418],{},"Here's an example:",[80,2420,2423],{"className":1393,"code":2421,"filename":2422,"language":1335,"meta":85,"style":85},"---\nname: joke\ndescription: Tells a funny joke.\n---\n\nTell me a funny joke. Extra points if it is about programmers!\n",".claude/skills/joke/SKILL.md",[17,2424,2425,2429,2438,2447,2451,2455],{"__ignoreMap":85},[89,2426,2427],{"class":91,"line":92},[89,2428,1710],{"class":221},[89,2430,2431,2433,2435],{"class":91,"line":109},[89,2432,1715],{"class":1068},[89,2434,231],{"class":221},[89,2436,2437],{"class":98},"joke\n",[89,2439,2440,2442,2444],{"class":91,"line":125},[89,2441,1725],{"class":1068},[89,2443,231],{"class":221},[89,2445,2446],{"class":98},"Tells a funny joke.\n",[89,2448,2449],{"class":91,"line":253},[89,2450,1710],{"class":221},[89,2452,2453],{"class":91,"line":266},[89,2454,1116],{"emptyLinePlaceholder":51},[89,2456,2457],{"class":91,"line":279},[89,2458,2459],{"class":221},"Tell me a funny joke. Extra points if it is about programmers!\n",[11,2461,2462],{},"To use a skill, you can either:",[22,2464,2465,2475],{},[25,2466,2467,2470,2471,2474],{},[14,2468,2469],{},"Invoke it as a command:"," type a slash followed by the skill's name, e.g. ",[17,2472,2473],{},"/joke",", and press enter.",[25,2476,2477,2480],{},[14,2478,2479],{},"Ask in natural language:"," if the skill's description matches what you asked the agent to do, Claude will automatically pick it up. Here, something like \"tell me a joke\" will do.",[1149,2482,2483],{"color":1151,"icon":1152},[11,2484,2485,2486,2489],{},"If you'd rather invoke the skill explicitly every time, add ",[17,2487,2488],{},"disable-model-invocation: true"," to the frontmatter.",[11,2491,2492,2493,2495],{},"The ",[17,2494,1725],{}," is more important than it looks. Whenever you ask Claude to do something, it uses the descriptions of your available skills to decide whether one matches the request.",[11,2497,2498],{},"If the description is vague, the skill rarely gets used. If it's specific, Claude starts reaching for it automatically.",[58,2500,2502],{"id":2501},"a-skill-is-a-folder-not-just-a-file","A Skill Is a Folder, Not Just a File",[11,2504,2505,2506,2509],{},"So far we've only seen a single markdown file, but ",[14,2507,2508],{},"a skill is really the entire folder"," around the markdown file. This folder can contain scripts, reference documents, templates, and anything else the workflow needs.",[69,2511,2513],{"id":2512},"tip-1-skills-can-execute-scripts","Tip 1: Skills Can Execute Scripts",[11,2515,2516],{},"If you describe an action in natural language, the model is usually smart enough to figure out how to do it and write code on the fly to make it happen. Sometimes, though, you want something more predictable.",[11,2518,2519],{},"You can include commands and code snippets in your skills. So instead of saying \"Clear the logs\" and hoping the model does the right thing, you can simply tell it what to run:",[80,2521,2525],{"className":2522,"code":2523,"filename":1395,"language":2524,"meta":85,"style":85},"language-diff shiki shiki-themes monokai","- Clear the logs.\n+ Run `rm -rf ./logs` to clear the logs.\n","diff",[17,2526,2527,2532],{"__ignoreMap":85},[89,2528,2529],{"class":91,"line":92},[89,2530,2531],{"class":1068},"- Clear the logs.\n",[89,2533,2534],{"class":91,"line":109},[89,2535,2536],{"class":95},"+ Run `rm -rf ./logs` to clear the logs.\n",[11,2538,2539],{},"Once those scripts get more than a few lines long, you can move them into their own files.",[11,2541,2542,2543,2546,2547,2550,2551,2554],{},"Say I want a ",[17,2544,2545],{},"video-to-gif"," skill that turns a screen recording into a small GIF I can drop into an issue. To keep the colors from looking terrible, that's really a two-pass job: first build a color palette tailored to the video, then render the GIF using it. That's fiddly enough that I don't want the agent reconstructing the exact ",[17,2548,2549],{},"ffmpeg"," filters every time, so I drop a ",[17,2552,2553],{},"script.sh"," into the skill folder:",[80,2556,2561],{"className":2557,"code":2559,"language":2560,"meta":85},[2558],"language-text","📂 video-to-gif/\n├── 📄 SKILL.md\n└── ▶️ script.sh\n","text",[17,2562,2559],{"__ignoreMap":85},[11,2564,2565,2567],{},[17,2566,2553],{}," scales the video down to 420p, drops it to 12 frames per second, and squeezes it into a 64-color palette:",[80,2569,2573],{"className":2570,"code":2571,"filename":2553,"language":2572,"meta":85,"style":85},"language-shell shiki shiki-themes monokai","#!/usr/bin/env bash\nset -euo pipefail\nINPUT=\"${1:?usage: script.sh \u003Cinput-video>}\"\nOUTPUT=\"${2:-output.gif}\"\n\n# 1. build an optimized palette from the video\nffmpeg -i \"$INPUT\" -vf \"fps=12,scale=-1:420:flags=lanczos,palettegen=max_colors=64\" -y palette.png\n\n# 2. render the gif using that palette\nffmpeg -i \"$INPUT\" -i palette.png -lavfi \"fps=12,scale=-1:420:flags=lanczos[x];[x][1:v]paletteuse\" -y \"$OUTPUT\"\n\n# 3. clean up\nrm -f palette.png\n","shell",[17,2574,2575,2580,2592,2637,2664,2668,2673,2700,2704,2709,2741,2745,2750],{"__ignoreMap":85},[89,2576,2577],{"class":91,"line":92},[89,2578,2579],{"class":1121},"#!/usr/bin/env bash\n",[89,2581,2582,2586,2589],{"class":91,"line":109},[89,2583,2585],{"class":2584},"sYf5A","set",[89,2587,2588],{"class":105}," -euo",[89,2590,2591],{"class":98}," pipefail\n",[89,2593,2594,2597,2599,2602,2606,2609,2611,2614,2617,2619,2622,2625,2628,2631,2634],{"class":91,"line":125},[89,2595,2596],{"class":221},"INPUT",[89,2598,1069],{"class":1068},[89,2600,2601],{"class":98},"\"",[89,2603,2605],{"class":2604},"sW0Xf","${1",[89,2607,2608],{"class":1068},":?",[89,2610,510],{"class":221},[89,2612,2613],{"class":1068},":",[89,2615,2616],{"class":221}," script",[89,2618,504],{"class":98},[89,2620,2621],{"class":221},"sh",[89,2623,2624],{"class":98}," \u003C",[89,2626,2627],{"class":221},"input-video",[89,2629,2630],{"class":98},">",[89,2632,2633],{"class":2604},"}",[89,2635,2636],{"class":98},"\"\n",[89,2638,2639,2642,2644,2646,2649,2652,2655,2657,2660,2662],{"class":91,"line":253},[89,2640,2641],{"class":221},"OUTPUT",[89,2643,1069],{"class":1068},[89,2645,2601],{"class":98},[89,2647,2648],{"class":2604},"${2",[89,2650,2651],{"class":1068},":-",[89,2653,2654],{"class":221},"output",[89,2656,504],{"class":98},[89,2658,2659],{"class":221},"gif",[89,2661,2633],{"class":2604},[89,2663,2636],{"class":98},[89,2665,2666],{"class":91,"line":266},[89,2667,1116],{"emptyLinePlaceholder":51},[89,2669,2670],{"class":91,"line":279},[89,2671,2672],{"class":1121},"# 1. build an optimized palette from the video\n",[89,2674,2675,2677,2680,2683,2686,2688,2691,2694,2697],{"class":91,"line":288},[89,2676,2549],{"class":95},[89,2678,2679],{"class":105}," -i",[89,2681,2682],{"class":98}," \"",[89,2684,2685],{"class":221},"$INPUT",[89,2687,2601],{"class":98},[89,2689,2690],{"class":105}," -vf",[89,2692,2693],{"class":98}," \"fps=12,scale=-1:420:flags=lanczos,palettegen=max_colors=64\"",[89,2695,2696],{"class":105}," -y",[89,2698,2699],{"class":98}," palette.png\n",[89,2701,2702],{"class":91,"line":294},[89,2703,1116],{"emptyLinePlaceholder":51},[89,2705,2706],{"class":91,"line":307},[89,2707,2708],{"class":1121},"# 2. render the gif using that palette\n",[89,2710,2711,2713,2715,2717,2719,2721,2723,2726,2729,2732,2734,2736,2739],{"class":91,"line":320},[89,2712,2549],{"class":95},[89,2714,2679],{"class":105},[89,2716,2682],{"class":98},[89,2718,2685],{"class":221},[89,2720,2601],{"class":98},[89,2722,2679],{"class":105},[89,2724,2725],{"class":98}," palette.png",[89,2727,2728],{"class":105}," -lavfi",[89,2730,2731],{"class":98}," \"fps=12,scale=-1:420:flags=lanczos[x];[x][1:v]paletteuse\"",[89,2733,2696],{"class":105},[89,2735,2682],{"class":98},[89,2737,2738],{"class":221},"$OUTPUT",[89,2740,2636],{"class":98},[89,2742,2743],{"class":91,"line":333},[89,2744,1116],{"emptyLinePlaceholder":51},[89,2746,2747],{"class":91,"line":346},[89,2748,2749],{"class":1121},"# 3. clean up\n",[89,2751,2752,2755,2758],{"class":91,"line":359},[89,2753,2754],{"class":95},"rm",[89,2756,2757],{"class":105}," -f",[89,2759,2699],{"class":98},[11,2761,2762,2763,2765,2766,2769],{},"Then inside ",[17,2764,1395],{},", I simply reference it with ",[17,2767,2768],{},"${CLAUDE_SKILL_DIR}"," so the path works no matter where the skill is invoked from:",[80,2771,2773],{"className":1393,"code":2772,"language":1335,"meta":85,"style":85},"Run `${CLAUDE_SKILL_DIR}/script.sh \u003Crecording.mov>` to produce the GIF.\n",[17,2774,2775],{"__ignoreMap":85},[89,2776,2777,2780,2783],{"class":91,"line":92},[89,2778,2779],{"class":221},"Run ",[89,2781,2782],{"class":1408},"`${CLAUDE_SKILL_DIR}/script.sh \u003Crecording.mov>`",[89,2784,2785],{"class":221}," to produce the GIF.\n",[11,2787,2788],{},"The script gets executed, not pasted into the conversation, so it doesn't consume context. The agent simply runs it, captures the result, and moves on.",[11,2790,2791],{},"Anything mechanical and deterministic belongs in a script anyway. It's faster, cheaper, and usually more reliable than asking the model to work out the same commands from scratch every single time.",[69,2793,2795],{"id":2794},"tip-2-skills-can-load-reference-files","Tip 2: Skills Can Load Reference Files",[11,2797,2798],{},"The same idea works for knowledge.",[11,2800,2801,2802,504],{},"If a skill depends on a long reference—API documentation, a style guide, naming conventions, or some giant formatting spec—you don't have to cram it all into ",[17,2803,1395],{},[11,2805,2806],{},"Instead, drop it into a dedicated file and reference it:",[80,2808,2810],{"className":1393,"code":2809,"filename":1395,"language":1335,"meta":85,"style":85},"- If the project uses React, follow [react_rules.md](react_rules.md).\n- If the project uses Vue, use [vue_rules.md](vue_rules.md) instead.\n",[17,2811,2812,2830],{"__ignoreMap":85},[89,2813,2814,2816,2819,2822,2825,2827],{"class":91,"line":92},[89,2815,1402],{"class":95},[89,2817,2818],{"class":221}," If the project uses React, follow [",[89,2820,2821],{"class":105},"react_rules.md",[89,2823,2824],{"class":221},"](",[89,2826,2821],{"class":98},[89,2828,2829],{"class":221},").\n",[89,2831,2832,2834,2837,2840,2842,2844],{"class":91,"line":109},[89,2833,1402],{"class":95},[89,2835,2836],{"class":221}," If the project uses Vue, use [",[89,2838,2839],{"class":105},"vue_rules.md",[89,2841,2824],{"class":221},[89,2843,2839],{"class":98},[89,2845,2846],{"class":221},") instead.\n",[11,2848,2849],{},"Claude only reads the file it actually needs.",[11,2851,2852,2853,2856,2857,2859],{},"This pattern is called ",[14,2854,2855],{},"progressive disclosure",". The body of ",[17,2858,1395],{}," is loaded when the skill is invoked, and any referenced files are read only if the task actually requires them.",[11,2861,2862,2863,2865],{},"Anthropic recommends keeping ",[17,2864,1395],{}," under 500 lines and pushing heavier details into supporting files. After using skills for a while, that advice makes a lot of sense.",[69,2867,2869],{"id":2868},"tip-3-skills-can-pre-approve-tools","Tip 3: Skills Can Pre-Approve Tools",[11,2871,2872,2873,2876],{},"You can add an ",[17,2874,2875],{},"allowed-tools"," line in the frontmatter to pre-approve specific tools, so a mostly mechanical skill doesn't keep stopping to ask for permission.",[11,2878,2879],{},"This is especially useful for skills that always perform the same safe operations, like running checks, formatting code, or committing.",[80,2881,2883],{"className":1393,"code":2882,"language":1335,"meta":85,"style":85},"---\nname: commit\ndescription: Stage and commit the current changes with a concise message.\nallowed-tools: Bash(git add *) Bash(git commit *)\n---\n",[17,2884,2885,2889,2898,2907,2916],{"__ignoreMap":85},[89,2886,2887],{"class":91,"line":92},[89,2888,1710],{"class":221},[89,2890,2891,2893,2895],{"class":91,"line":109},[89,2892,1715],{"class":1068},[89,2894,231],{"class":221},[89,2896,2897],{"class":98},"commit\n",[89,2899,2900,2902,2904],{"class":91,"line":125},[89,2901,1725],{"class":1068},[89,2903,231],{"class":221},[89,2905,2906],{"class":98},"Stage and commit the current changes with a concise message.\n",[89,2908,2909,2911,2913],{"class":91,"line":253},[89,2910,2875],{"class":1068},[89,2912,231],{"class":221},[89,2914,2915],{"class":98},"Bash(git add *) Bash(git commit *)\n",[89,2917,2918],{"class":91,"line":266},[89,2919,1710],{"class":221},[11,2921,2922,2923,2926],{},"The opposite works too: use the ",[17,2924,2925],{},"disallowed-tools"," field to block specific tools.",[2928,2929],"hr",{},[58,2931,2933],{"id":2932},"turning-a-repetitive-workflow-into-a-skill","Turning a Repetitive Workflow Into a Skill",[11,2935,2936,2937,2939],{},"Now, we can put all these tips into action to create our full ",[17,2938,1415],{}," skill.",[11,2941,2942],{},"As I said at the beginning, the routine I got tired of looked something like this:",[22,2944,2945,2948,2951,2954,2957,2960],{},[25,2946,2947],{},"Branch off the default branch.",[25,2949,2950],{},"Stage the changes.",[25,2952,2953],{},"Read the full diff instead of trusting the commit messages.",[25,2955,2956],{},"With that information, write a descriptive title and short description.",[25,2958,2959],{},"Open the PR in GitHub.",[25,2961,2962],{},"Request a review from Copilot, GitHub's automated code review bot.",[11,2964,2965],{},"So let's turn that workflow into something the agent can execute.",[11,2967,2968,2969,2971],{},"Instead of cramming everything into one giant ",[17,2970,1395],{},", let's split it into different files:",[80,2973,2976],{"className":2974,"code":2975,"language":2560,"meta":85},[2558],"📂 github-pr/\n├── 📄 SKILL.md\n├── 📄 pull_request_description_template.md\n└── ▶️ rebase.sh\n",[17,2977,2975],{"__ignoreMap":85},[22,2979,2980,2985,2991],{},[25,2981,2982,2984],{},[17,2983,1395],{}," is the main recipe.",[25,2986,2987,2990],{},[17,2988,2989],{},"pull_request_description_template.md"," is the PR description base.",[25,2992,2993,2996],{},[17,2994,2995],{},"rebase.sh"," handles the one mechanical step that's worth scripting.",[11,2998,2999],{},"Let's review each, starting with the skill file:",[80,3001,3003],{"className":1393,"code":3002,"filename":1395,"language":1335,"meta":85,"style":85},"---\nname: github-pr\ndescription: Create a GitHub PR with a concise description.\nallowed-tools: Bash(git *) Bash(gh pr create *)\n---\n\n# GitHub PR Skill\n\nOpen a pull request with a short, descriptive title and a clear description.\n\n## Usage\n\n`/github-pr \u003Ctarget-branch>`\n\n## Steps\n\n1. Find the default branch if no target was given:\n\n`git remote show origin | sed -n 's/.*HEAD branch: //p'`\n\n2. Move the current changes onto a fresh feature branch, on top of the latest target. Name the branch after the change (e.g. \"add-user-profile\", \"fix-cart-rounding\"):\n\n`${CLAUDE_SKILL_DIR}/rebase.sh \u003Ctarget> \u003Cfeature-branch>`\n\n3. Read the full diff so the description reflects what actually changed:\n\n`git diff \u003Ctarget>...HEAD`\n\n4. Draft the PR body from [pull_request_description_template.md](pull_request_description_template.md), filling it in from the diff. Keep the title concise and descriptive (\"Add user profile page\").\n\n5. Push the branch and open the PR:\n\n```sh\ngit push --set-upstream origin \"$(git branch --show-current)\"\ngh pr create --base \u003Ctarget> --title \"\u003Ctitle>\" --body-file - \u003C\u003C'EOF'\n\u003Cthe filled-in PR body>\nEOF\n```\n\n## Tone\n\nWrite plainly. No bold labels on bullets. No AI tells (\"seamlessly\", \"leverage\", \"robust\", \"ensures that\"). No hyphens or em dashes as sentence connectors.\n\n## Rules\n\n- No co-authors.\n- No screenshots.\n- Descriptive title required.\n",[17,3004,3005,3009,3018,3027,3036,3040,3044,3049,3053,3058,3062,3067,3071,3076,3080,3084,3088,3095,3099,3104,3108,3115,3119,3124,3128,3135,3139,3144,3148,3164,3168,3175,3179,3184,3212,3253,3258,3263,3267,3271,3276,3280,3285,3289,3294,3298,3305,3312],{"__ignoreMap":85},[89,3006,3007],{"class":91,"line":92},[89,3008,1710],{"class":221},[89,3010,3011,3013,3015],{"class":91,"line":109},[89,3012,1715],{"class":1068},[89,3014,231],{"class":221},[89,3016,3017],{"class":98},"github-pr\n",[89,3019,3020,3022,3024],{"class":91,"line":125},[89,3021,1725],{"class":1068},[89,3023,231],{"class":221},[89,3025,3026],{"class":98},"Create a GitHub PR with a concise description.\n",[89,3028,3029,3031,3033],{"class":91,"line":253},[89,3030,2875],{"class":1068},[89,3032,231],{"class":221},[89,3034,3035],{"class":98},"Bash(git *) Bash(gh pr create *)\n",[89,3037,3038],{"class":91,"line":266},[89,3039,1710],{"class":221},[89,3041,3042],{"class":91,"line":279},[89,3043,1116],{"emptyLinePlaceholder":51},[89,3045,3046],{"class":91,"line":288},[89,3047,3048],{"class":1478},"# GitHub PR Skill\n",[89,3050,3051],{"class":91,"line":294},[89,3052,1116],{"emptyLinePlaceholder":51},[89,3054,3055],{"class":91,"line":307},[89,3056,3057],{"class":221},"Open a pull request with a short, descriptive title and a clear description.\n",[89,3059,3060],{"class":91,"line":320},[89,3061,1116],{"emptyLinePlaceholder":51},[89,3063,3064],{"class":91,"line":333},[89,3065,3066],{"class":1478},"## Usage\n",[89,3068,3069],{"class":91,"line":346},[89,3070,1116],{"emptyLinePlaceholder":51},[89,3072,3073],{"class":91,"line":359},[89,3074,3075],{"class":1408},"`/github-pr \u003Ctarget-branch>`\n",[89,3077,3078],{"class":91,"line":370},[89,3079,1116],{"emptyLinePlaceholder":51},[89,3081,3082],{"class":91,"line":376},[89,3083,2123],{"class":1478},[89,3085,3086],{"class":91,"line":381},[89,3087,1116],{"emptyLinePlaceholder":51},[89,3089,3090,3092],{"class":91,"line":392},[89,3091,2132],{"class":95},[89,3093,3094],{"class":221}," Find the default branch if no target was given:\n",[89,3096,3097],{"class":91,"line":404},[89,3098,1116],{"emptyLinePlaceholder":51},[89,3100,3101],{"class":91,"line":416},[89,3102,3103],{"class":1408},"`git remote show origin | sed -n 's/.*HEAD branch: //p'`\n",[89,3105,3106],{"class":91,"line":428},[89,3107,1116],{"emptyLinePlaceholder":51},[89,3109,3110,3112],{"class":91,"line":440},[89,3111,2146],{"class":95},[89,3113,3114],{"class":221}," Move the current changes onto a fresh feature branch, on top of the latest target. Name the branch after the change (e.g. \"add-user-profile\", \"fix-cart-rounding\"):\n",[89,3116,3117],{"class":91,"line":449},[89,3118,1116],{"emptyLinePlaceholder":51},[89,3120,3121],{"class":91,"line":455},[89,3122,3123],{"class":1408},"`${CLAUDE_SKILL_DIR}/rebase.sh \u003Ctarget> \u003Cfeature-branch>`\n",[89,3125,3126],{"class":91,"line":461},[89,3127,1116],{"emptyLinePlaceholder":51},[89,3129,3130,3132],{"class":91,"line":1870},[89,3131,2158],{"class":95},[89,3133,3134],{"class":221}," Read the full diff so the description reflects what actually changed:\n",[89,3136,3137],{"class":91,"line":1875},[89,3138,1116],{"emptyLinePlaceholder":51},[89,3140,3141],{"class":91,"line":1881},[89,3142,3143],{"class":1408},"`git diff \u003Ctarget>...HEAD`\n",[89,3145,3146],{"class":91,"line":1886},[89,3147,1116],{"emptyLinePlaceholder":51},[89,3149,3150,3152,3155,3157,3159,3161],{"class":91,"line":1892},[89,3151,2166],{"class":95},[89,3153,3154],{"class":221}," Draft the PR body from [",[89,3156,2989],{"class":105},[89,3158,2824],{"class":221},[89,3160,2989],{"class":98},[89,3162,3163],{"class":221},"), filling it in from the diff. Keep the title concise and descriptive (\"Add user profile page\").\n",[89,3165,3166],{"class":91,"line":1897},[89,3167,1116],{"emptyLinePlaceholder":51},[89,3169,3170,3172],{"class":91,"line":1903},[89,3171,2185],{"class":95},[89,3173,3174],{"class":221}," Push the branch and open the PR:\n",[89,3176,3177],{"class":91,"line":1908},[89,3178,1116],{"emptyLinePlaceholder":51},[89,3180,3181],{"class":91,"line":1920},[89,3182,3183],{"class":221},"```sh\n",[89,3185,3186,3189,3192,3195,3198,3201,3203,3206,3209],{"class":91,"line":1925},[89,3187,3188],{"class":95},"git",[89,3190,3191],{"class":98}," push",[89,3193,3194],{"class":105}," --set-upstream",[89,3196,3197],{"class":98}," origin",[89,3199,3200],{"class":98}," \"$(",[89,3202,3188],{"class":95},[89,3204,3205],{"class":98}," branch ",[89,3207,3208],{"class":105},"--show-current",[89,3210,3211],{"class":98},")\"\n",[89,3213,3214,3216,3219,3222,3225,3227,3230,3233,3235,3238,3241,3244,3247,3250],{"class":91,"line":1931},[89,3215,477],{"class":95},[89,3217,3218],{"class":98}," pr",[89,3220,3221],{"class":98}," create",[89,3223,3224],{"class":105}," --base",[89,3226,2624],{"class":1068},[89,3228,3229],{"class":98},"targe",[89,3231,3232],{"class":221},"t",[89,3234,2630],{"class":1068},[89,3236,3237],{"class":105}," --title",[89,3239,3240],{"class":98}," \"\u003Ctitle>\"",[89,3242,3243],{"class":105}," --body-file",[89,3245,3246],{"class":98}," -",[89,3248,3249],{"class":1068}," \u003C\u003C",[89,3251,3252],{"class":221},"'EOF'\n",[89,3254,3255],{"class":91,"line":1936},[89,3256,3257],{"class":98},"\u003Cthe filled-in PR body>\n",[89,3259,3260],{"class":91,"line":1942},[89,3261,3262],{"class":221},"EOF\n",[89,3264,3265],{"class":91,"line":1947},[89,3266,1867],{"class":221},[89,3268,3269],{"class":91,"line":1953},[89,3270,1116],{"emptyLinePlaceholder":51},[89,3272,3273],{"class":91,"line":1958},[89,3274,3275],{"class":1478},"## Tone\n",[89,3277,3278],{"class":91,"line":1964},[89,3279,1116],{"emptyLinePlaceholder":51},[89,3281,3282],{"class":91,"line":1969},[89,3283,3284],{"class":221},"Write plainly. No bold labels on bullets. No AI tells (\"seamlessly\", \"leverage\", \"robust\", \"ensures that\"). No hyphens or em dashes as sentence connectors.\n",[89,3286,3287],{"class":91,"line":1975},[89,3288,1116],{"emptyLinePlaceholder":51},[89,3290,3291],{"class":91,"line":1980},[89,3292,3293],{"class":1478},"## Rules\n",[89,3295,3296],{"class":91,"line":1986},[89,3297,1116],{"emptyLinePlaceholder":51},[89,3299,3300,3302],{"class":91,"line":1991},[89,3301,1402],{"class":95},[89,3303,3304],{"class":221}," No co-authors.\n",[89,3306,3307,3309],{"class":91,"line":1997},[89,3308,1402],{"class":95},[89,3310,3311],{"class":221}," No screenshots.\n",[89,3313,3314,3316],{"class":91,"line":2002},[89,3315,1402],{"class":95},[89,3317,3318],{"class":221}," Descriptive title required.\n",[11,3320,3321,3322,3325,3326],{},"Notice how the skill itself stays small. The real work lives in the pieces around it, which are much easier to maintain on their own: the ",[14,3323,3324],{},"script"," and the ",[14,3327,3328],{},"template.",[11,3330,3331,3332],{},"Here's the ",[14,3333,3334],{},"script:",[80,3336,3338],{"className":2570,"code":3337,"filename":2995,"language":2572,"meta":85,"style":85},"#!/usr/bin/env bash\n# Move the current local changes onto a fresh feature branch,\n# on top of the latest version of the target branch.\n# Usage: rebase.sh \u003Ctarget-branch> \u003Cfeature-branch>\nset -euo pipefail\n\nTARGET=\"${1:?usage: rebase.sh \u003Ctarget-branch> \u003Cfeature-branch>}\"\nBRANCH=\"${2:?usage: rebase.sh \u003Ctarget-branch> \u003Cfeature-branch>}\"\n\ngit stash push --include-untracked --message \"github-pr wip\" || true\ngit checkout \"$TARGET\"\ngit pull --ff-only\ngit checkout -b \"$BRANCH\"\ngit stash pop || true\n",[17,3339,3340,3344,3349,3354,3359,3367,3371,3412,3449,3453,3477,3491,3501,3517],{"__ignoreMap":85},[89,3341,3342],{"class":91,"line":92},[89,3343,2579],{"class":1121},[89,3345,3346],{"class":91,"line":109},[89,3347,3348],{"class":1121},"# Move the current local changes onto a fresh feature branch,\n",[89,3350,3351],{"class":91,"line":125},[89,3352,3353],{"class":1121},"# on top of the latest version of the target branch.\n",[89,3355,3356],{"class":91,"line":253},[89,3357,3358],{"class":1121},"# Usage: rebase.sh \u003Ctarget-branch> \u003Cfeature-branch>\n",[89,3360,3361,3363,3365],{"class":91,"line":266},[89,3362,2585],{"class":2584},[89,3364,2588],{"class":105},[89,3366,2591],{"class":98},[89,3368,3369],{"class":91,"line":279},[89,3370,1116],{"emptyLinePlaceholder":51},[89,3372,3373,3376,3378,3380,3382,3384,3386,3388,3391,3393,3395,3397,3400,3403,3406,3408,3410],{"class":91,"line":288},[89,3374,3375],{"class":221},"TARGET",[89,3377,1069],{"class":1068},[89,3379,2601],{"class":98},[89,3381,2605],{"class":2604},[89,3383,2608],{"class":1068},[89,3385,510],{"class":221},[89,3387,2613],{"class":1068},[89,3389,3390],{"class":221}," rebase",[89,3392,504],{"class":98},[89,3394,2621],{"class":221},[89,3396,2624],{"class":98},[89,3398,3399],{"class":221},"target-branch",[89,3401,3402],{"class":98},"> \u003C",[89,3404,3405],{"class":221},"feature-branch",[89,3407,2630],{"class":98},[89,3409,2633],{"class":2604},[89,3411,2636],{"class":98},[89,3413,3414,3417,3419,3421,3423,3425,3427,3429,3431,3433,3435,3437,3439,3441,3443,3445,3447],{"class":91,"line":294},[89,3415,3416],{"class":221},"BRANCH",[89,3418,1069],{"class":1068},[89,3420,2601],{"class":98},[89,3422,2648],{"class":2604},[89,3424,2608],{"class":1068},[89,3426,510],{"class":221},[89,3428,2613],{"class":1068},[89,3430,3390],{"class":221},[89,3432,504],{"class":98},[89,3434,2621],{"class":221},[89,3436,2624],{"class":98},[89,3438,3399],{"class":221},[89,3440,3402],{"class":98},[89,3442,3405],{"class":221},[89,3444,2630],{"class":98},[89,3446,2633],{"class":2604},[89,3448,2636],{"class":98},[89,3450,3451],{"class":91,"line":307},[89,3452,1116],{"emptyLinePlaceholder":51},[89,3454,3455,3457,3460,3462,3465,3468,3471,3474],{"class":91,"line":320},[89,3456,3188],{"class":95},[89,3458,3459],{"class":98}," stash",[89,3461,3191],{"class":98},[89,3463,3464],{"class":105}," --include-untracked",[89,3466,3467],{"class":105}," --message",[89,3469,3470],{"class":98}," \"github-pr wip\"",[89,3472,3473],{"class":1068}," ||",[89,3475,3476],{"class":2584}," true\n",[89,3478,3479,3481,3484,3486,3489],{"class":91,"line":333},[89,3480,3188],{"class":95},[89,3482,3483],{"class":98}," checkout",[89,3485,2682],{"class":98},[89,3487,3488],{"class":221},"$TARGET",[89,3490,2636],{"class":98},[89,3492,3493,3495,3498],{"class":91,"line":346},[89,3494,3188],{"class":95},[89,3496,3497],{"class":98}," pull",[89,3499,3500],{"class":105}," --ff-only\n",[89,3502,3503,3505,3507,3510,3512,3515],{"class":91,"line":359},[89,3504,3188],{"class":95},[89,3506,3483],{"class":98},[89,3508,3509],{"class":105}," -b",[89,3511,2682],{"class":98},[89,3513,3514],{"class":221},"$BRANCH",[89,3516,2636],{"class":98},[89,3518,3519,3521,3523,3526,3528],{"class":91,"line":370},[89,3520,3188],{"class":95},[89,3522,3459],{"class":98},[89,3524,3525],{"class":98}," pop",[89,3527,3473],{"class":1068},[89,3529,3476],{"class":2584},[11,3531,3532,3533,3536],{},"And here's the ",[14,3534,3535],{},"template"," all PR descriptions must follow:",[80,3538,3540],{"className":1393,"code":3539,"filename":2989,"language":1335,"meta":85,"style":85},"## What\n\n[One sentence: what this PR does.]\n\n## Changes\n\n- [One bullet per meaningful behavior change]\n\n## How to test\n\n1. [Step by step, so a reviewer can verify it]\n",[17,3541,3542,3547,3551,3556,3560,3565,3569,3576,3580,3585,3589],{"__ignoreMap":85},[89,3543,3544],{"class":91,"line":92},[89,3545,3546],{"class":1478},"## What\n",[89,3548,3549],{"class":91,"line":109},[89,3550,1116],{"emptyLinePlaceholder":51},[89,3552,3553],{"class":91,"line":125},[89,3554,3555],{"class":221},"[One sentence: what this PR does.]\n",[89,3557,3558],{"class":91,"line":253},[89,3559,1116],{"emptyLinePlaceholder":51},[89,3561,3562],{"class":91,"line":266},[89,3563,3564],{"class":1478},"## Changes\n",[89,3566,3567],{"class":91,"line":279},[89,3568,1116],{"emptyLinePlaceholder":51},[89,3570,3571,3573],{"class":91,"line":288},[89,3572,1402],{"class":95},[89,3574,3575],{"class":221}," [One bullet per meaningful behavior change]\n",[89,3577,3578],{"class":91,"line":294},[89,3579,1116],{"emptyLinePlaceholder":51},[89,3581,3582],{"class":91,"line":307},[89,3583,3584],{"class":1478},"## How to test\n",[89,3586,3587],{"class":91,"line":320},[89,3588,1116],{"emptyLinePlaceholder":51},[89,3590,3591,3593],{"class":91,"line":333},[89,3592,2132],{"class":95},[89,3594,3595],{"class":221}," [Step by step, so a reviewer can verify it]\n",[11,3597,3598,3599,3601],{},"Now I just type ",[17,3600,2260],{}," once my code is ready for review. And boom! The PR gets created.",[11,3603,3604],{},"The skill rebases the work, reads the diff, fills in the template, and opens the PR using the description format I like. The skill knows how I like my branches named, how I want PRs written, and what I don't want in the final output. All those little preferences I used to retype, now baked into something the agent just follows.",[2928,3606],{},[58,3608,1301],{"id":1300},[11,3610,3611],{},"Skills can really make your day (and your clanker's!) way easier. I've been trying to lean into skills more and more as I find parts of my workflow that can be automated.",[11,3613,3614],{},"The more I use them, the less they feel like time-saving shortcuts and the more they feel like teaching the agent how I work.",[11,3616,3617,3618,3623],{},"To learn more about skills, visit the ",[1380,3619,3622],{"href":3620,"rel":3621},"https://agentskills.io",[1440],"Agent Skills"," website.",[11,3625,1378,3626,3629],{},[1380,3627,3628],{"href":2314},"the next article",", we'll look at a more advanced way of working with skills: how to stack and chain them together to take our automation to the next level.",[11,3631,3632],{},"Until next time!",[1312,3634,3635],{},"html pre.shiki code .sCdxs, html code.shiki .sCdxs{--shiki-default:#F8F8F2}html pre.shiki code .s8I7P, html code.shiki .s8I7P{--shiki-default:#F92672}html pre.shiki code .s_Ekj, html code.shiki .s_Ekj{--shiki-default:#E6DB74}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sHkqI, html code.shiki .sHkqI{--shiki-default:#A6E22E}html pre.shiki code .snpHw, html code.shiki .snpHw{--shiki-default:#88846F}html pre.shiki code .sYf5A, html code.shiki .sYf5A{--shiki-default:#66D9EF}html pre.shiki code .s7s5_, html code.shiki .s7s5_{--shiki-default:#AE81FF}html pre.shiki code .sW0Xf, html code.shiki .sW0Xf{--shiki-default:#FD971F;--shiki-default-font-style:italic}html pre.shiki code .szGx7, html code.shiki .szGx7{--shiki-default:#FD971F}html pre.shiki code .ssRA_, html code.shiki .ssRA_{--shiki-default:#A6E22E;--shiki-default-font-weight:bold}",{"title":85,"searchDepth":109,"depth":109,"links":3637},[3638,3639,3644,3645],{"id":2376,"depth":109,"text":2377},{"id":2501,"depth":109,"text":2502,"children":3640},[3641,3642,3643],{"id":2512,"depth":125,"text":2513},{"id":2794,"depth":125,"text":2795},{"id":2868,"depth":125,"text":2869},{"id":2932,"depth":109,"text":2933},{"id":1300,"depth":109,"text":1301},"2026-07-08","If you keep giving your agent the same instructions over and over, write them down once as a skill and let it do the repetitive bits.","/img/blog/skills-i-know-kung-fu.png",{},{"title":2320,"description":3647},"blog/skills-i-know-kung-fu","ofnT_V552bv231JR8JZn6LX_1oEXMpEkTfGj3syw58U",{"id":3654,"title":3655,"body":3656,"category":1331,"date":3972,"description":3973,"draft":1334,"extension":1335,"image":3974,"meta":3975,"navigation":51,"path":3976,"seo":3977,"stem":3978,"tighten":1334,"__hash__":3979},"blog/blog/did-webmasters-go-extinct.md","Did Webmasters Go Extinct?",{"type":8,"value":3657,"toc":3962},[3658,3669,3672,3677,3680,3685,3688,3691,3695,3702,3709,3712,3715,3718,3721,3727,3730,3734,3737,3742,3745,3748,3763,3770,3773,3776,3780,3783,3788,3791,3794,3797,3801,3804,3809,3812,3822,3825,3832,3870,3877,3880,3887,3891,3898,3903,3912,3915,3929,3936,3946,3949,3953,3956,3959],[11,3659,3660,3661,3664,3665,3668],{},"Imagine you meet a few developer friends after work. You grab a table at a bar and before the first round arrives the conversation drifts to... ",[14,3662,3663],{},"AI."," It always does these days! AI is in every keynote, every group chat, every standup, and all over social media. It feels like the ",[1571,3666,3667],{},"only thing"," any of us can talk about.",[11,3670,3671],{},"And for good reason. It has genuinely changed the way we work, and got all of us asking the same questions:",[1252,3673,3674],{},[11,3675,3676],{},"What does this mean for me? How do I keep up? Should I lean into it, or hold out a little longer? Is it even safe? If I don't code anymore... what exactly do I do?",[11,3678,3679],{},"And sitting underneath all of those smaller questions, quietly, is the big one:",[1252,3681,3682],{},[11,3683,3684],{},"Will AI take my job?",[11,3686,3687],{},"Heck, perhaps some of you have already been directly affected by AI in some capacity.",[11,3689,3690],{},"It's something that worries me just as much as it worries you, so let me share where I've landed and how I see it. But first, a little bit of nostalgia.",[58,3692,3694],{"id":3693},"i-was-a-webmaster","I Was a Webmaster",[11,3696,3697,3698,3701],{},"Decades ago, I was a ",[14,3699,3700],{},"webmaster."," Show of hands: how many of you even remember that word?",[11,3703,3704,3705,3708],{},"At the turn of the millennium, the webmaster was simply the person who made the website. Not just the frontend, or just the backend: ",[1571,3706,3707],{},"the website."," One human being, start to finish. And that was possible because, back then, the web was a much smaller, much simpler creature.",[11,3710,3711],{},"Put something together in Photoshop, slice the design into images, conjure up HTML in Dreamweaver, and off you go! FTP those files to a shared hosting account and you're done.",[11,3713,3714],{},"I started toying around with websites when I got my first computer, in 2000. I still remember the first time I clicked that mysterious button in Internet Explorer 6. \"Edit in Microsoft FrontPage,\" the tooltip said. One click later, a clone of that page was sitting there, editable, right in front of me. And in another tab... the source code: HTML packed with tables and hacks.",[11,3716,3717],{},"Before I really understood what was happening, I was building sites for other people and getting paid for it. Not much, but who could ask for more? Building web stuff and getting paid, awesome!",[11,3719,3720],{},"The stack I worked with would be unrecognizable today. I fought to make my pages behave in Internet Explorer 6, 7, and 8. I built Flash intros and Flash sites (sorry, that was the trend). And when a project needed a little more muscle, I'd reach for WordPress and just enough PHP to make things dynamic and editable by the client.",[11,3722,3723,3724,3726],{},"All that made me a ",[14,3725,3700],{}," Clunky title, I know, but that was the word.",[11,3728,3729],{},"Now, do me a favor. Open a job board today and search for \"webmaster.\" Not a single posting, right? Sad. What happened?",[69,3731,3733],{"id":3732},"the-day-webmasters-were-gone","The Day Webmasters Were Gone",[11,3735,3736],{},"At this point you're probably thinking:",[1252,3738,3739],{},[11,3740,3741],{},"Sure, Nico, webmaster is a fossil of a word, and you, my friend, are old. Nobody calls a web developer a webmaster anymore.",[11,3743,3744],{},"And... you're right! That's exactly my point.",[11,3746,3747],{},"Did the webmasters go extinct? Did a meteor streak across the sky one Tuesday and wipe them and their Flash sites off the face of the Earth?",[11,3749,3750,3751,3754,3755,3758,3759,3762],{},"Of course not. ",[14,3752,3753],{},"We evolved."," Most of us are still around, just wearing different titles on our LinkedIn profiles. We changed because ",[1571,3756,3757],{},"the web changed,"," and fast. All of a sudden, the simple HTML with its cute ",[17,3760,3761],{},"\u003Cmarquee>"," tags didn't cut it anymore, and there was no jQuery plugin to save us. Frameworks showed up and multiplied: Ember, Angular, then React, then Vue and Svelte. JavaScript climbed out of the browser and onto the server with Node. And from there the toolbox just kept growing, from Webpack to Vite and from CoffeeScript to modern TypeScript. We can look back with nostalgia. The takeaway is obvious: things change.",[11,3764,3765,3766,3769],{},"And I had to learn every part of it as it arrived, whether I wanted to or not. I resented plenty of it at first. If in 2014 you were fast and happy with jQuery, Backbone, and Marionette, and someone parachuted you onto an Angular project, believe me, you felt the whiplash. \"Come on, whyyy?\" But that resistance, that little wall of ",[1571,3767,3768],{},"I don't want to learn a new thing right now",", is a wall you learn to climb over again and again, because the alternative is standing still while the industry walks off without you. That's just the nature of the game.",[11,3771,3772],{},"Webmasters mutated into many roles: backend developer, frontend developer, DevOps, QA. Of course, some closed the laptop and went off to open a beach bar. But a huge number of us simply adapted, and I'm one of them. I'm a full-stack developer today, I was a webmaster yesterday. I've been doing this for more than fifteen years. Twenty-six, really, if you count back to that fifteen-year-old kid poking around in FrontPage in 2000.",[11,3774,3775],{},"And it will keep going. The tools will keep shifting under our feet, because that is the one constant of this whole industry. Technology evolves, and we evolve with it, or we don't get to keep playing.",[58,3777,3779],{"id":3778},"which-brings-us-back-to-ai","Which Brings Us Back to AI",[11,3781,3782],{},"Here's the thing I most want you to carry away from this article:",[11,3784,3785],{},[14,3786,3787],{},"AI is here to shake up the market and rewrite how we work, but it will not take your place if you evolve.",[11,3789,3790],{},"That's the entire message. Evolve, and you stay in the game.",[11,3792,3793],{},"Yes, the name of your role will most likely change. Will you become an \"AI Coding Agent Wrangler\" or a \"Vibe Engineer\"? I wouldn't mind a business card that says \"Clanker Babysitter.\" We've all seen the crazy titles and silly job descriptions floating around. Take them with a grain of salt.",[11,3795,3796],{},"Because at the end of the day, what matters is what you actually bring to the table when it comes to solving a problem. And that was never just typing code.",[69,3798,3800],{"id":3799},"you-were-never-just-a-coder","You Were Never Just a Coder",[11,3802,3803],{},"Tell me if you've heard, or even felt, this:",[1252,3805,3806],{},[11,3807,3808],{},"AI is robbing me of the joy of coding.",[11,3810,3811],{},"I hear you. I kind of feel the same.",[11,3813,3814,3815,1024,3818,3821],{},"I love writing code by hand, fussing over the shape of a function, crafting good-looking methods. Hey, I even enjoyed the ",[1571,3816,3817],{},"tabs vs. spaces",[1571,3819,3820],{},"semicolons vs. no semicolons"," wars!",[11,3823,3824],{},"For me, coding was never a chore. It's the fun part, a little puzzle I'm genuinely happy to sit inside for an afternoon. And now here comes this new reality where you open your terminal, paste in a spec, and watch an agent spit out in thirty seconds the code you would've lovingly typed out over the next hour. If that stings a little, if it feels like something you enjoyed is being taken away, you're not wrong and you're not alone. Some mornings it gets me too.",[11,3826,3827,3828,3831],{},"But your job, your real job as an engineer and a problem-solver, ",[14,3829,3830],{},"was never just the act of typing characters into a file."," Coding was a part of it, often the most enjoyable part, but never the whole of it. Zoom out and the actual work has always looked more like this:",[22,3833,3834,3840,3846,3852,3858,3864],{},[25,3835,3836,3839],{},[14,3837,3838],{},"Research:"," Figuring out what's possible and what others have already solved.",[25,3841,3842,3845],{},[14,3843,3844],{},"Planning and specs:"," Deciding what problem we're truly here to fix, and for whom.",[25,3847,3848,3851],{},[14,3849,3850],{},"Coding:"," Turning all of that thinking into real, running source code. The fun part, I'll happily admit.",[25,3853,3854,3857],{},[14,3855,3856],{},"Code review:"," Reading your teammates' pull requests, following the open PRs on an open source project, and judging what's ready to ship.",[25,3859,3860,3863],{},[14,3861,3862],{},"Testing:"," Writing an automated test suite, or clicking through the app by hand until you trust it.",[25,3865,3866,3869],{},[14,3867,3868],{},"Documentation:"," The one we all mumble past (\"yeah... the docs are pending, but the API works\").",[11,3871,3872,3873,3876],{},"We did all six, but we poured most of our hours into that third bullet and sprinted through the rest. And ",[1571,3874,3875],{},"that ratio"," is precisely what AI is rearranging.",[11,3878,3879],{},"This isn't the end of writing code. We'll still write plenty. But if before you spent, say, 70% of the week producing code and 30% on everything around it, the new you may find that balance flipping on its head. Less time typing code, more time reading and reviewing the code an agent produced while you were busy elsewhere.",[11,3881,3882,3883,3886],{},"And ",[14,3884,3885],{},"reviewing"," is the step where I watch a lot of people quietly fumble the whole thing.",[58,3888,3890],{"id":3889},"a-recipe-for-disaster","A Recipe for Disaster",[11,3892,3893,3894,3897],{},"Some developers have started letting the agent write the code and then merging it without ever really reading it. That's the ",[1571,3895,3896],{},"vibe coding"," mantra, right?",[1252,3899,3900],{},[11,3901,3902],{},"There's a new kind of coding I call \"vibe coding,\" where you fully give in to the vibes, embrace exponentials, and forget that the code even exists. (Andrej Karpathy, Feb. 2025)",[11,3904,3905,3906,3911],{},"In that ",[1380,3907,3910],{"href":3908,"rel":3909},"https://x.com/karpathy/status/1886192184808149383?lang=en",[1440],"famous tweet,"," Karpathy says vibe coding isn't too bad for throwaway weekend projects. Fast forward to today, and you have companies shipping vibe-coded PRs into production like there's no tomorrow.",[11,3913,3914],{},"That's a mistake, and a costly one.",[11,3916,3917,3918,3921,3922,3925,3926],{},"Think about what you're actually doing when you build software. You're solving a ",[1571,3919,3920],{},"real problem"," for ",[1571,3923,3924],{},"real people",". So when something breaks at the worst possible moment, the agent is not the one who gets the phone call. The agent doesn't lose sleep, doesn't answer to the client, and doesn't carry the responsibility. ",[14,3927,3928],{},"You do.",[11,3930,3931,3932,3935],{},"When your customer loads the page and gets a big, ugly 500 error, \"Sorry, perhaps Claude merged a PR with a bug\" is not a sentence that will save you. You're still the one who has to take responsibility, fix the problem, and explain what went wrong. By all means, use AI to help you fix it, but understand that the accountability ",[1571,3933,3934],{},"never left your desk"," and never will.",[11,3937,3938,3941,3942,3945],{},[14,3939,3940],{},"So don't skip the review."," Read what the agent produced with the same care you'd give a coworker's pull request, the same care you brought the first time you inherited a stranger's codebase and had to understand it before you dared touch it. ",[14,3943,3944],{},"You already own this skill."," Nothing new is being asked of you here except a shift in where your hours go: a little less typing into a blank file, a lot more reading with a critical eye.",[11,3947,3948],{},"That shift is the whole point, and leaning into it is what turns AI from a rival into an ally. Meet it there, and it stops being the thing coming for your job and becomes the thing that helps you get to the finish line faster.",[58,3950,3952],{"id":3951},"so-whats-next","So What's Next?",[11,3954,3955],{},"It doesn't matter whether you're the friend who suspects AI is coming for everything, or the one who's already automated half of their week away. The move in front of you is the same we webmasters had to make twenty years ago: pick up the new tools, figure out how to make them work for you, and evolve.",[11,3957,3958],{},"I don't know if you're gonna get fired from your current position because of AI. But refusing to learn it just might leave you a step slower than the developer sitting at the next desk, someone no more talented than you who simply embraced the power-up.",[11,3960,3961],{},"Now, I have to go. A client asked for a Flash intro. Until next time!",{"title":85,"searchDepth":109,"depth":109,"links":3963},[3964,3967,3970,3971],{"id":3693,"depth":109,"text":3694,"children":3965},[3966],{"id":3732,"depth":125,"text":3733},{"id":3778,"depth":109,"text":3779,"children":3968},[3969],{"id":3799,"depth":125,"text":3800},{"id":3889,"depth":109,"text":3890},{"id":3951,"depth":109,"text":3952},"2026-07-07","AI is everywhere, and so is the question hiding underneath it: will it take my job? Here's what I think.","/img/blog/did-webmasters-go-extinct.png",{},"/blog/did-webmasters-go-extinct",{"title":3655,"description":3973},"blog/did-webmasters-go-extinct","B9fwi8C27nkhtZQQ8OukKDxXojpXQy4BmHeNblrwhKQ",{"id":5,"title":6,"body":3981,"category":1331,"date":1332,"description":1333,"draft":1334,"extension":1335,"image":1336,"meta":4953,"navigation":51,"path":1338,"seo":4954,"stem":1340,"tighten":1334,"__hash__":1341},{"type":8,"value":3982,"toc":4937},[3983,3989,4001,4003,4007,4009,4011,4015,4017,4021,4057,4063,4065,4067,4079,4091,4093,4095,4109,4303,4307,4315,4317,4325,4327,4329,4331,4343,4345,4519,4521,4523,4731,4737,4749,4751,4755,4823,4827,4835,4837,4851,4857,4875,4877,4879,4881,4883,4889,4893,4895,4899,4909,4911,4913,4927,4929,4933,4935],[11,3984,3985],{},[14,3986,3987,20],{},[17,3988,19],{},[22,3990,3991,3993,3997,3999],{},[25,3992,27],{},[25,3994,30,3995,34],{},[17,3996,33],{},[25,3998,37],{},[25,4000,40],{},[11,4002,43],{},[11,4004,4005],{},[47,4006],{"src":49,"poster":50,"controls":51,"playsInline":51,"preload":52,"style":53},[11,4008,56],{},[58,4010,61],{"id":60},[11,4012,64,4013,67],{},[17,4014,19],{},[69,4016,72],{"id":71},[11,4018,75,4019,78],{},[17,4020,33],{},[80,4022,4023],{"className":82,"code":83,"language":84,"meta":85,"style":85},[17,4024,4025,4035,4047],{"__ignoreMap":85},[89,4026,4027,4029,4031,4033],{"class":91,"line":92},[89,4028,33],{"class":95},[89,4030,99],{"class":98},[89,4032,102],{"class":98},[89,4034,106],{"class":105},[89,4036,4037,4039,4041,4043,4045],{"class":91,"line":109},[89,4038,33],{"class":95},[89,4040,99],{"class":98},[89,4042,116],{"class":98},[89,4044,119],{"class":105},[89,4046,122],{"class":98},[89,4048,4049,4051,4053,4055],{"class":91,"line":125},[89,4050,33],{"class":95},[89,4052,99],{"class":98},[89,4054,132],{"class":98},[89,4056,135],{"class":105},[11,4058,138,4059,141,4061,144],{},[17,4060,33],{},[17,4062,19],{},[69,4064,148],{"id":147},[11,4066,151],{},[80,4068,4069],{"className":82,"code":154,"language":84,"meta":85,"style":85},[17,4070,4071],{"__ignoreMap":85},[89,4072,4073,4075,4077],{"class":91,"line":92},[89,4074,33],{"class":95},[89,4076,99],{"class":98},[89,4078,165],{"class":98},[11,4080,168,4081,172,4083,176,4085,179,4087,183,4089,187],{},[14,4082,171],{},[17,4084,175],{},[17,4086,19],{},[14,4088,182],{},[17,4090,186],{},[69,4092,191],{"id":190},[11,4094,194],{},[80,4096,4097],{"className":82,"code":197,"language":84,"meta":85,"style":85},[17,4098,4099],{"__ignoreMap":85},[89,4100,4101,4103,4105,4107],{"class":91,"line":92},[89,4102,33],{"class":95},[89,4104,99],{"class":98},[89,4106,102],{"class":98},[89,4108,106],{"class":105},[80,4110,4111],{"className":212,"code":213,"language":214,"meta":85,"style":85},[17,4112,4113,4117,4127,4137,4147,4157,4163,4167,4177,4187,4197,4207,4217,4225,4229,4233,4243,4253,4263,4273,4283,4291,4295,4299],{"__ignoreMap":85},[89,4114,4115],{"class":91,"line":92},[89,4116,222],{"class":221},[89,4118,4119,4121,4123,4125],{"class":91,"line":109},[89,4120,228],{"class":227},[89,4122,231],{"class":221},[89,4124,234],{"class":105},[89,4126,237],{"class":221},[89,4128,4129,4131,4133,4135],{"class":91,"line":125},[89,4130,242],{"class":227},[89,4132,231],{"class":221},[89,4134,248],{"class":247},[89,4136,237],{"class":221},[89,4138,4139,4141,4143,4145],{"class":91,"line":253},[89,4140,256],{"class":227},[89,4142,231],{"class":221},[89,4144,261],{"class":105},[89,4146,237],{"class":221},[89,4148,4149,4151,4153,4155],{"class":91,"line":266},[89,4150,269],{"class":227},[89,4152,231],{"class":221},[89,4154,274],{"class":105},[89,4156,237],{"class":221},[89,4158,4159,4161],{"class":91,"line":279},[89,4160,282],{"class":227},[89,4162,285],{"class":221},[89,4164,4165],{"class":91,"line":288},[89,4166,291],{"class":221},[89,4168,4169,4171,4173,4175],{"class":91,"line":294},[89,4170,297],{"class":227},[89,4172,231],{"class":221},[89,4174,302],{"class":105},[89,4176,237],{"class":221},[89,4178,4179,4181,4183,4185],{"class":91,"line":307},[89,4180,310],{"class":227},[89,4182,231],{"class":221},[89,4184,315],{"class":105},[89,4186,237],{"class":221},[89,4188,4189,4191,4193,4195],{"class":91,"line":320},[89,4190,323],{"class":227},[89,4192,231],{"class":221},[89,4194,328],{"class":247},[89,4196,237],{"class":221},[89,4198,4199,4201,4203,4205],{"class":91,"line":333},[89,4200,336],{"class":227},[89,4202,231],{"class":221},[89,4204,341],{"class":247},[89,4206,237],{"class":221},[89,4208,4209,4211,4213,4215],{"class":91,"line":346},[89,4210,349],{"class":227},[89,4212,231],{"class":221},[89,4214,354],{"class":247},[89,4216,237],{"class":221},[89,4218,4219,4221,4223],{"class":91,"line":359},[89,4220,362],{"class":227},[89,4222,231],{"class":221},[89,4224,367],{"class":105},[89,4226,4227],{"class":91,"line":370},[89,4228,373],{"class":221},[89,4230,4231],{"class":91,"line":376},[89,4232,291],{"class":221},[89,4234,4235,4237,4239,4241],{"class":91,"line":381},[89,4236,297],{"class":227},[89,4238,231],{"class":221},[89,4240,261],{"class":105},[89,4242,237],{"class":221},[89,4244,4245,4247,4249,4251],{"class":91,"line":392},[89,4246,310],{"class":227},[89,4248,231],{"class":221},[89,4250,399],{"class":105},[89,4252,237],{"class":221},[89,4254,4255,4257,4259,4261],{"class":91,"line":404},[89,4256,323],{"class":227},[89,4258,231],{"class":221},[89,4260,411],{"class":247},[89,4262,237],{"class":221},[89,4264,4265,4267,4269,4271],{"class":91,"line":416},[89,4266,336],{"class":227},[89,4268,231],{"class":221},[89,4270,423],{"class":247},[89,4272,237],{"class":221},[89,4274,4275,4277,4279,4281],{"class":91,"line":428},[89,4276,349],{"class":227},[89,4278,231],{"class":221},[89,4280,435],{"class":247},[89,4282,237],{"class":221},[89,4284,4285,4287,4289],{"class":91,"line":440},[89,4286,362],{"class":227},[89,4288,231],{"class":221},[89,4290,367],{"class":105},[89,4292,4293],{"class":91,"line":449},[89,4294,452],{"class":221},[89,4296,4297],{"class":91,"line":455},[89,4298,458],{"class":221},[89,4300,4301],{"class":91,"line":461},[89,4302,464],{"class":221},[11,4304,467,4305,471],{},[17,4306,470],{},[11,4308,474,4309,478,4311,482,4313,486],{},[17,4310,477],{},[17,4312,481],{},[17,4314,485],{},[69,4316,490],{"id":489},[11,4318,493,4319,496,4321,500,4323,504],{},[17,4320,19],{},[17,4322,499],{},[17,4324,503],{},[11,4326,507],{},[58,4328,511],{"id":510},[11,4330,514],{},[80,4332,4333],{"className":82,"code":517,"language":84,"meta":85,"style":85},[17,4334,4335],{"__ignoreMap":85},[89,4336,4337,4339,4341],{"class":91,"line":92},[89,4338,33],{"class":95},[89,4340,99],{"class":98},[89,4342,528],{"class":98},[11,4344,531],{},[533,4346,4347,4355],{},[536,4348,4349],{},[539,4350,4351,4353],{},[542,4352,544],{},[542,4354,547],{},[549,4356,4357,4367,4381,4409,4419,4431,4439,4459,4471,4481,4493,4503,4511],{},[539,4358,4359,4363],{},[554,4360,4361],{},[17,4362,558],{},[554,4364,561,4365,504],{},[17,4366,175],{},[539,4368,4369,4373],{},[554,4370,4371],{},[17,4372,570],{},[554,4374,573,4375,577,4377,577,4379,504],{},[17,4376,576],{},[17,4378,580],{},[17,4380,583],{},[539,4382,4383,4387],{},[554,4384,4385],{},[17,4386,590],{},[554,4388,593,4389,577,4391,577,4393,577,4395,577,4397,577,4399,577,4401,577,4403,577,4405,577,4407,504],{},[17,4390,596],{},[17,4392,599],{},[17,4394,602],{},[17,4396,605],{},[17,4398,608],{},[17,4400,611],{},[17,4402,614],{},[17,4404,580],{},[17,4406,576],{},[17,4408,583],{},[539,4410,4411,4415],{},[554,4412,4413],{},[17,4414,627],{},[554,4416,630,4417,634],{},[17,4418,633],{},[539,4420,4421,4425],{},[554,4422,4423],{},[17,4424,641],{},[554,4426,644,4427,577,4429,504],{},[17,4428,647],{},[17,4430,583],{},[539,4432,4433,4437],{},[554,4434,4435],{},[17,4436,656],{},[554,4438,659],{},[539,4440,4441,4445],{},[554,4442,4443],{},[17,4444,666],{},[554,4446,669,4447,673,4449,577,4451,673,4453,683,4455,673,4457,690],{},[17,4448,672],{},[17,4450,676],{},[17,4452,679],{},[17,4454,682],{},[17,4456,686],{},[17,4458,689],{},[539,4460,4461,4465],{},[554,4462,4463],{},[17,4464,697],{},[554,4466,700,4467,577,4469,706],{},[17,4468,605],{},[17,4470,705],{},[539,4472,4473,4477],{},[554,4474,4475],{},[17,4476,713],{},[554,4478,716,4479,720],{},[17,4480,719],{},[539,4482,4483,4487],{},[554,4484,4485],{},[17,4486,727],{},[554,4488,730,4489,733,4491,504],{},[17,4490,599],{},[17,4492,605],{},[539,4494,4495,4499],{},[554,4496,4497],{},[17,4498,742],{},[554,4500,745,4501,504],{},[17,4502,748],{},[539,4504,4505,4509],{},[554,4506,4507],{},[17,4508,755],{},[554,4510,758],{},[539,4512,4513,4517],{},[554,4514,4515],{},[17,4516,765],{},[554,4518,768],{},[69,4520,772],{"id":771},[11,4522,775],{},[80,4524,4525],{"className":82,"code":778,"language":84,"meta":85,"style":85},[17,4526,4527,4535,4545,4563,4573,4587,4599,4613,4629,4641,4657,4679,4703,4721],{"__ignoreMap":85},[89,4528,4529,4531,4533],{"class":91,"line":92},[89,4530,33],{"class":95},[89,4532,99],{"class":98},[89,4534,165],{"class":98},[89,4536,4537,4539,4541,4543],{"class":91,"line":109},[89,4538,33],{"class":95},[89,4540,99],{"class":98},[89,4542,102],{"class":98},[89,4544,106],{"class":105},[89,4546,4547,4549,4551,4553,4555,4557,4559,4561],{"class":91,"line":125},[89,4548,33],{"class":95},[89,4550,99],{"class":98},[89,4552,807],{"class":98},[89,4554,810],{"class":105},[89,4556,813],{"class":98},[89,4558,816],{"class":105},[89,4560,819],{"class":98},[89,4562,106],{"class":105},[89,4564,4565,4567,4569,4571],{"class":91,"line":253},[89,4566,33],{"class":95},[89,4568,99],{"class":98},[89,4570,830],{"class":98},[89,4572,833],{"class":105},[89,4574,4575,4577,4579,4581,4583,4585],{"class":91,"line":266},[89,4576,33],{"class":95},[89,4578,99],{"class":98},[89,4580,842],{"class":98},[89,4582,119],{"class":105},[89,4584,847],{"class":105},[89,4586,850],{"class":98},[89,4588,4589,4591,4593,4595,4597],{"class":91,"line":279},[89,4590,33],{"class":95},[89,4592,99],{"class":98},[89,4594,116],{"class":98},[89,4596,119],{"class":105},[89,4598,122],{"class":98},[89,4600,4601,4603,4605,4607,4609,4611],{"class":91,"line":288},[89,4602,33],{"class":95},[89,4604,99],{"class":98},[89,4606,102],{"class":98},[89,4608,873],{"class":105},[89,4610,876],{"class":98},[89,4612,106],{"class":105},[89,4614,4615,4617,4619,4621,4623,4625,4627],{"class":91,"line":294},[89,4616,33],{"class":95},[89,4618,99],{"class":98},[89,4620,116],{"class":98},[89,4622,119],{"class":105},[89,4624,842],{"class":98},[89,4626,873],{"class":105},[89,4628,895],{"class":98},[89,4630,4631,4633,4635,4637,4639],{"class":91,"line":307},[89,4632,33],{"class":95},[89,4634,99],{"class":98},[89,4636,904],{"class":98},[89,4638,119],{"class":105},[89,4640,909],{"class":98},[89,4642,4643,4645,4647,4649,4651,4653,4655],{"class":91,"line":320},[89,4644,33],{"class":95},[89,4646,99],{"class":98},[89,4648,918],{"class":98},[89,4650,119],{"class":105},[89,4652,923],{"class":105},[89,4654,926],{"class":105},[89,4656,929],{"class":98},[89,4658,4659,4661,4663,4665,4667,4669,4671,4673,4675,4677],{"class":91,"line":333},[89,4660,33],{"class":95},[89,4662,99],{"class":98},[89,4664,938],{"class":98},[89,4666,941],{"class":105},[89,4668,944],{"class":98},[89,4670,947],{"class":105},[89,4672,119],{"class":105},[89,4674,923],{"class":105},[89,4676,926],{"class":105},[89,4678,956],{"class":98},[89,4680,4681,4683,4685,4687,4689,4691,4693,4695,4697,4699,4701],{"class":91,"line":346},[89,4682,33],{"class":95},[89,4684,99],{"class":98},[89,4686,938],{"class":98},[89,4688,941],{"class":105},[89,4690,969],{"class":98},[89,4692,972],{"class":105},[89,4694,975],{"class":98},[89,4696,926],{"class":105},[89,4698,980],{"class":98},[89,4700,983],{"class":105},[89,4702,986],{"class":98},[89,4704,4705,4707,4709,4711,4713,4715,4717,4719],{"class":91,"line":359},[89,4706,33],{"class":95},[89,4708,99],{"class":98},[89,4710,995],{"class":98},[89,4712,119],{"class":105},[89,4714,941],{"class":105},[89,4716,1002],{"class":98},[89,4718,926],{"class":105},[89,4720,1007],{"class":98},[89,4722,4723,4725,4727,4729],{"class":91,"line":370},[89,4724,33],{"class":95},[89,4726,99],{"class":98},[89,4728,132],{"class":98},[89,4730,135],{"class":105},[11,4732,1020,4733,1024,4735,1027],{},[17,4734,1023],{},[17,4736,713],{},[22,4738,4739,4745],{},[25,4740,4741,1034,4743,1038],{},[17,4742,1023],{},[14,4744,1037],{},[25,4746,4747,1043],{},[17,4748,713],{},[58,4750,1047],{"id":1046},[11,4752,4753,1053],{},[17,4754,1052],{},[80,4756,4757],{"className":1056,"code":1057,"filename":175,"language":1058,"meta":85,"style":85},[17,4758,4759,4767,4775,4783,4791,4799,4803,4807,4815],{"__ignoreMap":85},[89,4760,4761,4763,4765],{"class":91,"line":92},[89,4762,1065],{"class":221},[89,4764,1069],{"class":1068},[89,4766,1072],{"class":221},[89,4768,4769,4771,4773],{"class":91,"line":109},[89,4770,1077],{"class":221},[89,4772,1069],{"class":1068},[89,4774,1082],{"class":221},[89,4776,4777,4779,4781],{"class":91,"line":125},[89,4778,1087],{"class":221},[89,4780,1069],{"class":1068},[89,4782,367],{"class":221},[89,4784,4785,4787,4789],{"class":91,"line":253},[89,4786,1096],{"class":221},[89,4788,1069],{"class":1068},[89,4790,1101],{"class":221},[89,4792,4793,4795,4797],{"class":91,"line":266},[89,4794,1106],{"class":221},[89,4796,1069],{"class":1068},[89,4798,1111],{"class":98},[89,4800,4801],{"class":91,"line":279},[89,4802,1116],{"emptyLinePlaceholder":51},[89,4804,4805],{"class":91,"line":288},[89,4806,1122],{"class":1121},[89,4808,4809,4811,4813],{"class":91,"line":294},[89,4810,719],{"class":221},[89,4812,1069],{"class":1068},[89,4814,1131],{"class":221},[89,4816,4817,4819,4821],{"class":91,"line":307},[89,4818,1136],{"class":221},[89,4820,1069],{"class":1068},[89,4822,1141],{"class":221},[11,4824,1144,4825,1147],{},[17,4826,713],{},[1149,4828,4829],{"color":1151,"icon":1152},[11,4830,1155,4831,1159,4833,1162],{},[14,4832,1158],{},[17,4834,1106],{},[11,4836,1165],{},[11,4838,4839,1170,4841,1174,4843,1177,4845,1180,4847,1184,4849,1187],{},[17,4840,558],{},[14,4842,1173],{},[17,4844,175],{},[17,4846,19],{},[14,4848,1183],{},[17,4850,186],{},[11,4852,1190,4853,1194,4855,1197],{},[17,4854,1193],{},[17,4856,558],{},[80,4858,4859],{"className":82,"code":1200,"language":84,"meta":85,"style":85},[17,4860,4861],{"__ignoreMap":85},[89,4862,4863,4865,4867,4869,4871,4873],{"class":91,"line":92},[89,4864,33],{"class":95},[89,4866,99],{"class":98},[89,4868,102],{"class":98},[89,4870,1213],{"class":105},[89,4872,1216],{"class":98},[89,4874,106],{"class":105},[58,4876,1222],{"id":1221},[11,4878,1225],{},[11,4880,1228],{},[11,4882,1231],{},[11,4884,1234,4885,1237,4887,1240],{},[17,4886,19],{},[17,4888,33],{},[11,4890,1243,4891,1247],{},[17,4892,1246],{},[11,4894,1250],{},[1252,4896,4897],{},[11,4898,1256],{},[11,4900,1259,4901,1262,4903,1265,4905,1269,4907,1272],{},[17,4902,590],{},[17,4904,672],{},[17,4906,1268],{},[17,4908,1023],{},[69,4910,1276],{"id":1275},[11,4912,1279],{},[80,4914,4915],{"className":82,"code":1282,"language":84,"meta":85,"style":85},[17,4916,4917],{"__ignoreMap":85},[89,4918,4919,4921,4923,4925],{"class":91,"line":92},[89,4920,33],{"class":95},[89,4922,1291],{"class":98},[89,4924,1294],{"class":98},[89,4926,1297],{"class":98},[58,4928,1301],{"id":1300},[11,4930,1304,4931,1307],{},[17,4932,19],{},[11,4934,1310],{},[1312,4936,1314],{},{"title":85,"searchDepth":109,"depth":109,"links":4938},[4939,4945,4948,4949,4952],{"id":60,"depth":109,"text":61,"children":4940},[4941,4942,4943,4944],{"id":71,"depth":125,"text":72},{"id":147,"depth":125,"text":148},{"id":190,"depth":125,"text":191},{"id":489,"depth":125,"text":490},{"id":510,"depth":109,"text":511,"children":4946},[4947],{"id":771,"depth":125,"text":772},{"id":1046,"depth":109,"text":1047},{"id":1221,"depth":109,"text":1222,"children":4950},[4951],{"id":1275,"depth":125,"text":1276},{"id":1300,"depth":109,"text":1301},{},{"title":6,"description":1333},[4956,5703,6749],{"id":1343,"title":1344,"body":4957,"category":1331,"date":2310,"description":2311,"draft":1334,"extension":1335,"image":2312,"meta":5701,"navigation":51,"path":2314,"seo":5702,"stem":2316,"tighten":1334,"__hash__":2317},{"type":8,"value":4958,"toc":5692},[4959,4961,4965,4967,4969,4973,4975,4977,4979,4985,4987,4999,5003,5007,5009,5011,5013,5018,5020,5032,5034,5036,5072,5074,5110,5112,5114,5116,5120,5124,5214,5216,5218,5222,5528,5530,5532,5622,5628,5630,5632,5634,5638,5640,5644,5646,5648,5680,5682,5684,5686,5688,5690],[11,4960,1349],{},[1252,4962,4963],{},[11,4964,1354],{},[11,4966,1357],{},[11,4968,1360],{},[1252,4970,4971],{},[11,4972,1365],{},[11,4974,1368],{},[11,4976,1371],{},[58,4978,1375],{"id":1374},[11,4980,1378,4981,1384,4983],{},[1380,4982,1383],{"href":1382},[14,4984,1387],{},[11,4986,1390],{},[80,4988,4989],{"className":1393,"code":1394,"filename":1395,"language":1335,"meta":85,"style":85},[17,4990,4991],{"__ignoreMap":85},[89,4992,4993,4995,4997],{"class":91,"line":92},[89,4994,1402],{"class":95},[89,4996,1405],{"class":221},[89,4998,1409],{"class":1408},[11,5000,1412,5001,1416],{},[17,5002,1415],{},[11,5004,1419,5005,1422],{},[17,5006,1395],{},[58,5008,1426],{"id":1425},[11,5010,1429],{},[11,5012,1432],{},[11,5014,1435,5015,1442],{},[1380,5016,1441],{"href":1438,"rel":5017},[1440],[11,5019,1445],{},[22,5021,5022,5024,5026,5028,5030],{},[25,5023,1450],{},[25,5025,1453],{},[25,5027,1456],{},[25,5029,1459],{},[25,5031,1462],{},[11,5033,1465],{},[11,5035,1468],{},[80,5037,5038],{"className":1393,"code":1471,"language":1335,"meta":85,"style":85},[17,5039,5040,5044,5048,5054,5060,5066],{"__ignoreMap":85},[89,5041,5042],{"class":91,"line":92},[89,5043,1479],{"class":1478},[89,5045,5046],{"class":91,"line":109},[89,5047,1116],{"emptyLinePlaceholder":51},[89,5049,5050,5052],{"class":91,"line":125},[89,5051,1402],{"class":95},[89,5053,1490],{"class":221},[89,5055,5056,5058],{"class":91,"line":253},[89,5057,1402],{"class":95},[89,5059,1497],{"class":221},[89,5061,5062,5064],{"class":91,"line":266},[89,5063,1402],{"class":95},[89,5065,1504],{"class":221},[89,5067,5068,5070],{"class":91,"line":279},[89,5069,1402],{"class":95},[89,5071,1511],{"class":221},[11,5073,1514],{},[80,5075,5076],{"className":1393,"code":1517,"language":1335,"meta":85,"style":85},[17,5077,5078,5082,5086,5092,5098,5104],{"__ignoreMap":85},[89,5079,5080],{"class":91,"line":92},[89,5081,1524],{"class":1478},[89,5083,5084],{"class":91,"line":109},[89,5085,1116],{"emptyLinePlaceholder":51},[89,5087,5088,5090],{"class":91,"line":125},[89,5089,1402],{"class":95},[89,5091,1535],{"class":221},[89,5093,5094,5096],{"class":91,"line":253},[89,5095,1402],{"class":95},[89,5097,1542],{"class":221},[89,5099,5100,5102],{"class":91,"line":266},[89,5101,1402],{"class":95},[89,5103,1549],{"class":221},[89,5105,5106,5108],{"class":91,"line":279},[89,5107,1402],{"class":95},[89,5109,1556],{"class":221},[11,5111,1559],{},[11,5113,1562],{},[58,5115,1566],{"id":1565},[11,5117,1569,5118,1574],{},[1571,5119,1573],{},[11,5121,1577,5122,1581],{},[17,5123,1580],{},[80,5125,5126],{"className":212,"code":1584,"filename":1580,"language":214,"meta":85,"style":85},[17,5127,5128,5132,5142,5152,5162,5168,5178,5188,5198,5206,5210],{"__ignoreMap":85},[89,5129,5130],{"class":91,"line":92},[89,5131,222],{"class":221},[89,5133,5134,5136,5138,5140],{"class":91,"line":109},[89,5135,1595],{"class":227},[89,5137,231],{"class":221},[89,5139,1600],{"class":247},[89,5141,237],{"class":221},[89,5143,5144,5146,5148,5150],{"class":91,"line":125},[89,5145,1607],{"class":227},[89,5147,231],{"class":221},[89,5149,1600],{"class":247},[89,5151,237],{"class":221},[89,5153,5154,5156,5158,5160],{"class":91,"line":253},[89,5155,1618],{"class":227},[89,5157,231],{"class":221},[89,5159,1623],{"class":247},[89,5161,237],{"class":221},[89,5163,5164,5166],{"class":91,"line":266},[89,5165,1630],{"class":227},[89,5167,1633],{"class":221},[89,5169,5170,5172,5174,5176],{"class":91,"line":279},[89,5171,1638],{"class":227},[89,5173,231],{"class":221},[89,5175,1643],{"class":247},[89,5177,237],{"class":221},[89,5179,5180,5182,5184,5186],{"class":91,"line":288},[89,5181,1650],{"class":227},[89,5183,231],{"class":221},[89,5185,1643],{"class":247},[89,5187,237],{"class":221},[89,5189,5190,5192,5194,5196],{"class":91,"line":294},[89,5191,1661],{"class":227},[89,5193,231],{"class":221},[89,5195,1643],{"class":247},[89,5197,237],{"class":221},[89,5199,5200,5202,5204],{"class":91,"line":307},[89,5201,1672],{"class":227},[89,5203,231],{"class":221},[89,5205,1677],{"class":247},[89,5207,5208],{"class":91,"line":320},[89,5209,1682],{"class":221},[89,5211,5212],{"class":91,"line":333},[89,5213,464],{"class":221},[11,5215,1689],{},[11,5217,1692],{},[11,5219,1695,5220,1699],{},[17,5221,1698],{},[80,5223,5224],{"className":1393,"code":1702,"filename":1703,"language":1335,"meta":85,"style":85},[17,5225,5226,5230,5238,5246,5250,5254,5258,5262,5266,5270,5278,5282,5286,5290,5300,5310,5320,5326,5336,5346,5356,5364,5368,5372,5376,5380,5384,5388,5392,5396,5400,5404,5412,5416,5420,5424,5428,5432,5436,5440,5444,5448,5452,5456,5460,5464,5468,5472,5476,5480,5484,5488,5492,5496,5500,5504,5508,5512,5522],{"__ignoreMap":85},[89,5227,5228],{"class":91,"line":92},[89,5229,1710],{"class":221},[89,5231,5232,5234,5236],{"class":91,"line":109},[89,5233,1715],{"class":1068},[89,5235,231],{"class":221},[89,5237,1720],{"class":98},[89,5239,5240,5242,5244],{"class":91,"line":125},[89,5241,1725],{"class":1068},[89,5243,231],{"class":221},[89,5245,1730],{"class":98},[89,5247,5248],{"class":91,"line":253},[89,5249,1710],{"class":221},[89,5251,5252],{"class":91,"line":266},[89,5253,1116],{"emptyLinePlaceholder":51},[89,5255,5256],{"class":91,"line":279},[89,5257,1743],{"class":221},[89,5259,5260],{"class":91,"line":288},[89,5261,1116],{"emptyLinePlaceholder":51},[89,5263,5264],{"class":91,"line":294},[89,5265,1752],{"class":1478},[89,5267,5268],{"class":91,"line":307},[89,5269,1116],{"emptyLinePlaceholder":51},[89,5271,5272,5274,5276],{"class":91,"line":320},[89,5273,1761],{"class":221},[89,5275,1764],{"class":1408},[89,5277,1767],{"class":221},[89,5279,5280],{"class":91,"line":333},[89,5281,1116],{"emptyLinePlaceholder":51},[89,5283,5284],{"class":91,"line":346},[89,5285,1776],{"class":221},[89,5287,5288],{"class":91,"line":359},[89,5289,222],{"class":221},[89,5291,5292,5294,5296,5298],{"class":91,"line":370},[89,5293,1595],{"class":227},[89,5295,231],{"class":221},[89,5297,1600],{"class":247},[89,5299,237],{"class":221},[89,5301,5302,5304,5306,5308],{"class":91,"line":376},[89,5303,1607],{"class":227},[89,5305,231],{"class":221},[89,5307,1600],{"class":247},[89,5309,237],{"class":221},[89,5311,5312,5314,5316,5318],{"class":91,"line":381},[89,5313,1618],{"class":227},[89,5315,231],{"class":221},[89,5317,1623],{"class":247},[89,5319,237],{"class":221},[89,5321,5322,5324],{"class":91,"line":392},[89,5323,1630],{"class":227},[89,5325,1633],{"class":221},[89,5327,5328,5330,5332,5334],{"class":91,"line":404},[89,5329,1638],{"class":227},[89,5331,231],{"class":221},[89,5333,1643],{"class":247},[89,5335,237],{"class":221},[89,5337,5338,5340,5342,5344],{"class":91,"line":416},[89,5339,1650],{"class":227},[89,5341,231],{"class":221},[89,5343,1643],{"class":247},[89,5345,237],{"class":221},[89,5347,5348,5350,5352,5354],{"class":91,"line":428},[89,5349,1661],{"class":227},[89,5351,231],{"class":221},[89,5353,1643],{"class":247},[89,5355,237],{"class":221},[89,5357,5358,5360,5362],{"class":91,"line":440},[89,5359,1672],{"class":227},[89,5361,231],{"class":221},[89,5363,1677],{"class":247},[89,5365,5366],{"class":91,"line":449},[89,5367,1682],{"class":221},[89,5369,5370],{"class":91,"line":455},[89,5371,464],{"class":221},[89,5373,5374],{"class":91,"line":461},[89,5375,1867],{"class":221},[89,5377,5378],{"class":91,"line":1870},[89,5379,1116],{"emptyLinePlaceholder":51},[89,5381,5382],{"class":91,"line":1875},[89,5383,1878],{"class":1478},[89,5385,5386],{"class":91,"line":1881},[89,5387,1116],{"emptyLinePlaceholder":51},[89,5389,5390],{"class":91,"line":1886},[89,5391,1889],{"class":1408},[89,5393,5394],{"class":91,"line":1892},[89,5395,1116],{"emptyLinePlaceholder":51},[89,5397,5398],{"class":91,"line":1897},[89,5399,1900],{"class":1478},[89,5401,5402],{"class":91,"line":1903},[89,5403,1116],{"emptyLinePlaceholder":51},[89,5405,5406,5408,5410],{"class":91,"line":1908},[89,5407,1911],{"class":221},[89,5409,1914],{"class":1408},[89,5411,1917],{"class":221},[89,5413,5414],{"class":91,"line":1920},[89,5415,1116],{"emptyLinePlaceholder":51},[89,5417,5418],{"class":91,"line":1925},[89,5419,1928],{"class":1408},[89,5421,5422],{"class":91,"line":1931},[89,5423,1116],{"emptyLinePlaceholder":51},[89,5425,5426],{"class":91,"line":1936},[89,5427,1939],{"class":1478},[89,5429,5430],{"class":91,"line":1942},[89,5431,1116],{"emptyLinePlaceholder":51},[89,5433,5434],{"class":91,"line":1947},[89,5435,1950],{"class":1408},[89,5437,5438],{"class":91,"line":1953},[89,5439,1116],{"emptyLinePlaceholder":51},[89,5441,5442],{"class":91,"line":1958},[89,5443,1961],{"class":1478},[89,5445,5446],{"class":91,"line":1964},[89,5447,1116],{"emptyLinePlaceholder":51},[89,5449,5450],{"class":91,"line":1969},[89,5451,1972],{"class":221},[89,5453,5454],{"class":91,"line":1975},[89,5455,1116],{"emptyLinePlaceholder":51},[89,5457,5458],{"class":91,"line":1980},[89,5459,1983],{"class":1408},[89,5461,5462],{"class":91,"line":1986},[89,5463,1116],{"emptyLinePlaceholder":51},[89,5465,5466],{"class":91,"line":1991},[89,5467,1994],{"class":1478},[89,5469,5470],{"class":91,"line":1997},[89,5471,1116],{"emptyLinePlaceholder":51},[89,5473,5474],{"class":91,"line":2002},[89,5475,2005],{"class":1408},[89,5477,5478],{"class":91,"line":2008},[89,5479,1116],{"emptyLinePlaceholder":51},[89,5481,5482],{"class":91,"line":2013},[89,5483,2016],{"class":1478},[89,5485,5486],{"class":91,"line":2019},[89,5487,1116],{"emptyLinePlaceholder":51},[89,5489,5490],{"class":91,"line":2024},[89,5491,2027],{"class":221},[89,5493,5494],{"class":91,"line":2030},[89,5495,1116],{"emptyLinePlaceholder":51},[89,5497,5498],{"class":91,"line":2035},[89,5499,2038],{"class":1408},[89,5501,5502],{"class":91,"line":2041},[89,5503,1116],{"emptyLinePlaceholder":51},[89,5505,5506],{"class":91,"line":2046},[89,5507,2049],{"class":1478},[89,5509,5510],{"class":91,"line":2052},[89,5511,1116],{"emptyLinePlaceholder":51},[89,5513,5514,5516,5518,5520],{"class":91,"line":2057},[89,5515,1402],{"class":95},[89,5517,2062],{"class":221},[89,5519,1764],{"class":1408},[89,5521,2067],{"class":221},[89,5523,5524,5526],{"class":91,"line":2070},[89,5525,1402],{"class":95},[89,5527,2075],{"class":221},[58,5529,2079],{"id":2078},[11,5531,2082],{},[80,5533,5534],{"className":1393,"code":2085,"filename":2086,"language":1335,"meta":85,"style":85},[17,5535,5536,5540,5548,5556,5560,5564,5568,5572,5582,5592,5598,5612],{"__ignoreMap":85},[89,5537,5538],{"class":91,"line":92},[89,5539,1710],{"class":221},[89,5541,5542,5544,5546],{"class":91,"line":109},[89,5543,1715],{"class":1068},[89,5545,231],{"class":221},[89,5547,2101],{"class":98},[89,5549,5550,5552,5554],{"class":91,"line":125},[89,5551,1725],{"class":1068},[89,5553,231],{"class":221},[89,5555,2110],{"class":98},[89,5557,5558],{"class":91,"line":253},[89,5559,1710],{"class":221},[89,5561,5562],{"class":91,"line":266},[89,5563,1116],{"emptyLinePlaceholder":51},[89,5565,5566],{"class":91,"line":279},[89,5567,2123],{"class":1478},[89,5569,5570],{"class":91,"line":288},[89,5571,1116],{"emptyLinePlaceholder":51},[89,5573,5574,5576,5578,5580],{"class":91,"line":294},[89,5575,2132],{"class":95},[89,5577,2135],{"class":221},[89,5579,2138],{"class":1408},[89,5581,2141],{"class":221},[89,5583,5584,5586,5588,5590],{"class":91,"line":307},[89,5585,2146],{"class":95},[89,5587,2135],{"class":221},[89,5589,2138],{"class":1408},[89,5591,2153],{"class":221},[89,5593,5594,5596],{"class":91,"line":320},[89,5595,2158],{"class":95},[89,5597,2161],{"class":221},[89,5599,5600,5602,5604,5606,5608,5610],{"class":91,"line":333},[89,5601,2166],{"class":95},[89,5603,2135],{"class":221},[89,5605,2171],{"class":1408},[89,5607,2174],{"class":221},[89,5609,2177],{"class":1408},[89,5611,2180],{"class":221},[89,5613,5614,5616,5618,5620],{"class":91,"line":346},[89,5615,2185],{"class":95},[89,5617,2135],{"class":221},[89,5619,2138],{"class":1408},[89,5621,2192],{"class":221},[11,5623,2195,5624,2198,5626,2201],{},[17,5625,1415],{},[17,5627,1698],{},[11,5629,2204],{},[58,5631,2208],{"id":2207},[11,5633,2211],{},[1252,5635,5636],{},[11,5637,2216],{},[11,5639,2219],{},[11,5641,2222,5642,2226],{},[1571,5643,2225],{},[58,5645,2230],{"id":2229},[11,5647,2233],{},[22,5649,5650,5660,5668,5674],{},[25,5651,5652,2241,5654,2244,5656,2247,5658,2251],{},[14,5653,2240],{},[17,5655,1415],{},[17,5657,1698],{},[17,5659,2250],{},[25,5661,5662,2257,5664,1024,5666,2264],{},[14,5663,2256],{},[17,5665,2260],{},[17,5667,2263],{},[25,5669,5670,2241,5672,2272],{},[14,5671,2269],{},[17,5673,2250],{},[25,5675,5676,2278,5678,2281],{},[14,5677,2277],{},[17,5679,1580],{},[11,5681,2284],{},[58,5683,2288],{"id":2287},[11,5685,2291],{},[11,5687,2294],{},[11,5689,2297],{},[1312,5691,2300],{},{"title":85,"searchDepth":109,"depth":109,"links":5693},[5694,5695,5696,5697,5698,5699,5700],{"id":1374,"depth":109,"text":1375},{"id":1425,"depth":109,"text":1426},{"id":1565,"depth":109,"text":1566},{"id":2078,"depth":109,"text":2079},{"id":2207,"depth":109,"text":2208},{"id":2229,"depth":109,"text":2230},{"id":2287,"depth":109,"text":2288},{},{"title":1344,"description":2311},{"id":2319,"title":2320,"body":5704,"category":1331,"date":3646,"description":3647,"draft":1334,"extension":1335,"image":3648,"meta":6747,"navigation":51,"path":1382,"seo":6748,"stem":3651,"tighten":1334,"__hash__":3652},{"type":8,"value":5705,"toc":6737},[5706,5712,5716,5718,5720,5726,5728,5732,5738,5740,5742,5744,5752,5756,5766,5768,5804,5806,5818,5824,5828,5830,5832,5836,5838,5840,5842,5854,5856,5864,5869,5873,6023,6029,6041,6043,6045,6047,6049,6053,6055,6087,6089,6095,6099,6101,6105,6107,6143,6147,6149,6151,6155,6157,6171,6173,6177,6182,6196,6198,6472,6478,6482,6654,6658,6710,6714,6716,6718,6720,6722,6724,6729,6733,6735],[11,5707,2325,5708,2329,5710,2333],{},[1571,5709,2328],{},[1571,5711,2332],{},[11,5713,2336,5714,2340],{},[14,5715,2339],{},[11,5717,2343],{},[11,5719,2346],{},[1252,5721,5722],{},[11,5723,2351,5724,2355],{},[1571,5725,2354],{},[11,5727,2358],{},[1252,5729,5730],{},[11,5731,2363],{},[11,5733,2366,5734,2370,5736],{},[1571,5735,2369],{},[1571,5737,2373],{},[58,5739,2377],{"id":2376},[11,5741,2380],{},[11,5743,2383],{},[11,5745,2386,5746,2390,5748,2394,5750,2397],{},[17,5747,2389],{},[17,5749,2393],{},[17,5751,1395],{},[11,5753,5754,2402],{},[17,5755,1395],{},[22,5757,5758,5764],{},[25,5759,2407,5760,2410,5762,504],{},[17,5761,1715],{},[17,5763,1725],{},[25,5765,2415],{},[11,5767,2418],{},[80,5769,5770],{"className":1393,"code":2421,"filename":2422,"language":1335,"meta":85,"style":85},[17,5771,5772,5776,5784,5792,5796,5800],{"__ignoreMap":85},[89,5773,5774],{"class":91,"line":92},[89,5775,1710],{"class":221},[89,5777,5778,5780,5782],{"class":91,"line":109},[89,5779,1715],{"class":1068},[89,5781,231],{"class":221},[89,5783,2437],{"class":98},[89,5785,5786,5788,5790],{"class":91,"line":125},[89,5787,1725],{"class":1068},[89,5789,231],{"class":221},[89,5791,2446],{"class":98},[89,5793,5794],{"class":91,"line":253},[89,5795,1710],{"class":221},[89,5797,5798],{"class":91,"line":266},[89,5799,1116],{"emptyLinePlaceholder":51},[89,5801,5802],{"class":91,"line":279},[89,5803,2459],{"class":221},[11,5805,2462],{},[22,5807,5808,5814],{},[25,5809,5810,2470,5812,2474],{},[14,5811,2469],{},[17,5813,2473],{},[25,5815,5816,2480],{},[14,5817,2479],{},[1149,5819,5820],{"color":1151,"icon":1152},[11,5821,2485,5822,2489],{},[17,5823,2488],{},[11,5825,2492,5826,2495],{},[17,5827,1725],{},[11,5829,2498],{},[58,5831,2502],{"id":2501},[11,5833,2505,5834,2509],{},[14,5835,2508],{},[69,5837,2513],{"id":2512},[11,5839,2516],{},[11,5841,2519],{},[80,5843,5844],{"className":2522,"code":2523,"filename":1395,"language":2524,"meta":85,"style":85},[17,5845,5846,5850],{"__ignoreMap":85},[89,5847,5848],{"class":91,"line":92},[89,5849,2531],{"class":1068},[89,5851,5852],{"class":91,"line":109},[89,5853,2536],{"class":95},[11,5855,2539],{},[11,5857,2542,5858,2546,5860,2550,5862,2554],{},[17,5859,2545],{},[17,5861,2549],{},[17,5863,2553],{},[80,5865,5867],{"className":5866,"code":2559,"language":2560,"meta":85},[2558],[17,5868,2559],{"__ignoreMap":85},[11,5870,5871,2567],{},[17,5872,2553],{},[80,5874,5875],{"className":2570,"code":2571,"filename":2553,"language":2572,"meta":85,"style":85},[17,5876,5877,5881,5889,5921,5943,5947,5951,5971,5975,5979,6007,6011,6015],{"__ignoreMap":85},[89,5878,5879],{"class":91,"line":92},[89,5880,2579],{"class":1121},[89,5882,5883,5885,5887],{"class":91,"line":109},[89,5884,2585],{"class":2584},[89,5886,2588],{"class":105},[89,5888,2591],{"class":98},[89,5890,5891,5893,5895,5897,5899,5901,5903,5905,5907,5909,5911,5913,5915,5917,5919],{"class":91,"line":125},[89,5892,2596],{"class":221},[89,5894,1069],{"class":1068},[89,5896,2601],{"class":98},[89,5898,2605],{"class":2604},[89,5900,2608],{"class":1068},[89,5902,510],{"class":221},[89,5904,2613],{"class":1068},[89,5906,2616],{"class":221},[89,5908,504],{"class":98},[89,5910,2621],{"class":221},[89,5912,2624],{"class":98},[89,5914,2627],{"class":221},[89,5916,2630],{"class":98},[89,5918,2633],{"class":2604},[89,5920,2636],{"class":98},[89,5922,5923,5925,5927,5929,5931,5933,5935,5937,5939,5941],{"class":91,"line":253},[89,5924,2641],{"class":221},[89,5926,1069],{"class":1068},[89,5928,2601],{"class":98},[89,5930,2648],{"class":2604},[89,5932,2651],{"class":1068},[89,5934,2654],{"class":221},[89,5936,504],{"class":98},[89,5938,2659],{"class":221},[89,5940,2633],{"class":2604},[89,5942,2636],{"class":98},[89,5944,5945],{"class":91,"line":266},[89,5946,1116],{"emptyLinePlaceholder":51},[89,5948,5949],{"class":91,"line":279},[89,5950,2672],{"class":1121},[89,5952,5953,5955,5957,5959,5961,5963,5965,5967,5969],{"class":91,"line":288},[89,5954,2549],{"class":95},[89,5956,2679],{"class":105},[89,5958,2682],{"class":98},[89,5960,2685],{"class":221},[89,5962,2601],{"class":98},[89,5964,2690],{"class":105},[89,5966,2693],{"class":98},[89,5968,2696],{"class":105},[89,5970,2699],{"class":98},[89,5972,5973],{"class":91,"line":294},[89,5974,1116],{"emptyLinePlaceholder":51},[89,5976,5977],{"class":91,"line":307},[89,5978,2708],{"class":1121},[89,5980,5981,5983,5985,5987,5989,5991,5993,5995,5997,5999,6001,6003,6005],{"class":91,"line":320},[89,5982,2549],{"class":95},[89,5984,2679],{"class":105},[89,5986,2682],{"class":98},[89,5988,2685],{"class":221},[89,5990,2601],{"class":98},[89,5992,2679],{"class":105},[89,5994,2725],{"class":98},[89,5996,2728],{"class":105},[89,5998,2731],{"class":98},[89,6000,2696],{"class":105},[89,6002,2682],{"class":98},[89,6004,2738],{"class":221},[89,6006,2636],{"class":98},[89,6008,6009],{"class":91,"line":333},[89,6010,1116],{"emptyLinePlaceholder":51},[89,6012,6013],{"class":91,"line":346},[89,6014,2749],{"class":1121},[89,6016,6017,6019,6021],{"class":91,"line":359},[89,6018,2754],{"class":95},[89,6020,2757],{"class":105},[89,6022,2699],{"class":98},[11,6024,2762,6025,2765,6027,2769],{},[17,6026,1395],{},[17,6028,2768],{},[80,6030,6031],{"className":1393,"code":2772,"language":1335,"meta":85,"style":85},[17,6032,6033],{"__ignoreMap":85},[89,6034,6035,6037,6039],{"class":91,"line":92},[89,6036,2779],{"class":221},[89,6038,2782],{"class":1408},[89,6040,2785],{"class":221},[11,6042,2788],{},[11,6044,2791],{},[69,6046,2795],{"id":2794},[11,6048,2798],{},[11,6050,2801,6051,504],{},[17,6052,1395],{},[11,6054,2806],{},[80,6056,6057],{"className":1393,"code":2809,"filename":1395,"language":1335,"meta":85,"style":85},[17,6058,6059,6073],{"__ignoreMap":85},[89,6060,6061,6063,6065,6067,6069,6071],{"class":91,"line":92},[89,6062,1402],{"class":95},[89,6064,2818],{"class":221},[89,6066,2821],{"class":105},[89,6068,2824],{"class":221},[89,6070,2821],{"class":98},[89,6072,2829],{"class":221},[89,6074,6075,6077,6079,6081,6083,6085],{"class":91,"line":109},[89,6076,1402],{"class":95},[89,6078,2836],{"class":221},[89,6080,2839],{"class":105},[89,6082,2824],{"class":221},[89,6084,2839],{"class":98},[89,6086,2846],{"class":221},[11,6088,2849],{},[11,6090,2852,6091,2856,6093,2859],{},[14,6092,2855],{},[17,6094,1395],{},[11,6096,2862,6097,2865],{},[17,6098,1395],{},[69,6100,2869],{"id":2868},[11,6102,2872,6103,2876],{},[17,6104,2875],{},[11,6106,2879],{},[80,6108,6109],{"className":1393,"code":2882,"language":1335,"meta":85,"style":85},[17,6110,6111,6115,6123,6131,6139],{"__ignoreMap":85},[89,6112,6113],{"class":91,"line":92},[89,6114,1710],{"class":221},[89,6116,6117,6119,6121],{"class":91,"line":109},[89,6118,1715],{"class":1068},[89,6120,231],{"class":221},[89,6122,2897],{"class":98},[89,6124,6125,6127,6129],{"class":91,"line":125},[89,6126,1725],{"class":1068},[89,6128,231],{"class":221},[89,6130,2906],{"class":98},[89,6132,6133,6135,6137],{"class":91,"line":253},[89,6134,2875],{"class":1068},[89,6136,231],{"class":221},[89,6138,2915],{"class":98},[89,6140,6141],{"class":91,"line":266},[89,6142,1710],{"class":221},[11,6144,2922,6145,2926],{},[17,6146,2925],{},[2928,6148],{},[58,6150,2933],{"id":2932},[11,6152,2936,6153,2939],{},[17,6154,1415],{},[11,6156,2942],{},[22,6158,6159,6161,6163,6165,6167,6169],{},[25,6160,2947],{},[25,6162,2950],{},[25,6164,2953],{},[25,6166,2956],{},[25,6168,2959],{},[25,6170,2962],{},[11,6172,2965],{},[11,6174,2968,6175,2971],{},[17,6176,1395],{},[80,6178,6180],{"className":6179,"code":2975,"language":2560,"meta":85},[2558],[17,6181,2975],{"__ignoreMap":85},[22,6183,6184,6188,6192],{},[25,6185,6186,2984],{},[17,6187,1395],{},[25,6189,6190,2990],{},[17,6191,2989],{},[25,6193,6194,2996],{},[17,6195,2995],{},[11,6197,2999],{},[80,6199,6200],{"className":1393,"code":3002,"filename":1395,"language":1335,"meta":85,"style":85},[17,6201,6202,6206,6214,6222,6230,6234,6238,6242,6246,6250,6254,6258,6262,6266,6270,6274,6278,6284,6288,6292,6296,6302,6306,6310,6314,6320,6324,6328,6332,6346,6350,6356,6360,6364,6384,6414,6418,6422,6426,6430,6434,6438,6442,6446,6450,6454,6460,6466],{"__ignoreMap":85},[89,6203,6204],{"class":91,"line":92},[89,6205,1710],{"class":221},[89,6207,6208,6210,6212],{"class":91,"line":109},[89,6209,1715],{"class":1068},[89,6211,231],{"class":221},[89,6213,3017],{"class":98},[89,6215,6216,6218,6220],{"class":91,"line":125},[89,6217,1725],{"class":1068},[89,6219,231],{"class":221},[89,6221,3026],{"class":98},[89,6223,6224,6226,6228],{"class":91,"line":253},[89,6225,2875],{"class":1068},[89,6227,231],{"class":221},[89,6229,3035],{"class":98},[89,6231,6232],{"class":91,"line":266},[89,6233,1710],{"class":221},[89,6235,6236],{"class":91,"line":279},[89,6237,1116],{"emptyLinePlaceholder":51},[89,6239,6240],{"class":91,"line":288},[89,6241,3048],{"class":1478},[89,6243,6244],{"class":91,"line":294},[89,6245,1116],{"emptyLinePlaceholder":51},[89,6247,6248],{"class":91,"line":307},[89,6249,3057],{"class":221},[89,6251,6252],{"class":91,"line":320},[89,6253,1116],{"emptyLinePlaceholder":51},[89,6255,6256],{"class":91,"line":333},[89,6257,3066],{"class":1478},[89,6259,6260],{"class":91,"line":346},[89,6261,1116],{"emptyLinePlaceholder":51},[89,6263,6264],{"class":91,"line":359},[89,6265,3075],{"class":1408},[89,6267,6268],{"class":91,"line":370},[89,6269,1116],{"emptyLinePlaceholder":51},[89,6271,6272],{"class":91,"line":376},[89,6273,2123],{"class":1478},[89,6275,6276],{"class":91,"line":381},[89,6277,1116],{"emptyLinePlaceholder":51},[89,6279,6280,6282],{"class":91,"line":392},[89,6281,2132],{"class":95},[89,6283,3094],{"class":221},[89,6285,6286],{"class":91,"line":404},[89,6287,1116],{"emptyLinePlaceholder":51},[89,6289,6290],{"class":91,"line":416},[89,6291,3103],{"class":1408},[89,6293,6294],{"class":91,"line":428},[89,6295,1116],{"emptyLinePlaceholder":51},[89,6297,6298,6300],{"class":91,"line":440},[89,6299,2146],{"class":95},[89,6301,3114],{"class":221},[89,6303,6304],{"class":91,"line":449},[89,6305,1116],{"emptyLinePlaceholder":51},[89,6307,6308],{"class":91,"line":455},[89,6309,3123],{"class":1408},[89,6311,6312],{"class":91,"line":461},[89,6313,1116],{"emptyLinePlaceholder":51},[89,6315,6316,6318],{"class":91,"line":1870},[89,6317,2158],{"class":95},[89,6319,3134],{"class":221},[89,6321,6322],{"class":91,"line":1875},[89,6323,1116],{"emptyLinePlaceholder":51},[89,6325,6326],{"class":91,"line":1881},[89,6327,3143],{"class":1408},[89,6329,6330],{"class":91,"line":1886},[89,6331,1116],{"emptyLinePlaceholder":51},[89,6333,6334,6336,6338,6340,6342,6344],{"class":91,"line":1892},[89,6335,2166],{"class":95},[89,6337,3154],{"class":221},[89,6339,2989],{"class":105},[89,6341,2824],{"class":221},[89,6343,2989],{"class":98},[89,6345,3163],{"class":221},[89,6347,6348],{"class":91,"line":1897},[89,6349,1116],{"emptyLinePlaceholder":51},[89,6351,6352,6354],{"class":91,"line":1903},[89,6353,2185],{"class":95},[89,6355,3174],{"class":221},[89,6357,6358],{"class":91,"line":1908},[89,6359,1116],{"emptyLinePlaceholder":51},[89,6361,6362],{"class":91,"line":1920},[89,6363,3183],{"class":221},[89,6365,6366,6368,6370,6372,6374,6376,6378,6380,6382],{"class":91,"line":1925},[89,6367,3188],{"class":95},[89,6369,3191],{"class":98},[89,6371,3194],{"class":105},[89,6373,3197],{"class":98},[89,6375,3200],{"class":98},[89,6377,3188],{"class":95},[89,6379,3205],{"class":98},[89,6381,3208],{"class":105},[89,6383,3211],{"class":98},[89,6385,6386,6388,6390,6392,6394,6396,6398,6400,6402,6404,6406,6408,6410,6412],{"class":91,"line":1931},[89,6387,477],{"class":95},[89,6389,3218],{"class":98},[89,6391,3221],{"class":98},[89,6393,3224],{"class":105},[89,6395,2624],{"class":1068},[89,6397,3229],{"class":98},[89,6399,3232],{"class":221},[89,6401,2630],{"class":1068},[89,6403,3237],{"class":105},[89,6405,3240],{"class":98},[89,6407,3243],{"class":105},[89,6409,3246],{"class":98},[89,6411,3249],{"class":1068},[89,6413,3252],{"class":221},[89,6415,6416],{"class":91,"line":1936},[89,6417,3257],{"class":98},[89,6419,6420],{"class":91,"line":1942},[89,6421,3262],{"class":221},[89,6423,6424],{"class":91,"line":1947},[89,6425,1867],{"class":221},[89,6427,6428],{"class":91,"line":1953},[89,6429,1116],{"emptyLinePlaceholder":51},[89,6431,6432],{"class":91,"line":1958},[89,6433,3275],{"class":1478},[89,6435,6436],{"class":91,"line":1964},[89,6437,1116],{"emptyLinePlaceholder":51},[89,6439,6440],{"class":91,"line":1969},[89,6441,3284],{"class":221},[89,6443,6444],{"class":91,"line":1975},[89,6445,1116],{"emptyLinePlaceholder":51},[89,6447,6448],{"class":91,"line":1980},[89,6449,3293],{"class":1478},[89,6451,6452],{"class":91,"line":1986},[89,6453,1116],{"emptyLinePlaceholder":51},[89,6455,6456,6458],{"class":91,"line":1991},[89,6457,1402],{"class":95},[89,6459,3304],{"class":221},[89,6461,6462,6464],{"class":91,"line":1997},[89,6463,1402],{"class":95},[89,6465,3311],{"class":221},[89,6467,6468,6470],{"class":91,"line":2002},[89,6469,1402],{"class":95},[89,6471,3318],{"class":221},[11,6473,3321,6474,3325,6476],{},[14,6475,3324],{},[14,6477,3328],{},[11,6479,3331,6480],{},[14,6481,3334],{},[80,6483,6484],{"className":2570,"code":3337,"filename":2995,"language":2572,"meta":85,"style":85},[17,6485,6486,6490,6494,6498,6502,6510,6514,6550,6586,6590,6608,6620,6628,6642],{"__ignoreMap":85},[89,6487,6488],{"class":91,"line":92},[89,6489,2579],{"class":1121},[89,6491,6492],{"class":91,"line":109},[89,6493,3348],{"class":1121},[89,6495,6496],{"class":91,"line":125},[89,6497,3353],{"class":1121},[89,6499,6500],{"class":91,"line":253},[89,6501,3358],{"class":1121},[89,6503,6504,6506,6508],{"class":91,"line":266},[89,6505,2585],{"class":2584},[89,6507,2588],{"class":105},[89,6509,2591],{"class":98},[89,6511,6512],{"class":91,"line":279},[89,6513,1116],{"emptyLinePlaceholder":51},[89,6515,6516,6518,6520,6522,6524,6526,6528,6530,6532,6534,6536,6538,6540,6542,6544,6546,6548],{"class":91,"line":288},[89,6517,3375],{"class":221},[89,6519,1069],{"class":1068},[89,6521,2601],{"class":98},[89,6523,2605],{"class":2604},[89,6525,2608],{"class":1068},[89,6527,510],{"class":221},[89,6529,2613],{"class":1068},[89,6531,3390],{"class":221},[89,6533,504],{"class":98},[89,6535,2621],{"class":221},[89,6537,2624],{"class":98},[89,6539,3399],{"class":221},[89,6541,3402],{"class":98},[89,6543,3405],{"class":221},[89,6545,2630],{"class":98},[89,6547,2633],{"class":2604},[89,6549,2636],{"class":98},[89,6551,6552,6554,6556,6558,6560,6562,6564,6566,6568,6570,6572,6574,6576,6578,6580,6582,6584],{"class":91,"line":294},[89,6553,3416],{"class":221},[89,6555,1069],{"class":1068},[89,6557,2601],{"class":98},[89,6559,2648],{"class":2604},[89,6561,2608],{"class":1068},[89,6563,510],{"class":221},[89,6565,2613],{"class":1068},[89,6567,3390],{"class":221},[89,6569,504],{"class":98},[89,6571,2621],{"class":221},[89,6573,2624],{"class":98},[89,6575,3399],{"class":221},[89,6577,3402],{"class":98},[89,6579,3405],{"class":221},[89,6581,2630],{"class":98},[89,6583,2633],{"class":2604},[89,6585,2636],{"class":98},[89,6587,6588],{"class":91,"line":307},[89,6589,1116],{"emptyLinePlaceholder":51},[89,6591,6592,6594,6596,6598,6600,6602,6604,6606],{"class":91,"line":320},[89,6593,3188],{"class":95},[89,6595,3459],{"class":98},[89,6597,3191],{"class":98},[89,6599,3464],{"class":105},[89,6601,3467],{"class":105},[89,6603,3470],{"class":98},[89,6605,3473],{"class":1068},[89,6607,3476],{"class":2584},[89,6609,6610,6612,6614,6616,6618],{"class":91,"line":333},[89,6611,3188],{"class":95},[89,6613,3483],{"class":98},[89,6615,2682],{"class":98},[89,6617,3488],{"class":221},[89,6619,2636],{"class":98},[89,6621,6622,6624,6626],{"class":91,"line":346},[89,6623,3188],{"class":95},[89,6625,3497],{"class":98},[89,6627,3500],{"class":105},[89,6629,6630,6632,6634,6636,6638,6640],{"class":91,"line":359},[89,6631,3188],{"class":95},[89,6633,3483],{"class":98},[89,6635,3509],{"class":105},[89,6637,2682],{"class":98},[89,6639,3514],{"class":221},[89,6641,2636],{"class":98},[89,6643,6644,6646,6648,6650,6652],{"class":91,"line":370},[89,6645,3188],{"class":95},[89,6647,3459],{"class":98},[89,6649,3525],{"class":98},[89,6651,3473],{"class":1068},[89,6653,3476],{"class":2584},[11,6655,3532,6656,3536],{},[14,6657,3535],{},[80,6659,6660],{"className":1393,"code":3539,"filename":2989,"language":1335,"meta":85,"style":85},[17,6661,6662,6666,6670,6674,6678,6682,6686,6692,6696,6700,6704],{"__ignoreMap":85},[89,6663,6664],{"class":91,"line":92},[89,6665,3546],{"class":1478},[89,6667,6668],{"class":91,"line":109},[89,6669,1116],{"emptyLinePlaceholder":51},[89,6671,6672],{"class":91,"line":125},[89,6673,3555],{"class":221},[89,6675,6676],{"class":91,"line":253},[89,6677,1116],{"emptyLinePlaceholder":51},[89,6679,6680],{"class":91,"line":266},[89,6681,3564],{"class":1478},[89,6683,6684],{"class":91,"line":279},[89,6685,1116],{"emptyLinePlaceholder":51},[89,6687,6688,6690],{"class":91,"line":288},[89,6689,1402],{"class":95},[89,6691,3575],{"class":221},[89,6693,6694],{"class":91,"line":294},[89,6695,1116],{"emptyLinePlaceholder":51},[89,6697,6698],{"class":91,"line":307},[89,6699,3584],{"class":1478},[89,6701,6702],{"class":91,"line":320},[89,6703,1116],{"emptyLinePlaceholder":51},[89,6705,6706,6708],{"class":91,"line":333},[89,6707,2132],{"class":95},[89,6709,3595],{"class":221},[11,6711,3598,6712,3601],{},[17,6713,2260],{},[11,6715,3604],{},[2928,6717],{},[58,6719,1301],{"id":1300},[11,6721,3611],{},[11,6723,3614],{},[11,6725,3617,6726,3623],{},[1380,6727,3622],{"href":3620,"rel":6728},[1440],[11,6730,1378,6731,3629],{},[1380,6732,3628],{"href":2314},[11,6734,3632],{},[1312,6736,3635],{},{"title":85,"searchDepth":109,"depth":109,"links":6738},[6739,6740,6745,6746],{"id":2376,"depth":109,"text":2377},{"id":2501,"depth":109,"text":2502,"children":6741},[6742,6743,6744],{"id":2512,"depth":125,"text":2513},{"id":2794,"depth":125,"text":2795},{"id":2868,"depth":125,"text":2869},{"id":2932,"depth":109,"text":2933},{"id":1300,"depth":109,"text":1301},{},{"title":2320,"description":3647},{"id":3654,"title":3655,"body":6750,"category":1331,"date":3972,"description":3973,"draft":1334,"extension":1335,"image":3974,"meta":6953,"navigation":51,"path":3976,"seo":6954,"stem":3978,"tighten":1334,"__hash__":3979},{"type":8,"value":6751,"toc":6943},[6752,6758,6760,6764,6766,6770,6772,6774,6776,6780,6784,6786,6788,6790,6792,6796,6798,6800,6802,6806,6808,6810,6818,6822,6824,6826,6828,6830,6834,6836,6838,6840,6842,6844,6848,6850,6856,6858,6862,6888,6892,6894,6898,6900,6904,6908,6913,6915,6923,6927,6933,6935,6937,6939,6941],[11,6753,3660,6754,3664,6756,3668],{},[14,6755,3663],{},[1571,6757,3667],{},[11,6759,3671],{},[1252,6761,6762],{},[11,6763,3676],{},[11,6765,3679],{},[1252,6767,6768],{},[11,6769,3684],{},[11,6771,3687],{},[11,6773,3690],{},[58,6775,3694],{"id":3693},[11,6777,3697,6778,3701],{},[14,6779,3700],{},[11,6781,3704,6782,3708],{},[1571,6783,3707],{},[11,6785,3711],{},[11,6787,3714],{},[11,6789,3717],{},[11,6791,3720],{},[11,6793,3723,6794,3726],{},[14,6795,3700],{},[11,6797,3729],{},[69,6799,3733],{"id":3732},[11,6801,3736],{},[1252,6803,6804],{},[11,6805,3741],{},[11,6807,3744],{},[11,6809,3747],{},[11,6811,3750,6812,3754,6814,3758,6816,3762],{},[14,6813,3753],{},[1571,6815,3757],{},[17,6817,3761],{},[11,6819,3765,6820,3769],{},[1571,6821,3768],{},[11,6823,3772],{},[11,6825,3775],{},[58,6827,3779],{"id":3778},[11,6829,3782],{},[11,6831,6832],{},[14,6833,3787],{},[11,6835,3790],{},[11,6837,3793],{},[11,6839,3796],{},[69,6841,3800],{"id":3799},[11,6843,3803],{},[1252,6845,6846],{},[11,6847,3808],{},[11,6849,3811],{},[11,6851,3814,6852,1024,6854,3821],{},[1571,6853,3817],{},[1571,6855,3820],{},[11,6857,3824],{},[11,6859,3827,6860,3831],{},[14,6861,3830],{},[22,6863,6864,6868,6872,6876,6880,6884],{},[25,6865,6866,3839],{},[14,6867,3838],{},[25,6869,6870,3845],{},[14,6871,3844],{},[25,6873,6874,3851],{},[14,6875,3850],{},[25,6877,6878,3857],{},[14,6879,3856],{},[25,6881,6882,3863],{},[14,6883,3862],{},[25,6885,6886,3869],{},[14,6887,3868],{},[11,6889,3872,6890,3876],{},[1571,6891,3875],{},[11,6893,3879],{},[11,6895,3882,6896,3886],{},[14,6897,3885],{},[58,6899,3890],{"id":3889},[11,6901,3893,6902,3897],{},[1571,6903,3896],{},[1252,6905,6906],{},[11,6907,3902],{},[11,6909,3905,6910,3911],{},[1380,6911,3910],{"href":3908,"rel":6912},[1440],[11,6914,3914],{},[11,6916,3917,6917,3921,6919,3925,6921],{},[1571,6918,3920],{},[1571,6920,3924],{},[14,6922,3928],{},[11,6924,3931,6925,3935],{},[1571,6926,3934],{},[11,6928,6929,3941,6931,3945],{},[14,6930,3940],{},[14,6932,3944],{},[11,6934,3948],{},[58,6936,3952],{"id":3951},[11,6938,3955],{},[11,6940,3958],{},[11,6942,3961],{},{"title":85,"searchDepth":109,"depth":109,"links":6944},[6945,6948,6951,6952],{"id":3693,"depth":109,"text":3694,"children":6946},[6947],{"id":3732,"depth":125,"text":3733},{"id":3778,"depth":109,"text":3779,"children":6949},[6950],{"id":3799,"depth":125,"text":3800},{"id":3889,"depth":109,"text":3890},{"id":3951,"depth":109,"text":3952},{},{"title":3655,"description":3973},1784837386387]