Not in the top 1,000 by GitHub stars
hassancs91/content-factory-starter
A Claude Code skill that turns a one-line idea into a published, evidence-backed page. Recon, real lab experiments, verification loops, two human checkpoints. Free and MIT.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
content-factory/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 412b62cb42e6
No earlier version was observed for comparison.
Heat
Insufficient historyNot enough history yet to measure heat. It appears after a few days of data.
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- Content Factory
content-factory
How it works
Content Factory
When your agent uses it
End-to-end content pipeline — idea in, published evidence-backed page out. Orchestrates search recon, real lab experiments (cloud VMs / local Docker), screenshot and asset production, drafting in a defined voice, verification loops, ship, and a write-back to your knowledge base. Triggers on "/factory ...", "new piece ...", "factory status", "resume <slug>", "refresh <slug>", "continue the <slug> piece", or any request to create a page that needs experiments, captures, or SERP recon.
What it loads into context
Frontmatter
124 tokensAlways available to the agent
SKILL.md
3,715 tokensWhen the skill is activated
Reference documents
22,142 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- The one rule that makes everything else work
- Load this before any task
- Tasks
- Parallel sessions
- Hard rules
- When NOT to use this skill
Scripts executed separately
lab/_config.pylab/auth.pylab/bootstrap-ubuntu.shlab/capture.pylab/dns.pylab/do.pylab/ledger.pylab/lint_draft.pylab/lock.py
Files
SETUP.mddoc3,980 bytesSKILL.mdcore14,794 bytesSKILL.mdcore14,794 bytesSKILL.mdcore14,794 bytesSKILL.mdcore14,794 bytesSKILL.mdcore14,794 bytesSKILL.mdcore14,794 bytesSKILL.mdcore14,794 bytesSKILL.mdcore14,794 bytesSKILL.mdcore14,794 bytesSKILL.mdcore14,794 byteslab/_config.pyruns2,577 byteslab/auth.pyruns6,727 byteslab/bootstrap-ubuntu.shruns937 byteslab/capture.pyruns5,024 byteslab/clone-kit/chrome.cssasset3,640 byteslab/clone-kit/example-browser.htmlasset605 byteslab/clone-kit/example-terminal.htmlasset879 byteslab/dns.pyruns5,160 byteslab/do.pyruns16,378 byteslab/ledger.pyruns10,852 byteslab/lint_draft.pyruns6,167 byteslab/lock.pyruns16,312 bytesmemory/MEMORY.mddoc5,500 bytesmemory/lesson_assert_on_what_the_user_sees.mddoc1,903 bytesmemory/lesson_bash_s_stdin_trap.mddoc1,129 bytesmemory/lesson_evidence_scripts_pipefail_and_sentinels.mddoc2,553 bytesmemory/lesson_experiments_that_break_their_transport.mddoc2,898 bytesmemory/lesson_gpu_droplet_lab.mddoc1,816 bytesmemory/lesson_lab_cost_is_wallclock_not_experiments.mddoc2,182 bytesmemory/lesson_lazy_images_blank_in_fullpage_captures.mddoc1,317 bytesmemory/lesson_measure_before_you_reshoot.mddoc2,682 bytesmemory/lesson_never_edit_running_driver.mddoc1,273 bytesmemory/lesson_no_shared_mutable_files.mddoc4,265 bytesmemory/lesson_path_scoped_commit_ignores_the_index.mddoc2,513 bytesmemory/lesson_pkill_matches_the_remote_wrapper.mddoc1,586 bytesmemory/lesson_probe_differentiator_before_recon.mddoc2,168 bytesmemory/lesson_remote_script_traps.mddoc2,146 bytesmemory/lesson_timeboxed_experiments.mddoc1,755 bytesmemory/lesson_v6_capture_long_pages.mddoc1,858 bytesmemory/lesson_windows_experiment_harness.mddoc3,606 bytesmodules/assets.mddoc4,242 bytesmodules/brain.mddoc5,140 bytesmodules/lab.mddoc7,101 bytesmodules/recon.mddoc4,339 bytesmodules/verify.mddoc5,545 bytesprofiles/writer-profile.example.mddoc4,179 bytestemplates/PIECE.mddoc5,498 bytestemplates/claims.mddoc1,862 bytestemplates/evidence-manifest.mddoc2,464 bytestemplates/recon-report.mddoc1,808 bytes
Read SKILL.md
# Content Factory — Orchestrator
This skill runs a content pipeline where **the evidence is generated before the writing
starts**. The model is one component. The pipeline around it is what makes the output
worth publishing.
Read [SETUP.md](SETUP.md) once before the first run — the pipeline expects a handful of
files to exist and a few decisions to have been made.
| Module | File | What it covers |
|---|---|---|
| Lab (cloud VMs, local Docker) | [modules/lab.md](modules/lab.md) | Where experiments run and how they get torn down |
| Recon | [modules/recon.md](modules/recon.md) | What to learn about the topic before writing |
| Assets | [modules/assets.md](modules/assets.md) | Captures, clones, charts, social cards |View the complete source on GitHubSkills included
- Content Factory
Repository facts
- License
- MIT
- Created
- Aug 17, 2026
- Last pushed
- Nov 5, 2026
- Forks
- 7
- Open issues
- 0
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 6, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 9 notes
content-factory/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedcontent-factory/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedcontent-factory/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedcontent-factory/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedcontent-factory/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedcontent-factory/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedcontent-factory/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedcontent-factory/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedcontent-factory/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 5 dangerous shell commandsin 4 files: content-factory/lab/bootstrap-ubuntu.sh:18 content-factory/lab/dns.py:13 content-factory/memory/lesson_probe_differentiator_before_recon.md:36 and 1 more
- 39 network referencesin 11 files: content-factory/lab/dns.py:36 content-factory/lab/do.py:34 content-factory/modules/assets.md:14 and 8 more
- No hidden or obfuscated text
- No instruction overrides
- 9 executable scriptsin 9 files: content-factory/lab/_config.py:1 content-factory/lab/auth.py:1 content-factory/lab/bootstrap-ubuntu.sh:1 and 6 more
- 10 references to secretsin 5 files: content-factory/lab/_config.py:23 content-factory/lab/do.py:13 content-factory/lab/lock.py:65 and 2 more
- No requests to vote in Hot
Show all 63 signals by file
content-factory/SETUP.md
- Access to secretsline 57
[Credential-related source omitted]
content-factory/lab/_config.py
content-factory/lab/auth.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 9
python .claude/skills/content-factory/lab/auth.py \ --url https://app.example.com/login --out content-lab/.auth/app.json \ - Network accessline 10
--url https://app.example.com/login --out content-lab/.auth/app.json \ - Network accessline 15
python .claude/skills/content-factory/lab/capture.py \ --url https://app.example.com/usage --out assets/raw/usage.png \ - Network accessline 16
--url https://app.example.com/usage --out assets/raw/usage.png \
content-factory/lab/bootstrap-ubuntu.sh
- Executable scriptline 1
#!/usr/bin/env bash - Network accessline 13
echo "== apt base ==" $APT update -y $APT install -y ca-certificates curl git jq htop unzip - Network accessline 15
$APT install -y ca-certificates curl git jq htop unzip - Network accessline 17
echo "== docker ==" curl -fsSL https://get.docker.com | sh - Dangerous shell operationline 18
curl -fsSL https://get.docker.com | sh - Network accessline 18
curl -fsSL https://get.docker.com | sh - Dangerous shell operationline 29
rm -rf /var/lib/apt/lists/*
content-factory/lab/capture.py
content-factory/lab/dns.py
- Executable scriptline 1
#!/usr/bin/env python3 - Dangerous shell operationline 13
python dns.py rm myapp - Network accessline 36
API = "https://api.cloudflare.com/client/v4" - Network accessline 56
def api(method, path, body=None): req = urllib.request.Request( - Network accessline 57
req = urllib.request.Request( - Network accessline 62
) try: with urllib.request.urlopen(req, timeout=30) as r: - Network accessline 63
try: with urllib.request.urlopen(req, timeout=30) as r: data = json.loads(r.read()) - Network accessline 64
with urllib.request.urlopen(req, timeout=30) as r:
content-factory/lab/do.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 13
[Credential-related source omitted] - Network accessline 34
API = "https://api.digitalocean.com/v2" - Access to secretsline 35
[Credential-related source omitted] - Network accessline 50
def api(method, path, body=None): req = urllib.request.Request( - Network accessline 51
req = urllib.request.Request( - Network accessline 56
) try: with urllib.request.urlopen(req, timeout=30) as r: - Network accessline 57
try: with urllib.request.urlopen(req, timeout=30) as r: raw = r.read() - Network accessline 58
with urllib.request.urlopen(req, timeout=30) as r:
content-factory/lab/ledger.py
- Executable scriptline 1
#!/usr/bin/env python3
content-factory/lab/lint_draft.py
- Executable scriptline 1
#!/usr/bin/env python3
content-factory/lab/lock.py
content-factory/memory/MEMORY.md
- Network accessline 35
- [Lazy images render blank in full-page captures](lesson_lazy_images_blank_in_fullpage_captures.md) — Playwright's `full_page=True` never scrolls, so `loading="lazy"` images shoot as empty boxes; pre-scroll first, and curl the asset URL be
content-factory/memory/lesson_lazy_images_blank_in_fullpage_captures.md
- Network accessline 15
like that or shoot viewport stops (which scroll by construction). If a screenshot shows an empty framed box where an `<img>` should be, suspect this before suspecting paths — `curl -w %{http_code}` the static URL first; it costs nothing and - Network accessline 17
`curl -w %{http_code}` the static URL first; it costs nothing and splits the two causes.
content-factory/memory/lesson_probe_differentiator_before_recon.md
- Network accessline 35
**Method note that cost a round:** probe reachability with a real TCP connect (`/dev/tcp/$ip/$port`), never `curl`. curl reported port 22 as unreachable on a box we were - Dangerous shell operationline 36
(`/dev/tcp/$ip/$port`), never `curl`. curl reported port 22 as unreachable on a box we were - Network accessline 36
(`/dev/tcp/$ip/$port`), never `curl`. curl reported port 22 as unreachable on a box we were
content-factory/memory/lesson_remote_script_traps.md
content-factory/modules/assets.md
- Network accessline 14
python $CAP --url https://your-lab-box.example.com/... --out assets/raw/app.png - Network accessline 15
python $CAP --url http://127.0.0.1:8150/your-page/ --out assets/raw/page.png --full - Network accessline 24
python .claude/skills/content-factory/lab/auth.py \ --url https://app.example.com/login --out content-lab/.auth/app.json \ - Network accessline 25
--url https://app.example.com/login --out content-lab/.auth/app.json \ - Network accessline 27
python $CAP --url https://app.example.com/usage --out assets/raw/usage.png \
content-factory/modules/lab.md
content-factory/modules/verify.md
- Network accessline 92
CAP=.claude/skills/content-factory/lab/capture.py python $CAP --url http://127.0.0.1:<port>/<path>/ --out assets/raw/v6-desktop.png --full - Network accessline 93
python $CAP --url http://127.0.0.1:<port>/<path>/ --out assets/raw/v6-desktop.png --full - Network accessline 94
python $CAP --url http://127.0.0.1:<port>/<path>/ --out assets/raw/v6-mobile.png --width 390 --height 844 --dpr 3 --full
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Combined signals: 1 fact
- Runs the official installer from get.docker.comcontent-factory/lab/bootstrap-ubuntu.sh:18Low confidence
Declared and executed: 3 facts
- Contacts get.docker.com, which SKILL.md, the README and the plugin manifest do not mentioncontent-factory/lab/bootstrap-ubuntu.sh:18High confidence
- Contacts api.cloudflare.com, which SKILL.md, the README and the plugin manifest do not mentioncontent-factory/lab/dns.py:36High confidence
- Contacts api.digitalocean.com, which SKILL.md, the README and the plugin manifest do not mentioncontent-factory/lab/do.py:34High confidence
Signal confidence: 63 facts
- Access to secrets in prose of documentation: reads a credential storecontent-factory/SETUP.md:57Low confidence
- Executable script in code of a file that runscontent-factory/lab/_config.py:1High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuecontent-factory/lab/_config.py:23Low confidence
- Access to secrets in code of a file that runscontent-factory/lab/_config.py:38High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuecontent-factory/lab/_config.py:60Low confidence
- Access to secrets in code of a file that runscontent-factory/lab/_config.py:75High confidence
- Executable script in code of a file that runscontent-factory/lab/auth.py:1High confidence
- Network access in prose of a file that runscontent-factory/lab/auth.py:9Low confidence
- Network access in prose of a file that runscontent-factory/lab/auth.py:10Low confidence
- Network access in prose of a file that runscontent-factory/lab/auth.py:15Low confidence
- Network access in prose of a file that runscontent-factory/lab/auth.py:16Low confidence
- Executable script in code of a file that runscontent-factory/lab/bootstrap-ubuntu.sh:1High confidence
- Network access in code of a file that runscontent-factory/lab/bootstrap-ubuntu.sh:13High confidence
- Network access in code of a file that runscontent-factory/lab/bootstrap-ubuntu.sh:15High confidence
- Network access in code of a file that runscontent-factory/lab/bootstrap-ubuntu.sh:17High confidence
- Dangerous shell operation in code of a file that runscontent-factory/lab/bootstrap-ubuntu.sh:18High confidence
- Network access in code of a file that runscontent-factory/lab/bootstrap-ubuntu.sh:18High confidence
- Dangerous shell operation in code of a file that runscontent-factory/lab/bootstrap-ubuntu.sh:29High confidence
- Executable script in code of a file that runscontent-factory/lab/capture.py:1High confidence
- Network access in prose of a file that runscontent-factory/lab/capture.py:7Low confidence
- Network access in prose of a file that runscontent-factory/lab/capture.py:9Low confidence
- Network access in prose of a file that runscontent-factory/lab/capture.py:14Low confidence
- Executable script in code of a file that runscontent-factory/lab/dns.py:1High confidence
- Dangerous shell operation in prose of a file that runscontent-factory/lab/dns.py:13Low confidence
- Network access in code of a file that runscontent-factory/lab/dns.py:36High confidence
- Network access in code of a file that runscontent-factory/lab/dns.py:56High confidence
- Network access in code of a file that runscontent-factory/lab/dns.py:57High confidence
- Network access in code of a file that runscontent-factory/lab/dns.py:62High confidence
- Network access in code of a file that runscontent-factory/lab/dns.py:63High confidence
- Network access in code of a file that runscontent-factory/lab/dns.py:64High confidence
- Executable script in code of a file that runscontent-factory/lab/do.py:1High confidence
- Access to secrets in prose of a file that runs: reads a credential storecontent-factory/lab/do.py:13Low confidence
- Network access in code of a file that runscontent-factory/lab/do.py:34High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuecontent-factory/lab/do.py:35Low confidence
- Network access in code of a file that runscontent-factory/lab/do.py:50High confidence
- Network access in code of a file that runscontent-factory/lab/do.py:51High confidence
- Network access in code of a file that runscontent-factory/lab/do.py:56High confidence
- Network access in code of a file that runscontent-factory/lab/do.py:57High confidence
- Network access in code of a file that runscontent-factory/lab/do.py:58High confidence
- Executable script in code of a file that runscontent-factory/lab/ledger.py:1High confidence
- Executable script in code of a file that runscontent-factory/lab/lint_draft.py:1High confidence
- Executable script in code of a file that runscontent-factory/lab/lock.py:1High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuecontent-factory/lab/lock.py:65Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuecontent-factory/lab/lock.py:70Low confidence
- Network access in prose of documentationcontent-factory/memory/MEMORY.md:35Low confidence
- Network access in prose of documentationcontent-factory/memory/lesson_lazy_images_blank_in_fullpage_captures.md:15Low confidence
- Network access in prose of documentationcontent-factory/memory/lesson_lazy_images_blank_in_fullpage_captures.md:17Low confidence
- Network access in prose of documentationcontent-factory/memory/lesson_probe_differentiator_before_recon.md:35Low confidence
- Dangerous shell operation in prose of documentationcontent-factory/memory/lesson_probe_differentiator_before_recon.md:36Low confidence
- Network access in prose of documentationcontent-factory/memory/lesson_probe_differentiator_before_recon.md:36Low confidence
and 13 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Unknown | No evidence | |
| Codex | Unknown | No evidence | |
| Cursor | Unknown | No evidence | |
| Gemini CLI | Unknown | No evidence | |
| GitHub Copilot | Unknown | No evidence | |
| OpenCode | Unknown | No evidence |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.