Todd Sundsted
Todd Sundsted
toddsundsted@epiktistes.com
Better dead than bored.
Introductionepiktistes.com/introduction
GitHubgithub.com/toddsundsted/ktistec
Pronounshe/him
🌎Sector 001
Todd Sundsted

The DragonCon schedule is live!

As always, I'll be focusing on the Space, Science, Electronic Frontier Foundation (EFF), Robotics and Maker tracks, plus the live performances. On the music front, Charming Disaster is performing at 8:30pm on Sunday (and 4pm on Saturday)—their show was wonderful last year. And, of course, on Monday there is Robot Battles, one of the longest running robotic battle competitions in the world!

As usual, there's just too much to do...

#dragoncon

Todd Sundsted

the 113,520 lines of code across 332 files in the ktistec codebase is teaching me the importance of distinctive class/method/function/variable names

#ktistec #crystallang

Todd Sundsted

@SeattleWorldcon2025 thank you for keeping the information flowing about Seattle WorldCon this last year! and please pass along my "thank you!" to all of the organizers and volunteers you happen to see around!

Todd Sundsted
Release v3.0.0 of Ktistec

I've been running v3.0.0 of Ktistec in production for the last few weeks, and it seems stable and I’m using it every day, so it’s time to release it!

This release adds:

  • Model Context Protocol (MCP) support. Ktistec can act as an MCP Server.
  • OAuth2 authentication support. Ktistec can act as both an OAuth2 authentication server and a resource server.

Model Context Protocol (MCP) is a simple, general API that exposes Ktistec ActivityPub collections (timeline, notifications, likes, announces, etc.) to MCP clients. To be fully transparent about what this means, MCP clients are shells for Large Language Models (LLMs).

When building this, I focused on a few use cases that are important to me: content summarization, content prioritization (or filtering) based on my interests or the content's structure (well-constructed arguments vs. low-signal opinions) or its tone, especially when it comes to shared posts. Ktistec is a single user ActivityPub server and Epiktistes (my instance) gets a lot of traffic. I want to build the “algorithms” that surface the content I want to see.

Of note, there’s currently no support for content generation.

While I work on this, I’m not abandoning the 2.x line. I’ll continue to add compatible features and fix bugs as long as I'm able. I realize the use of LLMs, and MCP by extension, and therefore the 3.x branch, is controversial—I don’t intend to push v3 on anyone.

If you're still with me, Ktistec now exposes:

  • MCP Resources
    • ActivityPub actors (ktistec://actors/{id*})
    • ActivityPub objects (ktistec://objects/{id*})
    • registered users (ktistec://users/{id})
    • server information (ktistec://information)
  • Tools
    • count_collection_since(name, since)
    • paginate_collection(name, page, size)
    • read_resources(uris)
  • Prompts
    • whats_new

Supported collections include:

  • timeline, notifications, posts, drafts, likes, announces, followers, following
  • collections of hashtags of the form hashtag#<name> (e.g., "hashtag#technology")
  • collections of mentions of the form mention@<name> (e.g., "mention@euripides")

There is more detail in the README.

TL;DR Add a remote MCP connector in your MCP client of choice: supply the URL of your instance including the /mcp path (e.g. "https://epiktistes.com/mcp").

Screenshot of the MCP Inspector connected to Epiktistes


#ktistec #fediverse #activitypub #crystallang #mcp #llm

Todd Sundsted

fediverse follow-up to a #worldcon question i want to continue to explore...

in this world of very inexpensive, llm-driven content generation, trusted curation is going to matter a lot! who/what are the editors, writers, zines, sites, etc. you recommend that curate the SF/F you like to read? (i like to flex my reading muscles, so i'm ideally looking for written content over podcasts, etc.)

Todd Sundsted
a beautiful veggi-scape at Pike Place Market in Seattle

it still has the magic...!

#seattle #pikeplacemarket

Todd Sundsted
the panelists for Interactive Fiction: Video Game Storytellers

There’s more space under the umbrella of interactive fiction than I knew, coming from the Zork corner of that universe.

I’ve been a fan of the puzzle-style games as long as I can remember. I always keep a bunch of Andrew Plotkin’s games (and other authors) in Frotz on my phone for spare moments.

The panelists’ advice for getting started was simple: try writing a choose your own adventure game in Twine. Just give it a try!

They highlighted an excellent example of modern interactive fiction: The Writer Will Do Something.

No one mentioned MUDs, MOOs, and other multiplayer text-based games. Maybe those games are not literate enough? 🤔

Justin Bortnick, Tina Connolly, Langley Hyde, Andrew Plotkin, Stephen Grande

#worldcon #interactivefiction

Todd Sundsted
Release v2.4.9 of Ktistec

Release v2.4.9 of Ktistec fixes two significant bugs. From the changelog:

  • Don't reset next_attempt_at in tasks when server restarts.
  • Fix incorrect syntax for inline tags in Slang templates.

The first bug resulted in server maintenance tasks running immediately, every time the server restarted, and then beginning their cadence of scheduled runs from there. The second bug surfaced after I released a new version of Slang that itself included a bug fix.

#ktistec #fediverse #activitypub #crystallang

Todd Sundsted
the Navigating AI as an Author or Editor panelists at WorldCon

Several very different points of view on the panel. Let’s hope this stays civil.

Neil Clarke, Dr. Corey Frazier, Jason Sanford, Emily M. Bender, Cassie Alexander

#worldcon #writing #ai

Todd SundstedCrystalLanguage

Crystal does not yet have proper SIMD support, but this article shows how you can already use SIMD instructions with inline assembly:
dev.to/kojix2/writing-simd-in-