Inspiration
Coding agents now start work the moment you hit enter. taskfm reads each prompt, works out what kind of work it is (a bug hunt, a deploy, a data job, docs, a review) and starts a matching Spotify station. Without Qloo, that station comes from a fixed keyword list, so every developer debugging at 2am got the same "techno" search. Music is personal; the vibe of the task is only half the answer.
What it does
- Classifies each agent prompt into a work vibe (debug, ship, data, design, docs, review, focus) with a local, explainable keyword classifier.
- Turns the vibe into a music genre and resolves it to a Qloo genre tag (/v2/tags).
- Resolves the things you like, artists and also films, TV shows, books and podcasts, to Qloo entities (/search with types).
- Calls Qloo Insights (/v2/insights, filter.type=urn:entity:artist) with your entities as signal.interests.entities and the genre tag as signal.interests.tags, so the result fits both who you are and what you are doing.
- Excludes your own seeds and anything already played this session (filter.exclude.entities), so a long agent session keeps discovering.
- Plays that artist's radio on Spotify (CLI), or shows it in the browser (web app).
The web app (what judges can try)
- Enter your taste (or pick a preset) and a few agent prompts, then press "DJ this session".
- Each prompt becomes a card: the vibe, the station you would get without Qloo (the same for everyone) next to the station with Qloo, the entities behind it, more artists that fit, and a "How Qloo decided" panel listing the exact requests sent (key redacted).
- POST /api/hook accepts the same JSON a Claude Code UserPromptSubmit hook sends, so a hosted agent can use it with one curl line.
Why it needs Qloo
Without Qloo every user gets the same station per vibe. The cross-domain part is the point: someone who lists Blade Runner 2049 and Severance but no musicians still gets artist picks, because Qloo's taste graph connects films and shows to music. That is not something a keyword list or a single-domain music API gives you.
How we built it
- Python 3.11+, standard library only (urllib, http.server), no runtime dependencies.
- Qloo hackathon API: /search, /v2/tags, /v2/insights. 3-second timeouts, a private one-week cache of IDs and results on the server, and graceful fallback to the keyword stations if Qloo is unreachable.
- Privacy: only public cultural names and a genre tag go to Qloo. The prompt text never leaves the machine (CLI) or the server (web app). The API key lives only in a server environment variable.
- 44 automated tests (pytest) plus ruff, run in CI on Python 3.11 to 3.13.
Built during the Submission Period
The whole project was built during the Submission Period (which opened Sep 30, 2026), as the public commit history shows:
- Oct 3: taskfm CLI (prompt vibe classifier plus Spotify stations).
- Oct 7: first Qloo integration (artist seeds to /v2/insights, steered by a genre tag).
- Oct 9: cross-domain taste (films, shows, books, podcasts), session no-repeat via filter.exclude.entities, request provenance, a hosted web app with a side-by-side "without Qloo vs with Qloo" view, a hook API for hosted agents, demo mode, and a Render deploy.
Challenges
- Making the Qloo step visible. A recommendation alone looks like magic; the provenance panel shows the entities, the tag and the parameters, so a judge can see what Qloo contributed.
- Staying fast inside an agent hook: short timeouts, caching, and a fallback that never blocks the agent.
What's next
- Use Qloo audience and location signals for team-wide "office radio".
- Let the agent explain the pick in its own reply.
Limitations (stated honestly)
- Spotify playback (CLI) needs Spotify Premium and the local Spotify app; the web app only shows and links stations.
- Without a key the app runs on a small hand-written demo table and labels it "demo data"; that is not Qloo output.

Log in or sign up for Devpost to join the conversation.