# Content idea filter for shared links, articles and releases

> Your agent reads every shared link for content potential too, and speaks up only when an idea clears a hard filter.

Canonical: https://dawidgac.com/en/skills/content-idea-filter
Published: 2026-09-22

## What it does

When you paste an article, a link, a tool release or a screenshot of someone else's work, your agent first answers your question in full. Then it appends a short, separate content note, or nothing. It kills by default: a topic already saturated in your market, no angle only you can claim, no receipts, a take that only summarises the announcement. An idea that clears gets a named hook, the cheapest surface, a decay window, and goes onto your idea list. Changes by platforms your work depends on always get a note, a task and a same-day research step.

## When to use it

- You publish content and paste links, articles and releases into your agent every day.
- You have an edge in a specific market or language and want to use it faster.
- Ideas that come up in agent conversations get lost.

## When not to use it

- You do not publish content.
- You want the agent to generate ideas on demand. This skill only filters what you share.
- You use the agent only on your own code and data. The lens stays off there.

## Decision table

| What you share | What the agent does |
| --- | --- |
| Your own code, logs, dashboard | Answers. No content note. |
| An article outside your topics | Answers. Usually no note. |
| An article on your core topic | Answers, then a note: hook, surface, decay window, or an explicit kill with the reason. |
| A pricing or API change by a platform you depend on | Answers, always a note, a task and same-day research. |
| You say to develop the idea | Only now does research and development of the idea start. |

## What you need

### An AI coding agent: Claude Code, Codex CLI or Cursor

required, app: https://code.claude.com/docs/en/overview

Runs the lens. Any agent that reads a markdown instruction file works.

1. Install one agent from its official docs: Claude Code (code.claude.com/docs), Codex CLI (developers.openai.com/codex) or Cursor (cursor.com/docs).
2. Place the template folder where your agent loads skills or instructions, as in the install steps.
3. Check that the agent can read a web page: paste a public article link and ask for a one-sentence summary. If it cannot, paste the article text instead.

### X API (official)

optional, API: https://docs.x.com/x-api/posts/lookup/introduction

Optional. Lets the agent read a post or thread when you share an X link, because X pages usually do not load for a plain web fetch. Without it, you paste the post text into the chat.

1. Create a developer account at developer.x.com and create a project and an app in the developer console.
2. Check the current access options and pricing in the console before you rely on it.
3. Generate an app-only access token for the app. Store it in an environment variable on your own machine or in your password manager. Never paste it into the chat and never commit it.
4. Let the agent read the token from that variable and call the posts lookup endpoint only when you share an X link.

## Install

1. Copy the folder with SKILL.md and CONTEXT.template.md.
2. Claude Code: place it as .claude/skills/content-lens/ in the project, or ~/.claude/skills/content-lens/ for every project.
3. Codex or Cursor: paste the contents of SKILL.md into AGENTS.md in the project.
4. Any other agent: paste SKILL.md into the project instruction file or system prompt.
5. Rename CONTEXT.template.md to CONTEXT.md and fill in your market, topics, competitor list, surfaces with cost, idea list and the platforms you depend on.

## It's working if

- After you paste a link, the agent answers the question first and the content note sits apart at the end.
- After you paste a log from your own app, the reply contains no content note.
- Every note carries a named hook and a specific surface, or an explicit kill with a reason from the table.
- Your idea list gains a new row with date, hook, surface and link in the same turn.
- Pasting a link alone never starts a web search or a subagent, outside the platform-shift exception.

## Requirements

- An agent that reads a markdown instruction file (Claude Code, Codex, Cursor or another).
- A filled-in CONTEXT.md.
- A place for the idea list the agent can write to.
- Optional: access to the official X API, if you want the agent to read posts from X links.

## FAQ

### Will the agent append ideas to every answer?

No. It kills by default and stays silent. A note appears only when the idea has a named hook and surface, or when the artifact touches your core topic or a platform you depend on.

### Does reading a link cost a research run?

No. The note uses what the agent already knows. Research starts only when you say you want to develop the idea. Changes by platforms on your dependency list are the exception.

### What if I have no community or regular community session?

Leave the discussion-topics field blank. The second, silent bar then switches off.

### How does the agent know what is saturated in my market?

