| TL;DR: Siftler Python CLI v0.1 is now available. It runs the same collaborative filtering algorithm as Siftler AI Prompt v0.1, but locally on your computer as a Python script. It is persistent, deterministic, and free of AI. Download it at https://codeberg.org/josschuurmans/siftler-python-cli |
And just like that… the development of Siftler seems to be accelerating for me. Soon I might even dare to call myself a programmer. But I’m not quite there yet.
To recap: Siftler is my attempt at creating technology that helps people and organisations regain agency over their information monitoring, discovery, consumption and curation.
There is an alternative to an attention economy built on siloed platforms and black-box algorithms optimised for engagement and data capture. Between the AI-generated, profiled doomscrolling feed and the over-simplistic reverse-chronological firehose, there is a better option: a feed that is tailored without profiling, relevant without manipulation, and transparent enough for users to understand and control. Earlier this year I made that case:
Let’s decouple the algorithm from the platform
Siftler enables discovery of bespoke information based on links shared by those with similar information appreciation patterns. It leverages the wisdom of the crowd by way of collaborative filtering.
From prompt to code
A month ago I released Siftler AI Prompt v0.1: a prompt you can copy and paste into an AI assistant, which then executes Siftler’s collaborative filtering logic step by step. See:
Releasing Siftler AI Prompt v0.1
Siftler compares your most recently submitted list of links (the ‘Benchmark’) against previously submitted lists (the ‘Ghosts’) and recommends links that appear in Ghosts most similar to your Benchmark: content you haven’t seen yet, surfaced by sources close to your current interests. RSS feeds are the ideal input format, though others are supported too. You submit a set of links you have appreciated, and you receive a fresh RSS 2.0 feed with suggested content in return.
I found it rather fascinating that the AI prompt approach involved no programming language. All the instructions are packed into the prompt itself. You could say: the prompt is the software.
My late grandmother used to say: “Prakizeren komt van arme mensen”, or: improvisation is the mother of invention. For me, the AI prompt was an invention born of necessity. Not being a software developer, I had no choice but to express what I wanted the application to do in plain language. Quite strikingly, a large language model can understand and execute such instructions without first translating them into code.
A new epiphany
Over the past weeks I had a new epiphany: by being forced to explain Siftler’s logic so precisely in human language, I had inadvertently written an excellent specification for exactly the kind of deterministic software I had originally set out to build.
The result is Siftler Python CLI v0.1: the same algorithm, now running as a local Python script on your own computer.
The prompt is now also code. You can find it here:
https://codeberg.org/josschuurmans/siftler-python-cli
It is licensed under AGPL-3.0, which means you are free to use and modify it, but any derivative work must remain open under the same terms.
When the algorithm runs locally
Running Siftler as a Python script rather than an AI prompt opens up new possibilities:
- Persistence: linkblocks are saved between sessions as JSON files, so your Ghosts accumulate over time without having to resubmit them.
- Tags: organise your linkblocks by theme, source, purpose, or any taxonomy you like, and filter by tag at the start of each session.
- Determinism: the same inputs always produce the same outputs, without risk of AI interpretation or “hallucination”.
- RSS output: the feed is written to a file you can open directly in a browser or RSS reader, or host somewhere.
One day…
I find it genuinely interesting what this process has revealed to me about the relationship between natural language and code. The AI prompt and the Python script express the same logic. They just run in different environments. Siftler AI Prompt and Siftler Python CLI will evolve independently but inform each other. Improvements proven in one will flow to the other.
My aim is to demonstrate the concept clearly enough that developers, open web advocates, and potential partners can recognise what we are building toward: a transparent, deterministic, open-source implementation that can one day power alternative feeds inside and outside of social platforms, and run on the decentralised web.
If you try Siftler Python CLI (or the AI Prompt, for that matter) I would love to hear what you think. File an issue on Codeberg, or get in touch directly.
Follow the project at https://josschuurmans.com/en/the-information-stack
Reach me at jos.schuurmans@cluetail.com.