{"id":21695,"date":"2026-08-15T19:30:51","date_gmt":"2026-08-15T17:30:51","guid":{"rendered":"https:\/\/www.juust.org\/?p=21695"},"modified":"2026-08-15T20:16:25","modified_gmt":"2026-08-15T18:16:25","slug":"typescript-agents-from-zero-to-hero-in-six-repos","status":"publish","type":"post","link":"https:\/\/www.juust.org\/index.php\/typescript-agents-from-zero-to-hero-in-six-repos\/2026\/08\/","title":{"rendered":"TypeScript Agents: from Zero to Hero in 6 repo&#8217;s"},"content":{"rendered":"\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>Table of Contents<\/h2><nav><ul><li><a href=\"#the-arc\">The arc<\/a><ul><li><a href=\"#1-single-agent\">1. Single Agent<\/a><\/li><li><a href=\"#2-multiple-agents-with-handoff\">2. Multiple Agents with Handoff<\/a><\/li><li><a href=\"#3-orchestrator\">3. Orchestrator<\/a><\/li><li><a href=\"#4-lang-graph-orchestrator\">4. LangGraph Orchestrator<\/a><\/li><li><a href=\"#5-learning-agent-with-database\">5. Learning Agent with Database<\/a><\/li><li><a href=\"#6-contextual-bandit\">6. Contextual Bandit<\/a><\/li><\/ul><\/li><li><a href=\"#why-this-matters\">Why this matters<\/a><\/li><li><a href=\"#where-to-start\">Where to start<\/a><\/li><\/ul><\/nav><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Want to go superspeed from TypeScript Agent Zero to Agent Hero ? <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This won&#8217;t make you a veteran developer, but it will show you what agents are basically about. I spent the last year coding agents and this is roughly the path I myself took. I missed that, last year. A short walkthrough, so you have an idea what agents are all about. This takes you in six repo&#8217;s from the simplest single agent, the chatbot, to an agent that learns and optimizes itself according to what the user wants (price\/quality\/speed).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What do you need ? Of course: Node.js (18+). <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For the first four examples:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>OpenAI API key<\/li>\n\n\n\n<li>Jina (free tier)<\/li>\n\n\n\n<li>DataForSEO (free $1 trial budget)<\/li>\n\n\n\n<li>A WordPress blog (use <a href=\"https:\/\/localwp.com\/\" target=\"_blank\" rel=\"noopener\">Local<\/a> if you don&#8217;t have a WordPress site)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">For the last two, the learning systems:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Postgresql<\/li>\n<\/ul>\n\n\n\n<h2 id=\"the-arc\" class=\"wp-block-heading\">The arc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The first three repos are basic TypeScript \u2014 no LangChain, no LangGraph, no Zod, no framework at all. Just <code>fetch<\/code>, async\/await, and plain objects. If you can write a function, you can write these. They exist to show the <em>ideas<\/em> without the scaffolding. We start with a single agent, then multiple agents with a handoff, and a first orchestra. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">By then we have a working SEO Article Blogger TypeScript Agent. We can give it a title, it will search Google and scrape pages, it will write an article based on these pages and publish it to WordPress. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Repo four wraps the same Agent in a LangGraph state graph. Same agents, same flow, but now it will also run on a platform like LangSmith that handles persistence, concurrency, and monitoring for you. This is your production on-ramp. LangGraph is a standard in Agent development, with a number of relative easy deployment options through <a href=\"https:\/\/smith.langchain.com\/\" target=\"_blank\" rel=\"noopener\">LangSmith<\/a> and <a href=\"https:\/\/www.crewship.dev\/langgraph\" target=\"_blank\" rel=\"noopener\">Crewship<\/a> for instance, or Cloudflare workers (as edge functions). Now we are writing &#8216;industry standard code&#8217;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Repos five and six add the layer that makes an agent system <em>seriously smart<\/em>: : a database version that records every run, every cost, every mistake and uses stats for decisions. Repo five  uses heuristics.  Repo six is the contextual bandit, a more advanced version of a learning algorithm, that matches demand and supply better. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once you have digested these six you can already start building a lot of business agents for your boss. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The bandit is a bit advanced, don&#8217;t worry if you don&#8217;t immediately see how it works. It was conceived in 2005 and applied by Yahoo in 2007 for the first time and increased their CTR x10. I used a similar algo in 1998 myself and sped up database matching x30. It is highly efficient. It may be a step too far, at once, that&#8217;s why I added step 5 in between, it&#8217;s easier to comprehend. <\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/afbeelding.png\"><img fetchpriority=\"high\" decoding=\"async\" width=\"815\" height=\"601\" src=\"https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/afbeelding.png\" alt=\"typescript ai agent\" class=\"wp-image-21671\" srcset=\"https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/afbeelding.png 815w, https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/afbeelding-300x221.png 300w, https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/afbeelding-768x566.png 768w\" sizes=\"(max-width: 815px) 100vw, 815px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<h3 id=\"1-single-agent\" class=\"wp-block-heading\">1. <a href=\"https:\/\/www.juust.org\/index.php\/your-own-ai-agent-in-typescript\/2026\/08\/\">Single Agent<\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">One file, one class, one prompt. The MiniAgent is 30 lines of TypeScript that calls an OpenAI-compatible API and returns JSON. That&#8217;s it. No dependencies beyond Node.js 18. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Just the basics of the TypeScript Agent. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Repo: <a href=\"https:\/\/github.com\/juustesout\/typescript-ai-agent-example\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/juustesout\/typescript-ai-agent-example<\/a><\/p>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/seo-blogger.png\"><img decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/seo-blogger.png\" alt=\"seo blogger ai agent in typescript\" class=\"wp-image-21678\" srcset=\"https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/seo-blogger.png 1024w, https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/seo-blogger-300x300.png 300w, https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/seo-blogger-150x150.png 150w, https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/seo-blogger-768x768.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<h3 id=\"2-multiple-agents-with-handoff\" class=\"wp-block-heading\">2. <a href=\"https:\/\/www.juust.org\/index.php\/seo-blogger-agent-in-in-typescript-the-handoff\/2026\/08\/\">Multiple Agents with Handoff<\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Two agents that pass the baton. The researcher fetches SERP data and scrapes sources, then hands the raw material to the writer. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No orchestrator, no graph, no event bus. Just one agent awaiting another, like a relay race. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Multi-agent doesn&#8217;t have to mean it&#8217;s more complicated :) <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Repo: <a href=\"https:\/\/github.com\/juustesout\/typescript-agent-with-handoff-seo-blogger\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/juustesout\/typescript-agent-with-handoff-seo-blogger<\/a><\/p>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/orchestrator.jpg\"><img decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/orchestrator.jpg\" alt=\"orchestrator ai agent pattern\" class=\"wp-image-21700\" srcset=\"https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/orchestrator.jpg 1024w, https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/orchestrator-300x300.jpg 300w, https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/orchestrator-150x150.jpg 150w, https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/orchestrator-768x768.jpg 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<h3 id=\"3-orchestrator\" class=\"wp-block-heading\">3. <a href=\"https:\/\/www.juust.org\/index.php\/orchestrated-workflow-in-typescript\/2026\/08\/\">Orchestrator<\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Now we&#8217;re cooking. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8220;Team!!! Team!!! Team!!!&#8221; <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">An orchestrator agent plans the work, delegates to workers, and knits their outputs together. The orchestrator decides which agents to call and in what order. This is the moment your system stops being a script and starts being an worker. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Repo: <a href=\"https:\/\/github.com\/juustesout\/typescript-agent-orchestrate-workflow\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/juustesout\/typescript-agent-orchestrate-workflow<\/a><\/p>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/four-knights.png\"><img loading=\"lazy\" decoding=\"async\" width=\"664\" height=\"663\" src=\"https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/four-knights.png\" alt=\"\" class=\"wp-image-21686\" srcset=\"https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/four-knights.png 664w, https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/four-knights-300x300.png 300w, https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/four-knights-150x150.png 150w\" sizes=\"(max-width: 664px) 100vw, 664px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<h3 id=\"4-lang-graph-orchestrator\" class=\"wp-block-heading\">4. <a href=\"https:\/\/www.juust.org\/index.php\/langgraph-workflow-in-typescript\/2026\/08\/\">LangGraph Orchestrator<\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Same agents, same flow, but now modelled as a state graph with explicit nodes and conditional edges. The graph makes the workflow portable: you can run it locally, or deploy it to LangSmith or Cloudlfare.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Repo: <a href=\"https:\/\/github.com\/juustesout\/typescript-agent-example-langgraph\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/juustesout\/typescript-agent-example-langgraph<\/a><\/p>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/thumb.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/thumb.jpg\" alt=\"rule of thumb ai\" class=\"wp-image-21691\" srcset=\"https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/thumb.jpg 512w, https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/thumb-300x300.jpg 300w, https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/thumb-150x150.jpg 150w\" sizes=\"(max-width: 512px) 100vw, 512px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<h3 id=\"5-learning-agent-with-database\" class=\"wp-block-heading\">5. <a href=\"https:\/\/www.juust.org\/index.php\/data-based-learning-ts-agent-in-langgraph\/2026\/08\/\">Learning Agent with Database<\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Hre&#8217;s where it gets real. Memory. Every LLM call, every DataForSEO request, every cent spent is logged to PostgreSQL. After each run, an adaptive heuristic adjusts the next run&#8217;s parameters: deeper research if quality was high, fewer scrapes if costs ran away, more review passes if the draft got rejected. The system doesn&#8217;t just run \u2014 it <em>watches itself run<\/em> and gets better. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Repo: <a href=\"https:\/\/github.com\/juustesout\/typescript-learning-ai-agent\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/juustesout\/typescript-learning-ai-agent<\/a><\/p>\n<\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/contextual.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"819\" src=\"https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/contextual-1024x819.png\" alt=\"contextual bandit agent\" class=\"wp-image-21634\" srcset=\"https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/contextual-1024x819.png 1024w, https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/contextual-300x240.png 300w, https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/contextual-768x615.png 768w, https:\/\/www.juust.org\/wp-content\/uploads\/2026\/08\/contextual.png 1402w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<h3 id=\"6-contextual-bandit\" class=\"wp-block-heading\">6. <a href=\"https:\/\/www.juust.org\/index.php\/building-a-contextual-bandit-ai-agent-in-typescript\/2026\/08\/\" target=\"_blank\" rel=\"noreferrer noopener\">Contextual Bandit<\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This is the endgame. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The rule-based heuristic from step 5 is replaced by a learned routing algorithm. The bandit models the workflow as a graph and chooses the optimal next node at every decision point, using historical edge statistics stored in PostgreSQL. <a href=\"https:\/\/www.geeksforgeeks.org\/machine-learning\/epsilon-greedy-algorithm-in-reinforcement-learning\/\" target=\"_blank\" rel=\"noreferrer noopener\">Epsilon-greedy<\/a>, <a href=\"https:\/\/learn.microsoft.com\/en-us\/archive\/msdn-magazine\/2019\/august\/test-run-the-ucb1-algorithm-for-multi-armed-bandit-problems\" target=\"_blank\" rel=\"noreferrer noopener\">UCB1<\/a>, cold-start exploration, objective-relative utility weights \u2014 it&#8217;s a real learning system that adapts to your business goals.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> Budget, speed, quality, balanced: pick one profile, and the bandit learns the optimal path that delivers it, just the way you want it. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Repo: <a href=\"https:\/\/github.com\/juustesout\/contextual-bandit-ai-agent-typescript\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/juustesout\/contextual-bandit-ai-agent-typescript<\/a><\/p>\n<\/div>\n<\/div>\n\n\n\n<h2 id=\"why-this-matters\" class=\"wp-block-heading\">Why this matters<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Almost every developer that ends up building an AI TypeScript Agent follows this arc. You start with a single prompt and it feels like magic. Then you realise one prompt can&#8217;t do everything, so you split responsibilities. Then you need an orchestrator because the handoff logic gets tangled. Then you need a graph framework because you want persistence and monitoring. Then you need a database because you&#8217;re flying blind without data. Then you need a learning algorithm because you&#8217;re tired of tuning parameters by hand.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Each step is a real problem that real developers hit. And each repo in this progression is a working solution you can clone, run, and adapt. They&#8217;re not toy examples \u2014 they&#8217;re the code I use to produce articles on my news blogs.  <\/p>\n\n\n\n<h2 id=\"where-to-start\" class=\"wp-block-heading\">Where to start<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If you&#8217;re new to Agents: start at repo 1, the basic TypeScript Agent, and work up. Each repo adds one new major concept. Clone it, run it, break it, delete it, clone it again, fix it. By the time you reach repo 6 you&#8217;ll understand more about production AI agents than most people talking about them on Youtube.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you already have agents in production: jump to repo 5. The metrics layer will show you what your system is actually costing and how it&#8217;s performing \u2014 data you may not have today. Repo 6 is the ideal next step once you have enough history to learn from.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">All code is MIT-licensed. Go clone it.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","protected":false},"excerpt":{"rendered":"<p>From TypeScript Agent Zero to TypeScript Agent Hero in six repo&#8217;s <\/p>\n","protected":false},"author":5796,"featured_media":21696,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_sitemap_exclude":false,"_sitemap_priority":"","_sitemap_frequency":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[543,484,479,4,305,26],"tags":[483,95],"class_list":["post-21695","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-agents","category-ai","category-javascript","category-juust","category-programming","category-trends","tag-ai","tag-juust"],"_links":{"self":[{"href":"https:\/\/www.juust.org\/index.php\/wp-json\/wp\/v2\/posts\/21695","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.juust.org\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.juust.org\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.juust.org\/index.php\/wp-json\/wp\/v2\/users\/5796"}],"replies":[{"embeddable":true,"href":"https:\/\/www.juust.org\/index.php\/wp-json\/wp\/v2\/comments?post=21695"}],"version-history":[{"count":3,"href":"https:\/\/www.juust.org\/index.php\/wp-json\/wp\/v2\/posts\/21695\/revisions"}],"predecessor-version":[{"id":21702,"href":"https:\/\/www.juust.org\/index.php\/wp-json\/wp\/v2\/posts\/21695\/revisions\/21702"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.juust.org\/index.php\/wp-json\/wp\/v2\/media\/21696"}],"wp:attachment":[{"href":"https:\/\/www.juust.org\/index.php\/wp-json\/wp\/v2\/media?parent=21695"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.juust.org\/index.php\/wp-json\/wp\/v2\/categories?post=21695"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.juust.org\/index.php\/wp-json\/wp\/v2\/tags?post=21695"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}