AgentSwarm
- 10 Devlogs
- 83 Total hours
AgentSwarm (TUI)
AgentSwarm (TUI)
#Devlog 9
I continued working on rebuilding my project
I successfully recreated a creator agent and implimented the slides and website generation. Although it is basic, it is a WIP and is a strong foundation.
After the reset, I had to rebuild the TUI, and I decided to just make it look as similar as possible to its original version.
hey guys.
seventh devlog. devlog six gave the swarm a memory - metrics, cache stats, handoff index, overdue tasks.
tui/runner.py parses agent markers now with parse_agent_marker, soprogress is real instead of spinner theater. short_status_line rendersprogress like 2 of 6 with percent plus writer in the footer, and acancel sentinel lets Ctrl+C set a flag file the worker checks insteadof killing mid-write. no more half decks on cancel.
app.py appends every job to job history json (last fifty kept),so refresh does not wipe your day. zip_outputs bundles pptx, docx,html, xlsx, pdf, and md into one download, and safe_filenamesanitizes anything weird before it hits the header. small endpoints,big usability win.
agents/pipeline_guards.py added three focused gates. readabilityfails on filler density and paragraph-bullets, heading structurerequires at least three real sections, evidence coverage requires atleast two distinct http sources. they run cheap, explain themselvesin one line, and catch the exact slop the critic used to wavethrough.
agents/creator_quality.py grew humanize_text_v2 - in order becomes to, due to the fact that becomes because, unlock the power of becomes use. score_section_visual picks timeline, comparison,stats, bento, or text from actual cues instead of forcing one layout. tighten_bullets clips at word boundaries with an ellipsis so slides never overflow their boxes.
agents/orchestrator.py quarantines suspect artefacts underquarantine folder instead of clobbering good output, exposesprogress_snapshot for both TUI and web UI, and should_resumedetects a checkpoint worth resuming. run_with_progress wraps nodeexecution with an optional callback so both frontends share oneprogress shape.
tests/test_swarm_hardening.py covers the whole pass: cost math,empty summaries, filler rejection, heading minimums, url counting,cache stats, missing-handoff detection, marker parsing, and the humanizer scrub. nine tests, all deterministic, no network, no LLM.run them with pytest tests/test_swarm_hardening.py -v.
open a fresh deck, site, doc, sheet, and pdf from the same draft -they share a brand, titles are short, bullets fit, images match the subject, motion is subtle, filler is gone. open the session folder -plan, research, analysis, draft, critique, creator, plus index.json.open the metrics - elapsed, hit rate, guard wins. the swarm finally feels like a tool you can run all day and trust.
This is a website it created for a business
Devlog #6
I improved this project by a little bit
Slideshows now have backgrounds, images, graphics, fonts, designs, and nicer templates
Websites now have animations, images, sections, and are customized and tailored to the research task!
Docs now have colors to organize thoughts and sections, and as well as images and visuals every so often
What’s next?
Drastic imrpovement, and new output type soon 
hola
fifth devlog. the last two got the decks real structure and stopped a bunch of problems with like backgrounds and other stuff.
so this one is all about the creator. planner, researcher, writer can do their jobs fine. However, if the creator fumbles the last mile, nobody cares how good the draft was.
agents/creator.py was the biggest culprit. _clean_content_for_slides was stripping file paths and a handful of phrases, but “delve”, “tapestry”, “game-changer”, “seamless”, “robust”, all that stuff was sailing straight onto slides.it strips all of that now. expanded filler list, whitespace collapse, drops those **** divider lines that used to become phantom slides, truncates sanely instead of cutting mid-word.also added three little helpers i wish i’d had earlier. _premium_truncate cuts at a word boundary and adds the ellipsis, _humanize_heading cleans the [layout:...] tags and keeps titles under 60 chars with proper casing, _score_section_visual actually looks at the section — timeline words + 3 bullets = timeline, versus/comparison + 4 bullets = comparison, stats + numbers = stat grid, 5+ bullets = bento. no more forcing every section into the same text wall
this one bugged me for a while. agents/pptx_builder.py had _add_shape_animation and it was literally a no-op. just return. so we’d promise motion and ship static decks. now it wires real entrance animations into the timing tree. The animations are appear, fade, fly, grow, wipe, with delay support. it’s still subtle, staggered, not the 2007 bounce-everything-in kind. charts ease in, bullets cascade, hero elements land in order. open it in PowerPoint and it actually feels presented, not pasted.
agents/critic.py would pass stuff with “showcasing” and “unlock” all over it as long as the structure was right. added _critic_visual_score, which checks min 4 sections for rhythm, flags filler hits, flags bullets over 110 chars, needs 82+ to pass. it’s caught three decks this week i would’ve shipped before.agents/polisher.py got the same strictness on the html side — enforces hierarchy, fixes those 10px body styles that slipped through, strips leftover ai-generated / placeholder / lorem classes.agents/visual_builder.py got cinematic helpers, so it has proper 21:9 captions, glass CSS token, bento span logic so the first cell gets the weight.
opened five fresh outputs side by side yesterday — deck, site, doc, sheet, pdf from the same draft. for the first time they felt like the same brand. titles are short, bullets fit, images match the subject, motion is there but doesn’t shout, and i didn’t spot a single “delve” or “tapestry”.
Devlog 4
Drastically improved the slideshow generator and website generator
The agent didn’t have the capabilities to do a background, so it was always white. Also, it was stickign to very basic styles and templates. I made them so much better (still a WIP)
Only the last 3 hours were actually spent doing real work, so I lowk am cooked.
Here’s some fried rice and smoothie I made! The tanghulu was a failure but at least it tasted good :P
hey guys. Third devlog. Devlog two shipped fifty-two templates and an art director,and the html pages finally looked somewhat decent. However, they still sucked. The slides on the first iteration had almost no images, no background, nothing. It sucked until I asked it a bunch of times to revise it.
before writing a line of new render code i unzipped both decks and diffed the xml. Agentswarm: 15 identical stat slides, 1 picture total. the reference:13 slides, 12 large images, and a real story arc - full-bleed cover,overview dashboard, content slides with big image panels and labeled morning/afternoon/evening blocks, an insider-tip callout, a section divider. the gap wasn’t the fonts; it was structure and imagery. and since our renderer preferred keyless stock chains and fell back to random picsumgarbage when they failed, “the images are buns” was literally true.i also found the deck was leaking its own internals onto the slides:template names, character counts, a signature footer. nothing says”designed by an ai who gave up” like “generated with template vogue”.
scripts/pptx_template_renderer.py got rewritten around one rule: atemplate is guidance, not law. it still picks a palette, typeface pairing,and hero flavor from the spec, but every layout is chosen from the actualcontent. the archetypes are the workhorses now:- full-bleed cover with scrim, eyebrow kicker, giant title, meta strip- agenda slide with real numbered sections and content-derived stat cards- feature slides: big image panel, up to three labeled blocks (the context / the detail / the takeaway), a key-takeaway callout- timeline, comparison, quote, and gallery variants for sections that call for them - capped so a deck never spams the same layout- section divider, sources, and a closing slideevery slide gets header chrome with a section badge and page numbers,plus speaker notes. the image pipeline now tries the ai generator firstwith per-section prompts (verified live - one image every ten seconds),then the stock chain, then a styled gradient. the red badge and randompicsum are gone.
still deterministic, still no llm in the loop, still pyright clean. the bronze ox is gone because the pipeline finally knows the difference between a farm animal and a model name.
still ahead: teaching the website renderer to generate its own images when the cache is cold, and pushing the same director thinking down into the pdf path.
This is a one-shot result - it kind of sucks
hey guys.
second devlog. the first was about keeping the pipeline alive underpressure; this one is about making it actually good. the goal was to stop thecreator from reaching for the same handful of preset looks, and to make theresearcher think before it searches. along the way a few hundred errors inthe problems panel just magically fricking appeared and took me way too long to fricking solve.
The previous set of templates that the creator agent was given were complete dodo, like worse than the gta 6 leaks by cyberpunk and thick of it. the old template system was a few hardcoded themes and a color swap. Now, there are fifty-two distinct templates across eight categories - editorial, corporate, tech, creative, minimal, data,storytelling, luxury.
Each one is a complete design dna, not a recolored clone: its own palette, typography pairing, grid, signature element(oversized type, noise grain, gradient orbs, marble texture…), and section composition rules. both the html and pptx renderers consume the same specs,so a website and its matching deck look like siblings.
Templates alone just give you more wallpaper, so the creator got an art director (agents/art_director.py). it maps the task and industry to a visual direction - palette mood, typography voice, imagery style, layout personality - across ten moods from editorial to brutalist to nightlife. a coffee shop brief lands on faded-sun vintage with grainy texture; a saas pitch gets cool slate and a bento grid. no llm, always available, and its direction folds into template selection so outputs stop looking like one fixed style.
the pptx renderer’s primary path is now the spec-driven template renderer:one dominant focal point per slide - image plus caption, stat, quote,timeline, or comparison - short visible text, and human speaker notes onevery slide. something visual every slide, balanced against the words.
markdown now runs through deterministic passes in agents/creator_quality.pybefore the creator touches it. humanize_text scrubs the telltale ai-isms(moreover, leverage, delve, seamless…) so the voice reads human.narrative_arc_md makes sure sources land at the end instead of opening thepiece. annotate_visual_hints finds sections that would render as unbrokenprose and injects a takeaway bullet from the section’s own first goodsentence. and the new quality_gate self-reports coverage issues onproduced outputs.
research used to be: search, scrape, write whatever came back. nowagents/research_plan.py turns the task plus the planner handoff into subtopics, key questions, and evidence targets that anchor every search round - targeted instead of spray-and-pray, with deterministic fallbacks so fast mode still works with zero llm calls. and agents/evidence.py extracts atomic claims from scraped sources, then verifies them across sources:corroborated, contradicted, or unsupported. the synthesis prompt now refuses to present a number as fact unless the evidence view backs it, and the researcher wires its handoff text back into the prompts it actually sends -which was fetch-and-forget before.
This is a slideshow it made after a lot of tweaking (like 20+ prompts); I want it to be able to do such a thing in 1 prompt so still a lot of work to be done.
hey guys.
I built a simple foundation for the project with a nice TUI and simple functoinality (base version for each agent).
The researcher agent so far has a base firecrawl api, simple web search, and does nothing else so far
The analyst agent’s only job is to analyze and summarize all key info found by the researcher
The writer agent’s job is to write prompts for the creator agent including all relevant information from the research
The creator’s only job is to create slideshows and other outputs based on given info
The critic’s only job is to criticize the output quality of the creator agent
I’m making a swarm of ai agents to help with research - but fully free, open source, and byo. That way, you aren’t locked to one ecosystem. Im just starting out. This is my current pipeline