From the competitor list you add to CONTEXT.md, your market description and its own knowledge. If the list is blank, the agent asks you for it. It is a fast read. You run the full competitor check when you develop the idea.

## Where it fits

It works as an intake filter. Ideas that clear go onto a list, and you develop them in a separate research step. It pairs well with the clarify-before-acting template, which stops the agent guessing what you meant, and with the orchestrator template when you split research across several agents.

## Sources

- Claude Code docs: skills: https://code.claude.com/docs/en/skills (accessed 2026-09-22)
- Codex docs: AGENTS.md: https://developers.openai.com/codex/guides/agents-md (accessed 2026-09-22)
- Cursor docs: rules: https://cursor.com/docs/context/rules (accessed 2026-09-22)

## Files

### SKILL.md

The method: when the lens fires, the kill table, manager mode, surface choice, idea capture.

Download: https://dawidgac.com/en/skills/content-idea-filter/files/SKILL.md

````markdown
---
name: content-lens
description: Reads anything the user shares from outside their own work (a link, article, release, screenshot, post, competitor page) for content potential, after answering their actual question in full. Use it whenever the user pastes or links an external artifact; it stays silent unless an idea clears a strict kill test.
---

# Content Lens

The user publishes content. People like that share articles, links, releases and screenshots all day,
and some of those artifacts are the raw material for their next post. This skill makes you read each
external artifact twice: once to answer what they asked, once for content potential.

Most artifacts have no content potential. Silence is the correct output far more often than a
suggestion. The lens only stays useful while it stays quiet.

Read `CONTEXT.md` next to this file before the first use in a session. It holds the user's market and
language edge, their content topics, their competitors, their surfaces and what each costs, where cleared
ideas get captured, and which platforms their work depends on.

If `CONTEXT.md` is missing, or a field you need is blank, ask the user for it in the language they write
in, one field at a time, and write the answer into `CONTEXT.md` so you never ask twice. For example:

- English: "Add your competitor list: the accounts, channels or sites that already cover your topics in your market."
- Polish: „Dodaj swoją listę konkurentów: konta, kanały lub strony, które już publikują na Twoje tematy na Twoim rynku."

The template ships with no competitors, topics or platforms. Never invent them. Until the competitor list
exists, judge saturation from what you already know and say in the read that it was not checked against
a list.

## Before you start / What you need

- **An AI coding agent** that reads a markdown instruction file: Claude Code, Codex CLI or Cursor.
- **A way to read what the user shares.** For public web pages, use the agent's built-in web fetch. If the
  agent has none, or a page does not load, ask the user to paste the text.
- **X posts (optional).** X pages usually do not load for a plain web fetch. If the user has set up the
  official X API (developer.x.com), read the post through its posts lookup endpoint with the access token
  the user keeps in their own environment. Otherwise ask the user to paste the post text. Never use an
  unofficial scraper or a third-party proxy, and never ask the user to paste a token into the chat.
- **A filled-in `CONTEXT.md`** and a place for the idea list you are allowed to write to.

## 1. When the lens fires

It fires on anything that originated outside the user's own world:

- a pasted article, announcement, changelog or paper
- a link to anything
- a tool, product, model or feature release
- a screenshot of someone else's work
- a post, thread, video or clip
- a competitor's page, offer or pricing
- a piece of news or a platform policy change

It does NOT fire on:

- the user's own code, repositories, configs, logs, error traces, metrics or dashboards
- screenshots of the user's own app or product
- questions about the user's own system
- anything shared purely as a work instruction ("fix this", "why is this failing")

**The two-part test. Both halves must hold:**

1. Did it originate outside the user's world?
2. Does it carry information their audience does not already have?

If either half fails, the lens stays off. Answer the question and stop.

## 2. Shape: a coda, never the lead

The question the user asked is the response. Answer it completely, on its own terms, as if this skill
did not exist.

The content read comes after. It is short, and it sits visually apart: its own line or its own small
block, clearly appended. Never weave it into the answer.

Why this rule exists: a lens that turns a technical question into a marketing pitch gets switched off,
and then it catches nothing.

## 3. Kill by default

Over-firing is the worse of the two failures. A missed artifact costs one piece of content. A coda on
everything trains the user to stop reading codas, and after that the lens is worthless.

