---
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.
