Build Signal Engine logo

Build Signal Engine

Community
coleam00
build-signal-engine

Build a personal signal engine from scratch - a system that reads every source someone cares about each day (changelogs and release notes, communities, feeds, videos, papers), makes a quick decision on every item, lets an LLM read only what survives, and delivers one short digest. Interviews the user first to pin down what they need to keep up with, the sources where it actually shows up, and the one question that decides what is worth their time, then builds it one stage at a time into their own repo, proving each stage on real data. Agnostic about the coding agent, the decision model and where the data comes from. Use when the user wants to keep up with AI or their field without doomscrolling, build an AI news digest, a daily briefing, a content engine, a research or competitor monitor, a changelog watcher, or "something that reads everything and tells me what matters"; and when they mention signal vs noise, an information diet, or falling behind.

Overview

Publishercoleam00
Repositoryskills
Skill namebuild-signal-engine
Stars
678
Forks
184
Bundled files
7
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 7 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by coleam00 on GitHub. Read the source before you install it.

Installation

Install the Build Signal Engine AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/coleam00/skills/tree/main/.claude/skills/build-signal-engine
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/coleam00/skills.git /tmp/skills
mkdir -p .claude/skills
cp -r /tmp/skills/.claude/skills/build-signal-engine .claude/skills/build-signal-engine
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Build Signal Engine in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Build Signal Engine on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Build Signal Engine is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Build a signal engine

What the user typed: $ARGUMENTS

If a path was given, it is the repo to build in; confirm it in one sentence. If not, ask whether to start a new folder or use the current one. Then go straight to Round 1.

A signal engine reads everything so its owner doesn't have to. Every morning it pulls from the places things actually happen, decides on every single item, hands an LLM only the few worth reading, and delivers one digest.

Keeping up is a filtering problem, not a reading problem. Reading more makes people feel more behind. The engine encodes the user's own filter and runs it on everything.

Build it into the user's repo. Do not hand them a plan. Every stage below ends with code committed and output from a real run they can look at.


Output discipline

The interview and the build are long. What you say is not.

MomentBudget
Between questionsNothing. Ask the next one.
Finishing a stageTwo lines: what now exists, with the real number from the run, and the next step.
A file you wroteOne line: its path.
Command outputNever paste it. The verdict and the number.

Never announce a plan before doing it, restate an answer as a paragraph, or explain why the skill works this way unless asked. The reasoning lives in references/, for you.


The shape

sources -> store (dedupe, stable ids) -> code filters (dates, numbers) -> decide on every item
        -> the LLM reads what survives -> digest -> delivered on a schedule

Two splits carry the whole design. Say each once, early, in one sentence:

  • Numbers in code, judgment in the decision pass, reading in the LLM. Dates, upvotes, view counts and "have I seen this" are code. "Is this new, is it for me" is a typed decision. Summarising and connecting is the LLM. Mixing them up is the most common bug.
  • The question is the policy. What the engine keeps is decided by the words of one or two questions written from the user's own examples. Changing the question changes the engine. There is no model setting that fixes a vague question.

Construction order

StageWhat exists at the endProof before moving on
0The interview, written downPROFILE.md the user agreed to
1One source, end to end into the storea real run: N items, all with stable ids
2Every sourceeach source's real count, and a re-run that adds ~0
3Code filtershow many each filter dropped
4The decision passtheir own keep/drop examples scored, misses listed
5The reading pass + digesta digest from today's real data
6Delivery + scheduleit ran once on its own
7A week in shadowthe user's marked-up misses, and the question revised

One source first, end to end, before adding the rest. A pipeline built source-wide but never run end to end fails at the join between stages, and finding that after twelve sources is twelve times the work.

Anything that bills per row is capped on every run and only runs on the daily schedule, never on a frequent scan.


Stage 0. Interview

Read references/interview.md and work through it. Three rounds:

  1. Three questions, one at a time, that decide the project: what they need to keep up with and what they would do differently if they knew on the day; something they missed or found out late, and where it first appeared; where the digest gets read and what they do with an item.
  2. Questions only they can answer, about things that already happened: the tools they use daily, where people using those tools talk, three items from last week they would have wanted and three they never want again, what is too old or too small to matter, and whether their sources come through one data platform or get picked per source.
  3. One message of defaults to confirm: schedule, stack, storage, caps, models, digest length, delivery.

Every question goes through the question tool (AskUserQuestion in Claude Code, or the equivalent), with two to four options drafted from what they have already said, one marked (Recommended) and first. It always carries free text, so nothing is lost. Never ask the user to design an artifact; they tell you what happened, you turn it into sources, filters and questions.

Write PROFILE.md from templates/PROFILE.md: the focus, the sources, the filters, the decision question(s) with their keep/drop examples, the digest format and delivery. Read it back as a proposal and get a yes before Stage 1.

When to refuse or shrink:

  • No focus ("everything in AI"): ask for the action instead. "What would you do differently if you knew?" If nothing changes what they do, they need fewer sources, not an engine.
  • Two or three sources: an RSS reader or email alerts beat a build. Say so.
  • A source whose terms forbid automated access and that has no API or permitted provider: leave it out and say why.