Output nothing at all when any of these hold:

| It dies when | Because |
|---|---|
| The topic is already saturated in the user's market or language (see `CONTEXT.md`) | Their edge is being early or better there; the fifth voice brings nothing |
| No angle exists that the user can uniquely claim | If anyone could make it, nobody has a reason to watch it from them |
| It sits on no content topic they already run | A new topic costs a slot in a production budget that is already full |
| It needs receipts they do not have | A claim without proof damages the brand instead of building it |
| The only possible take is summarising the announcement | That is aggregation; the audience can read the source |
| It has neither a decay window nor evergreen value | Not urgent and not durable means it is nothing |

**Banned output: enthusiasm without an angle.** "This could make a great video" with no named hook and no
named surface is worse than silence. It costs attention and returns no decision. If you cannot name the
hook in one sentence, the read has failed; output nothing.

## 4. What the read scores on

Answer these three from what you already know. Do not research.

1. **Coverage in the user's market.** Is it uncovered, or badly covered, in their language or market?
   Check it against the competitor list in `CONTEXT.md`. Badly covered is often the better opportunity:
   there is a named thing to be right about.
2. **Decay window.** How long until everyone has covered it? Hours, days, weeks, or evergreen?
3. **What the user adds.** What do they bring that the source lacks: their own numbers, their customers'
   or clients' results, hands-on testing, a contrarian read they can defend?

If you cannot answer both 1 and 3, the idea dies.

## 5. Manager mode on core topics

On the topics listed as core in `CONTEXT.md`, drop the terse coda and give an active manager read. Deliver
exactly one of these two shapes:

**Cleared:**

```
Content read: [hook, one sentence]
Surface: [cheapest surface that captures it]
Timing: [decay window, e.g. "within 48 hours" or "evergreen"]
Why now: [one line, from what is already known]
```

**Killed:**

```
Content read: kill. [which row of the kill table, one clause]
```

Outside the core topics, kill-by-default governs: most artifacts get no line at all.

## 6. Name the surface, not "a video"

Pick the cheapest surface that captures the value. The user's surfaces and their production cost live in
`CONTEXT.md`. A neutral example list, cheapest first:

- community question or poll: one question the audience can argue with
- social post: a repurpose or one sharp observation
- short vertical video: one idea, one number
- newsletter item: a paragraph with a take
- blog post: evergreen and searchable
- long video: last resort, and say so explicitly

Recommend the long, expensive format only when nothing cheaper carries the idea. Say why when you do,
because production capacity is usually the binding constraint.

## 7. Capture, do not just mention

When an idea clears, write it to the user's idea list (location and format in `CONTEXT.md`) in the same
turn. One line per idea: date, hook, surface, decay window, source link.

Confirm the capture back in one line: `Captured: [hook] -> [surface]`. A cleared idea that lives only in
chat history is lost.

## 8. Second, silent bar: discussion topics (optional)

If `CONTEXT.md` names a community, call or discussion space, apply a second, lower bar to every external
artifact, including ones the content lens killed: would this make a good discussion segment (news value,
relevance to members, a teachable pattern)?

If yes, capture it silently to the discussion-topics list in `CONTEXT.md`. Do not mention it in the reply.
Kill-by-default governs the public coda only; this capture is cheap and invisible.

## 9. Exception: platform shifts always surface

A product, API, model, pricing or policy launch or change by a platform the user's work depends on
(listed in `CONTEXT.md`) is never killed as "just an announcement", "no topic" or "aggregation". For this
class:

1. It always gets a content read, even outside core topics.
2. It always gets a research step the same day: tell the user and start one, or run it if the user has
   told you to develop such shifts automatically (see `CONTEXT.md`).
3. It always becomes a task in the user's task list, with the decay window stated.

Why this exception exists: a platform change goes stale fastest, so a shift that is noticed but never
acted on is the most expensive miss the lens can make.

## 10. The lens never triggers research by itself

The inline read is a fast read from what you already know. It never starts a research task, a web search
or a subagent. Sharing a link must never cost the user a research run.

