[{"data":1,"prerenderedAt":725},["ShallowReactive",2],{"blog-post-\u002Fblog\u002Fai-agent-workflow-deepseek-hermes":3,"blog-surround-\u002Fblog\u002Fai-agent-workflow-deepseek-hermes":714},{"id":4,"title":5,"authors":6,"badge":12,"body":14,"date":697,"description":698,"extension":699,"image":700,"meta":701,"navigation":273,"path":709,"seo":710,"stem":712,"__hash__":713},"posts\u002Fblog\u002Fai-agent-workflow-deepseek-hermes.md","Experimenting with Hermes Agent + DeepSeek-V4-Flash-0731 for ASP.NET Core and Nuxt",[7],{"name":8,"to":9,"avatar":10},"Made Y","\u002F",{"src":11},"\u002Fimages\u002Fprofile2.jpg",{"label":13},"AI Agents",{"type":15,"value":16,"toc":683},"minimark",[17,33,50,53,56,61,75,86,92,95,98,102,107,117,121,143,151,155,158,174,178,185,198,206,209,452,455,459,466,469,473,507,559,574,581,584,588,599,657,660,664,670,676,679],[18,19,21,22,28,29],"div",{"style":20},"display:flex;align-items:center;justify-content:center;gap:1.5rem;margin:1.5rem 0 2rem;","\n  ",[23,24],"img",{"src":25,"alt":26,"style":27},"https:\u002F\u002Fres.cloudinary.com\u002Ffpfvgqrg\u002Fimage\u002Fupload\u002Fv1785599903\u002Flogo_w9akfu.png","Hermes Agent","height:4rem;width:auto;max-width:40%;object-fit:contain;","\n  +\n  ",[23,30],{"src":31,"alt":32,"style":27},"https:\u002F\u002Fres.cloudinary.com\u002Ffpfvgqrg\u002Fimage\u002Fupload\u002Fv1785599605\u002FUk1zNOj4_400x400_xbxycj.jpg","DeepSeek",[34,35,36,37,40,41,44,45,49],"p",{},"I've been running ",[38,39,26],"strong",{}," against ",[38,42,43],{},"DeepSeek-V4-Flash-0731"," (API id ",[46,47,48],"code",{},"deepseek-v4-flash",") as a cheap loop for ASP.NET Core and Nuxt work. This is a lab note, not a recommendation to abandon whatever you already use.",[34,51,52],{},"My frontend teammates lean on Next.js and Claude Code. Fair, that stack pays for itself when the hard part is UI reasoning. Most of my days look different: minimal APIs, EF Core migrations, PostgreSQL, Nuxt pages, tests. Volume and consistency more than deep creative architecture. I've bounced between Codex CLI, and Cursor. Hermes + Flash-0731 is the combination I'm stress-testing right now because the agent loop is cheap enough that I don't flinch at long sessions, and when it stalls, I still hop to a stronger model for a turn.",[34,54,55],{},"Flash-0731 is DeepSeek's public-beta Flash checkpoint (re-post-trained for agent work). I'm on it because that's the beta I'm curious about, not because I've crowned a winner.",[57,58,60],"h2",{"id":59},"cost-note-why-im-willing-to-experiment","Cost note (why I'm willing to experiment)",[34,62,63,64,66,67,70,71,74],{},"Per DeepSeek's API pricing as of this write-up, ",[46,65,48],{}," is about ",[38,68,69],{},"$0.14 \u002F $0.28"," per 1M input\u002Foutput tokens (cache hits much lower). In practice my Hermes days land roughly in the ",[38,72,73],{},"pocket-change"," range — far below a Max-style subscription or a heavy Opus API day.",[34,76,77,78,81,82,85],{},"I'm also watching DeepSeek's own agent-harness claims for Flash-0731. On their chart it lands ",[38,79,80],{},"ahead of GLM-5.2"," and ",[38,83,84],{},"close to Claude Opus 4.8"," on several agent-style benches, vendor-reported numbers, not my independent re-run, but enough signal that a cheap Flash tier is worth poking for coding-agent work:",[34,87,88],{},[23,89],{"alt":90,"src":91},"DeepSeek-V4-Flash-0731 benchmark chart vs GLM-5.2, Claude Opus 4.8, and other models (DeepSeek harness)","https:\u002F\u002Fres.cloudinary.com\u002Ffpfvgqrg\u002Fimage\u002Fupload\u002Fv1785599423\u002Fdeepseek-v4-flash-0731-benchmark_fddxju.webp",[34,93,94],{},"I'm not going to spreadsheet Claude vs Flash here. The interesting part for me is: can a cheap agent, taught my stack, do enough mechanical .NET and Nuxt work that the experiment is worth keeping?",[34,96,97],{},"So far: often yes for scaffolding and docs-aware UI. Still fuzzy on gnarly LINQ and auth-sensitive paths.",[57,99,101],{"id":100},"setup-im-running","Setup I'm running",[103,104,106],"h3",{"id":105},"install-hermes","Install Hermes",[34,108,109,110],{},"Official docs: ",[111,112,116],"a",{"href":113,"rel":114},"https:\u002F\u002Fhermes-agent.nousresearch.com\u002Fdocs\u002Fgetting-started\u002Finstallation",[115],"nofollow","Hermes Agent Installation",[103,118,120],{"id":119},"point-it-at-flash-0731","Point it at Flash-0731",[122,123,128],"pre",{"className":124,"code":125,"language":126,"meta":127,"style":127},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark monokai","hermes model\n","bash","",[46,129,130],{"__ignoreMap":127},[131,132,135,139],"span",{"class":133,"line":134},"line",1,[131,136,138],{"class":137},"sR7ES","hermes",[131,140,142],{"class":141},"sLACW"," model\n",[34,144,145,146,150],{},"Select \u002F configure the DeepSeek provider and use model id ",[38,147,148],{},[46,149,48],{}," (serves the V4-Flash-0731 checkpoint on the API).",[57,152,154],{"id":153},"teaching-hermes-the-stack-skills-mcp","Teaching Hermes the stack: skills + MCP",[34,156,157],{},"Out of the box, the model doesn't know my folder layout, Nuxt UI v4 quirks, or how I want commits and PRs written. Two layers fix that:",[159,160,161,168],"ul",{},[162,163,164,167],"li",{},[38,165,166],{},"Skills"," — project conventions (APIs, git\u002FPR style)",[162,169,170,173],{},[38,171,172],{},"MCP"," — live docs and tools (Nuxt\u002FNuxt UI docs, git + GitHub actions)",[103,175,177],{"id":176},"skills-for-net","Skills for .NET",[34,179,180,181,184],{},"Skills are structured ",[46,182,183],{},"SKILL.md"," files (open skill format). Hermes keeps a light index and only pulls full rules when a skill is invoked, which helps with token burn.",[34,186,187,188,193,194,197],{},"I start with ",[111,189,192],{"href":190,"rel":191},"https:\u002F\u002Fgithub.com\u002Fdotnet\u002Fskills",[115],"dotnet\u002Fskills",", then teach project-specific patterns with ",[46,195,196],{},"\u002Flearn",".",[122,199,204],{"className":200,"code":202,"language":203},[201],"language-text","> \u002Flearn the project structure and architectural patterns in .\u002Fsrc\u002Fbackend\u002FMyProject.Api, focus on feature slices and request pipeline\n","text",[46,205,202],{"__ignoreMap":127},[34,207,208],{},"Example of the kind of skill Hermes distills (trimmed):",[122,210,214],{"className":211,"code":212,"language":213,"meta":127,"style":127},"language-markdown shiki shiki-themes material-theme-lighter github-light github-dark monokai","---\nname: aspnetcore-minimal-api\ndescription: Build ASP.NET Core Web APIs with feature-folder modules.\nversion: 0.1.0\nauthor: Hermes\nmetadata:\n  hermes:\n    tags: [AspNetCore, MinimalApi, EfCore, PostgreSQL, ProjectTemplate]\n---\n\n### Feature Module Layout\n\nEach module has three subfolders under a namespace folder:\n\n```\n\u003CModule>\u002F\n  Apis\u002F\u003CFeature>Api.cs\n  Models\u002F\u003CEntity>.cs\n  Services\u002F\u003CFeature>Service.cs\n```\n\n**Minimal API pattern** — static class + extension method on `IEndpointRouteBuilder`:\n\n```csharp\npublic static class SomeFeatureApi\n{\n    public static IEndpointConventionBuilder MapSomeFeatureApi(this IEndpointRouteBuilder endpoints)\n    {\n        var group = endpoints.MapGroup(\"\u002FsomeFeature\").WithTags(\"SomeFeature\");\n\n        group.MapGet(\"\u002F{id}\", GetItem)\n            .WithName(\"GetItem\")\n            .RequireAuthorization(\"SomeFeature.View\");\n\n        return group;\n    }\n\n    private static async Task\u003CResults\u003COk\u003CItemResponse>, NotFound>> GetItem(\n        long id, AppDbContext db) { \u002F* ... *\u002F }\n}\n```\n","markdown",[46,215,216,221,227,233,239,245,251,257,263,268,275,281,286,292,297,303,309,315,321,327,332,337,343,348,354,360,366,372,378,384,389,395,401,407,412,418,424,429,435,441,447],{"__ignoreMap":127},[131,217,218],{"class":133,"line":134},[131,219,220],{},"---\n",[131,222,224],{"class":133,"line":223},2,[131,225,226],{},"name: aspnetcore-minimal-api\n",[131,228,230],{"class":133,"line":229},3,[131,231,232],{},"description: Build ASP.NET Core Web APIs with feature-folder modules.\n",[131,234,236],{"class":133,"line":235},4,[131,237,238],{},"version: 0.1.0\n",[131,240,242],{"class":133,"line":241},5,[131,243,244],{},"author: Hermes\n",[131,246,248],{"class":133,"line":247},6,[131,249,250],{},"metadata:\n",[131,252,254],{"class":133,"line":253},7,[131,255,256],{},"  hermes:\n",[131,258,260],{"class":133,"line":259},8,[131,261,262],{},"    tags: [AspNetCore, MinimalApi, EfCore, PostgreSQL, ProjectTemplate]\n",[131,264,266],{"class":133,"line":265},9,[131,267,220],{},[131,269,271],{"class":133,"line":270},10,[131,272,274],{"emptyLinePlaceholder":273},true,"\n",[131,276,278],{"class":133,"line":277},11,[131,279,280],{},"### Feature Module Layout\n",[131,282,284],{"class":133,"line":283},12,[131,285,274],{"emptyLinePlaceholder":273},[131,287,289],{"class":133,"line":288},13,[131,290,291],{},"Each module has three subfolders under a namespace folder:\n",[131,293,295],{"class":133,"line":294},14,[131,296,274],{"emptyLinePlaceholder":273},[131,298,300],{"class":133,"line":299},15,[131,301,302],{},"```\n",[131,304,306],{"class":133,"line":305},16,[131,307,308],{},"\u003CModule>\u002F\n",[131,310,312],{"class":133,"line":311},17,[131,313,314],{},"  Apis\u002F\u003CFeature>Api.cs\n",[131,316,318],{"class":133,"line":317},18,[131,319,320],{},"  Models\u002F\u003CEntity>.cs\n",[131,322,324],{"class":133,"line":323},19,[131,325,326],{},"  Services\u002F\u003CFeature>Service.cs\n",[131,328,330],{"class":133,"line":329},20,[131,331,302],{},[131,333,335],{"class":133,"line":334},21,[131,336,274],{"emptyLinePlaceholder":273},[131,338,340],{"class":133,"line":339},22,[131,341,342],{},"**Minimal API pattern** — static class + extension method on `IEndpointRouteBuilder`:\n",[131,344,346],{"class":133,"line":345},23,[131,347,274],{"emptyLinePlaceholder":273},[131,349,351],{"class":133,"line":350},24,[131,352,353],{},"```csharp\n",[131,355,357],{"class":133,"line":356},25,[131,358,359],{},"public static class SomeFeatureApi\n",[131,361,363],{"class":133,"line":362},26,[131,364,365],{},"{\n",[131,367,369],{"class":133,"line":368},27,[131,370,371],{},"    public static IEndpointConventionBuilder MapSomeFeatureApi(this IEndpointRouteBuilder endpoints)\n",[131,373,375],{"class":133,"line":374},28,[131,376,377],{},"    {\n",[131,379,381],{"class":133,"line":380},29,[131,382,383],{},"        var group = endpoints.MapGroup(\"\u002FsomeFeature\").WithTags(\"SomeFeature\");\n",[131,385,387],{"class":133,"line":386},30,[131,388,274],{"emptyLinePlaceholder":273},[131,390,392],{"class":133,"line":391},31,[131,393,394],{},"        group.MapGet(\"\u002F{id}\", GetItem)\n",[131,396,398],{"class":133,"line":397},32,[131,399,400],{},"            .WithName(\"GetItem\")\n",[131,402,404],{"class":133,"line":403},33,[131,405,406],{},"            .RequireAuthorization(\"SomeFeature.View\");\n",[131,408,410],{"class":133,"line":409},34,[131,411,274],{"emptyLinePlaceholder":273},[131,413,415],{"class":133,"line":414},35,[131,416,417],{},"        return group;\n",[131,419,421],{"class":133,"line":420},36,[131,422,423],{},"    }\n",[131,425,427],{"class":133,"line":426},37,[131,428,274],{"emptyLinePlaceholder":273},[131,430,432],{"class":133,"line":431},38,[131,433,434],{},"    private static async Task\u003CResults\u003COk\u003CItemResponse>, NotFound>> GetItem(\n",[131,436,438],{"class":133,"line":437},39,[131,439,440],{},"        long id, AppDbContext db) { \u002F* ... *\u002F }\n",[131,442,444],{"class":133,"line":443},40,[131,445,446],{},"}\n",[131,448,450],{"class":133,"line":449},41,[131,451,302],{},[34,453,454],{},"After that, prompts like “add a feature slice for invoices” land closer to the house style instead of generic controller soup.",[103,456,458],{"id":457},"skills-for-git-prs","Skills for git \u002F PRs",[34,460,461,462,465],{},"I want the agent to ship the boring git loop without inventing commit noise. A git skill covers house rules: short why-focused commit messages, ",[46,463,464],{},"Co-authored-by"," lines when Hermes wrote most of the diff, PR title\u002Fbody shape (summary + test plan), no force-push to main, don't commit secrets.",[34,467,468],{},"That way “commit this and open a PR” produces something I'd actually submit, not a wall of AI filler.",[103,470,472],{"id":471},"nuxt-nuxt-ui-mcps-live-docs","Nuxt + Nuxt UI MCPs (live docs)",[34,474,475,476,480,481,484,485,488,489,492,493,496,497,500,501,506],{},"Skills teach ",[477,478,479],"em",{},"my"," conventions. MCP teaches ",[477,482,483],{},"current"," framework docs. Hermes needs ",[46,486,487],{},"--url",", ",[46,490,491],{},"--command",", or ",[46,494,495],{},"--preset"," on ",[46,498,499],{},"mcp add"," (",[111,502,505],{"href":503,"rel":504},"https:\u002F\u002Fhermes-agent.nousresearch.com\u002Fdocs\u002Fguides\u002Fuse-mcp-with-hermes",[115],"docs","). For the hosted Nuxt docs servers:",[122,508,510],{"className":124,"code":509,"language":126,"meta":127,"style":127},"hermes mcp add nuxt --url \"https:\u002F\u002Fnuxt.com\u002Fmcp\"\nhermes mcp add nuxtui --url \"https:\u002F\u002Fui.nuxt.com\u002Fmcp\"\n",[46,511,512,539],{"__ignoreMap":127},[131,513,514,516,519,522,525,529,533,536],{"class":133,"line":134},[131,515,138],{"class":137},[131,517,518],{"class":141}," mcp",[131,520,521],{"class":141}," add",[131,523,524],{"class":141}," nuxt",[131,526,528],{"class":527},"sFhLe"," --url",[131,530,532],{"class":531},"siCPE"," \"",[131,534,535],{"class":141},"https:\u002F\u002Fnuxt.com\u002Fmcp",[131,537,538],{"class":531},"\"\n",[131,540,541,543,545,547,550,552,554,557],{"class":133,"line":223},[131,542,138],{"class":137},[131,544,518],{"class":141},[131,546,521],{"class":141},[131,548,549],{"class":141}," nuxtui",[131,551,528],{"class":527},[131,553,532],{"class":531},[131,555,556],{"class":141},"https:\u002F\u002Fui.nuxt.com\u002Fmcp",[131,558,538],{"class":531},[34,560,561,562,565,566,569,570,573],{},"Then ",[46,563,564],{},"hermes mcp test nuxt"," \u002F ",[46,567,568],{},"hermes mcp test nuxtui"," (or ",[46,571,572],{},"\u002Freload-mcp"," in a session).",[34,575,576,577,580],{},"With those connected, asking “how do I use ",[46,578,579],{},"UBadge"," with an icon in Nuxt UI v4?” can pull real component metadata instead of a confident wrong API. Same for Nuxt routing, content, and module docs.",[34,582,583],{},"Day-to-day difference I've noticed: without MCP, Flash will happily invent prop names. With MCP, the UI glue is boring in a good way, which is what I want from a cheap agent.",[103,585,587],{"id":586},"git-github-mcps-stage-commit-push-pr","Git + GitHub MCPs (stage → commit → push → PR)",[34,589,590,591,594,595,598],{},"Docs MCP is only half the loop. I also connect git and GitHub MCPs so Hermes can actually move the work. Local git via ",[46,592,593],{},"uvx",", GitHub via the official stdio server (set ",[46,596,597],{},"GITHUB_PERSONAL_ACCESS_TOKEN"," in the server env \u002F Hermes config):",[122,600,602],{"className":124,"code":601,"language":126,"meta":127,"style":127},"hermes mcp add git --command uvx --args mcp-server-git --repository \u002Fabsolute\u002Fpath\u002Fto\u002Frepo\nhermes mcp add github --command npx --args -y @modelcontextprotocol\u002Fserver-github\n",[46,603,604,633],{"__ignoreMap":127},[131,605,606,608,610,612,615,618,621,624,627,630],{"class":133,"line":134},[131,607,138],{"class":137},[131,609,518],{"class":141},[131,611,521],{"class":141},[131,613,614],{"class":141}," git",[131,616,617],{"class":527}," --command",[131,619,620],{"class":141}," uvx",[131,622,623],{"class":527}," --args",[131,625,626],{"class":141}," mcp-server-git",[131,628,629],{"class":527}," --repository",[131,631,632],{"class":141}," \u002Fabsolute\u002Fpath\u002Fto\u002Frepo\n",[131,634,635,637,639,641,644,646,649,651,654],{"class":133,"line":223},[131,636,138],{"class":137},[131,638,518],{"class":141},[131,640,521],{"class":141},[131,642,643],{"class":141}," github",[131,645,617],{"class":527},[131,647,648],{"class":141}," npx",[131,650,623],{"class":527},[131,652,653],{"class":527}," -y",[131,655,656],{"class":141}," @modelcontextprotocol\u002Fserver-github\n",[34,658,659],{},"With those plus the git skill, a typical close-out looks like: stage the right files → commit with a sane message (and co-author trailer when appropriate) → push the branch → open a PR with a usable description. I'm still babysitting auth and anything destructive, but the mechanical GitHub dance is what I'm trying to automate.",[57,661,663],{"id":662},"whats-next-in-the-experiment","What's next in the experiment",[34,665,666,667,669],{},"Working well enough to keep: Hermes + ",[46,668,48],{},", dotnet + Nuxt + git skills, Nuxt\u002FNuxt UI MCP for component truth, git\u002FGitHub MCP for the commit→PR path.",[34,671,672,673,675],{},"Still fuzzy: how far I can push Flash-0731 before I should route hard turns automatically; how much skill surface area is worth maintaining by hand vs regenerating with ",[46,674,196],{},"; how much of the GitHub loop I trust without a human glance.",[34,677,678],{},"If the beta shifts or Pro's official drop lands, I'll note what changes. For now this is the setup on my machine, cheap, opinionated, and unfinished on purpose.",[680,681,682],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html pre.shiki code .sR7ES, html code.shiki .sR7ES{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .sLACW, html code.shiki .sLACW{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .sFhLe, html code.shiki .sFhLe{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .siCPE, html code.shiki .siCPE{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}",{"title":127,"searchDepth":223,"depth":229,"links":684},[685,686,690,696],{"id":59,"depth":223,"text":60},{"id":100,"depth":223,"text":101,"children":687},[688,689],{"id":105,"depth":229,"text":106},{"id":119,"depth":229,"text":120},{"id":153,"depth":223,"text":154,"children":691},[692,693,694,695],{"id":176,"depth":229,"text":177},{"id":457,"depth":229,"text":458},{"id":471,"depth":229,"text":472},{"id":586,"depth":229,"text":587},{"id":662,"depth":223,"text":663},"2026-08-01","Lab notes on running Hermes Agent with DeepSeek-V4-Flash-0731 beta — teaching .NET and Nuxt via skills, wiring Nuxt and Nuxt UI MCPs, and what still feels rough.","md",{"src":25},{"sitemap":702,"schemaOrg":703},{"lastmod":697},[704],{"type":705,"headline":5,"author":706,"datePublished":697},"BlogPosting",{"type":707,"name":708},"Person","Made Yoga","\u002Fblog\u002Fai-agent-workflow-deepseek-hermes",{"keywords":711,"title":5,"description":698},"Hermes agent, DeepSeek-V4-Flash-0731, deepseek-v4-flash, AI coding agent, .NET, Nuxt, Nuxt UI, MCP server, skills","blog\u002Fai-agent-workflow-deepseek-hermes","cc1BLgxIRVOpF9YKXricQvW-q2eNRfuK9mAUfxkJmGo",[715,720],{"title":716,"path":717,"stem":718,"description":719,"children":-1},"What 5 Years with Django Taught Me: Pros and Cons","\u002Fblog\u002F5-years-of-django-pros-and-cons","blog\u002F5-years-of-django-pros-and-cons","After half a decade of building apps with Django, here’s my honest take on its strengths, weaknesses, and the lessons I’ve learned along the way.",{"title":721,"path":722,"stem":723,"description":724,"children":-1},"AuthEndpoints 3.0 RC: a composable auth endpoints library for ASP.NET Core","\u002Fblog\u002Fauthendpoints-3-0-rc","blog\u002Fauthendpoints-3-0-rc","Announcing AuthEndpoints 3.0 RC, an auth library for ASP.NET Core. Composable auth endpoints on top of ASP.NET Core Identity: registration, login, 2FA, password reset, and passkeys bootstrapped in minutes.",1785600513179]