Stages 1-3. Sources, store, code filters

Read references/sources.md. It is a playbook per source type: what to use for each, what it returns, and the failure each one is known for.

Where the data comes from is the user's call (R2.6). If they chose one data platform, that is the plan: every source it covers goes through it, with one client, one credential and a spending cap on every run. Do not argue them back to per-source APIs. If they named the exact tool for a source, use that tool and never test an alternative against it. If they asked you to pick, choose per source from references/sources.md and say which method each got.

If the platform has an MCP server, connect it for the build. Search for and test-run the right tool for each source through MCP, then have the engine call those same tools on its schedule through the platform's API. MCP while you build, the API while it runs.

Changelogs and release notes, however they are fetched: split the page into dated entries and give each a stable id.

Every source maps to one item shape (templates/item_schema.md): id, source, title, url, body, published_at, engagement. Dedupe on the id before anything costs money. Store in SQLite unless they already run something else.

Code filters run on stored items and drop by fact: age, engagement floor, language, length, already seen. Report how many each one dropped. Pull smarter before filtering harder: a filter does not refund a row the provider already billed.


Stage 4. The decision pass

Read references/decisions.md. Every item that survived the code filters gets the question(s) from PROFILE.md in one call, all items in parallel. Use a decision model with typed, probability-scored answers if one is available to the user (TypeSafe's Jev via OpenRouter is the reference here), otherwise a small, fast LLM with structured output.

Code routes each item:

  • sure drop (clearly off-topic, clearly nothing new): stored as filtered, never read
  • sure keep: goes to the reading pass
  • unsure: goes to the reading pass, where the LLM decides

Never drop on taste. "Is this a toy project", "would I like this" and "is it good" are for ranking and for the LLM, never for a hard drop. They cut real finds.

Prove it on their examples before trusting it. Score the keep/drop examples from the interview, plus a sample of today's real items you label with them. Print what was kept, what was dropped, and every miss. Tune the words of the question, not the thresholds, first.


Stage 5. The reading pass and the digest

Read references/digest.md. The LLM reads only what the decision pass let through, groups related items, and writes the digest in the format from PROFILE.md with every link kept. Start from templates/digest_prompt.md.

Cap the digest (default ten items). A digest nobody finishes is a feed.

Stage 6. Delivery and schedule

Deliver where they already read (a markdown file in their notes, email, chat). Schedule the full run once a day. If they want a weekly roll-up, it reads the week's stored items, not seven digests.

Ask before registering the schedule (cron, Task Scheduler, launchd). Once it is registered, every paid source bills every day without anyone watching. Show the one command, and run the engine once by hand if they would rather register it themselves.

Stage 7. A week in shadow

For a week the user reads the digest and marks two things: what was missing and what was noise. Fix misses by adding a source or rewording a question; fix noise with a code filter or a sharper question. Then it runs on its own.


Operating facts

  • Keys live in the repo's gitignored env file and the engine loads them from there. Never read or output that file with any tool or command (cat, sed, grep, Get-Content, Read, open()), not even "masked": a masking regex that is slightly wrong prints every key. To check a key, load the file with python-dotenv inside a program and print only the key's name and whether it is set. If one is missing, ask the user to add it themselves rather than pasting it into the chat.
  • Test every run against a throwaway database, never the one that will go live.
  • On Windows, force UTF-8 output from the start (PYTHONIOENCODING=utf-8 or reconfigure stdout). Titles from communities carry emoji and non-English text that crash the console.
  • Measure the decision pass by running the same rows with and without it: rows the LLM read, tokens, wall time, and which rows it would have kept that the pass dropped.
  • LLMs vary between runs too. A row that passed once and not the next time is not proof the decision pass is wrong.
  • Per-row data costs can exceed the whole LLM bill. The decision pass saves on reading, not on fetching.

Resources

  • references/interview.md - every question, what it becomes, and the vague answers to push on
  • references/sources.md - per source type: method, item mapping, known failures
  • references/decisions.md - writing the question, routing, evaluating on their examples
  • references/digest.md - the reading prompt, format, delivery, scheduling, the weekly roll-up
  • templates/PROFILE.md - the file the interview produces and every stage reads
  • templates/item_schema.md - the one item shape every source maps to
  • templates/digest_prompt.md - the starting reading prompt

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Build Signal Engine AI skill do?

Build a personal signal engine from scratch - a system that reads every source someone cares about each day (changelogs and release notes, communities, feeds, videos, papers), makes a quick decision on every item, lets an LLM read only what survives, and delivers one short digest. Interviews the user first to pin down what they need to keep up with, the sources where it actually shows up, and the one question that decides what is worth their time, then builds it one stage at a time into their own repo, proving each stage on real data. Agnostic about the coding agent, the decision model and...

Why use Build Signal Engine on TypingMind?

Because you install it once and use it with any model. Build Signal Engine is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Build Signal Engine in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/coleam00/skills/tree/main/.claude/skills/build-signal-engine. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Build Signal Engine?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Build Signal Engine?

As many as you like. As long as a model supports skills, you can use Build Signal Engine with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Build Signal Engine AI skill free?

Yes. It is published on GitHub by coleam00 under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