Research starts only when the user says to develop the idea, in whatever words they use ("develop
this", "draft it"). Those are sequential steps, never simultaneous. The platform-shift exception in
section 9 is the only case where a research step is scheduled without that phrase.

## Worked example

The user runs a home-cooking video channel with a weekly newsletter. They paste a link: their newsletter
tool announces that paid subscriptions become free to switch on for small senders next month. They ask:
"Does this change anything for my newsletter?"

1. Answer in full: what changes, whether their setup is affected, what to do before the date.
2. Two-part test: external, yes. New to their audience of other home cooks who run small newsletters, likely yes.
3. The newsletter tool is on the dependency list in `CONTEXT.md`, so section 9 applies.
4. Coda:

```
Content read: "Your newsletter tool now lets you charge readers; here is the setting to check first"
Surface: short vertical video
Timing: within a week, before others explain it
Why now: the change lands next month and the setting is easy to miss
```

5. Capture the idea, add a task, note the research step.

Counter-example: the same user pastes a big-tech keynote summary about a feature for enterprise teams and
asks what it means. Answer the question. No topic, no receipts, only a summary take: no coda at all.

## Failure modes to watch for

- The coda arrives before the answer, or blends into it.
- A coda says "great content idea" with no hook and no surface.
- A research task starts because a link was shared.
- A killed idea gets a paragraph explaining why it was killed, outside manager mode.
- The long format gets recommended by default.
- A platform shift passes with no task created.
````

### CONTEXT.template.md

Your market, topics, surfaces with cost, idea list and the platforms you depend on.

Download: https://dawidgac.com/en/skills/content-idea-filter/files/CONTEXT.template.md

```markdown
# Content Lens: your context

Copy this file to CONTEXT.md next to SKILL.md and fill in every blank (______). Example lines only show the shape of an answer; delete them once you have written your own. Never put passwords, access keys or card numbers here.

## Your market and language edge

(Where you publish and what makes you early or different there: a language, a country, a niche, a type of audience.)
Your answer: ______
Example (replace it, this is not your data): Spanish-language content on budget home cooking.

## Your audience

(Who watches or reads you, in one or two lines. The two-part test asks whether an artifact carries information they do not already have.)
Your answer: ______
Example (replace it, this is not your data): home cooks who batch-prepare meals for the week.

## Core content topics

(The topics you already publish on. The lens gives a full manager read on these and stays mostly silent elsewhere.)
Your answer: ______
Example (replace it, this is not your data): weekly meal prep, cheap kitchen tools, grocery budgeting.

## Your competitors

(Add your own list: the accounts, channels, newsletters or sites that already cover your topics in your market. The lens checks each topic against this list to judge whether it is saturated. The agent asks for this list if it is blank.)
Your answer: ______
Example (replace it, this is not your data): three channels in my language on budget cooking, one recipe newsletter, one food blog.

## Surfaces and their cost

(Every format you publish, cheapest first, with a rough production cost in time. The lens recommends the cheapest one that captures the idea.)
Your answer: ______
Example (replace it, this is not your data): community question: 5 minutes
Example (replace it, this is not your data): short vertical video: 1 hour
Example (replace it, this is not your data): long video: 2 days

## What you can bring that sources lack

(Your receipts: your own data, client or customer results, hands-on tests, a stance you can defend. An idea that needs receipts you do not have dies.)
Your answer: ______
Example (replace it, this is not your data): my own weekly grocery receipts, side-by-side tests of recipes I cook.

## Idea list

(Where cleared ideas get captured and in what format: a file path in your project, a notes app page, a task board column.)
Your answer: ______
Example (replace it, this is not your data): ideas.md in this project, one line per idea.

## Task list

(Where platform-shift tasks go.)
Your answer: ______
Example (replace it, this is not your data): the "This week" column of my task board.

## Discussion-topics list (optional)

(If you run a community, call or discussion space: where silent discussion-topic captures go. Leave blank to switch this bar off.)
Your answer: ______
Example (replace it, this is not your data): discussion-topics.md, reviewed before each community session.

## Platforms your work depends on

(Every platform whose launches, pricing or policy changes affect you or your audience. A change by one of these always surfaces and always gets a same-day research step and a task.)
Your answer: ______
Example (replace it, this is not your data): my video platform, my newsletter tool, the recipe site I publish on.

## Platform-shift research

(Should the agent start the same-day research step on its own, or ask you first?)
Your answer: ______
Example (replace it, this is not your data): ask first.
```
