{"skill":{"slug":"founder-signal","displayName":"Founder Signal","summary":"Founder Signal turns verified Reddit and V2EX evidence into a small, reviewable signal package for founders evaluating product demand and positioning across...","description":"---\nname: founder-signal\nversion: \"0.2.14\"\ndescription: >\n  Founder Signal turns verified Reddit and V2EX evidence into a small, reviewable signal package\n  for founders evaluating product demand and positioning across one or more configured\n  product profiles.\n  Use this skill when the user wants founder research from Reddit or V2EX evidence, a scored\n  review artifact, or a Draft page generated from any run outcome.\n  This skill depends on the canonical draft-cli skill. Draft is the default founder\n  review surface, so Founder Signal emits a Draft-ready public publish intent for every\n  run, regardless of success or failure. Every run should be published through the downstream\n  draft-cli skill with `draft page create -> draft page append -> draft page publish`\n  so the run returns a human-reviewable Draft public page URL without asking for\n  another approval; later public web publication outside that Draft page requires\n  explicit confirmation.\nmetadata:\n  clawdis:\n    author: innosage-llc\n    emoji: \"📡\"\n    dependencies:\n      - name: \"toliuweijing/draft-cli\"\n        type: \"other\"\n        url: \"https://clawhub.ai/toliuweijing/draft-cli\"\n    requires:\n      bins:\n        - \"bash\"\n        - \"python3\"\n        - \"draft\"\n    install:\n      - id: \"npm\"\n        kind: \"node\"\n        package: \"@innosage/draft-cli\"\n        bins:\n          - \"draft\"\n        label: \"Install draft-cli (npm)\"\n---\n\n# Founder Signal OpenClaw Skill\n\nUse this skill to turn verified Reddit and V2EX evidence into a small, reviewable signal package\nfor founders evaluating product demand and positioning across one or more configured\nproduct profiles.\n\n## Founder Signal Invariant\n\nNo saved verified snapshot means no scoring, but it does not skip the public run review.\n\nEvery run must persist a run folder before later steps execute so failures still leave\ntraceable artifacts. The skill should only score verified evidence and should only\ngenerate an Action Card after verified candidate evidence exists. Every profile run,\nregardless of success, no-candidate result, partial completion, or runtime failure, must\nwrite `public-run-review.md`, write `draft-publish-intent.json`, and automatically\nattempt Draft page create -> append -> publish for that public-safe review. A failed\nbusiness run may still yield a successful Draft review page. If Draft publication\nfails, preserve the local review artifact and explicit publish-failure metadata so the\npublication is retryable. Public web publication outside that Draft page requires\nexplicit founder confirmation.\n\n## Setup Contract\n\nAfter installation, ask the founder for one canonical Founder Signal JSON config,\nvalidate it, then import it into an internal runtime profile. Do not ask the founder\nto hand-edit package-local `profiles/*.json` unless they explicitly want to debug the\nskill source. The installed ClawHub skill directory is source code; mutable runtime\ndata belongs under `${FOUNDER_SIGNAL_HOME:-~/.founder-signal}` unless `--root-dir` is\npassed explicitly.\n\nRecommended flow:\n\n1. Share or fill `founder-signal.config.example.json`.\n2. Initialize the runtime home:\n\n```bash\npython3 -m founder_signal init\n```\n\n3. Validate it:\n\n```bash\npython3 -m founder_signal doctor --config founder-signal.config.json\n```\n\n4. Import it:\n\n```bash\npython3 -m founder_signal config import founder-signal.config.json\n```\n\n5. Run it:\n\n```bash\npython3 -m founder_signal run --config founder-signal.config.json\n```\n\nThe shell shortcut is also valid:\n\n```bash\nbash scripts/run_founder_signal_once.sh --config founder-signal.config.json\n```\n\nCanonical config requirements:\n\n- `profile_id`\n- `product_name`\n- `product_one_liner`\n- `target_audience`\n- `keywords`\n- `scoring_terms`\n- `platforms`\n- `discovery_mode`\n- `max_candidates`\n- `draft.require_confirmation_before_public_publish: true`\n\nReject legacy user-facing fields such as `subreddits`, `seed_reddit_urls`,\n`excluded_reddit_urls`, or any `draft_publish_command` escape hatch in canonical setup\nJSON. The import step writes an internal runtime profile under\n`<runtime-home>/profiles/` plus a normalized canonical copy under\n`<runtime-home>/config-imports/`.\n\n## Inputs\n\n- one canonical Founder Signal config JSON during setup\n- one or more active imported product profiles from `<runtime-home>/profiles/*.json`\n- optional `--profile <profile_id>` selection for single-profile runs\n- platform configuration from the canonical `platforms` object or existing internal legacy profiles\n- deterministic Reddit/Eddrit research discovery from profile communities,\n  `keywords`, and scoring terms; discovery always runs before configured Reddit hints\n- optional Reddit `discovery_mode: live` using subreddit new feeds with age/comment\n  filtering and product-term matching\n- V2EX discovery through SOV2EX, search, node latest pages, or configured seed topics; third-party discovery is candidate-finding only\n- optional platform `excluded_urls` or legacy `excluded_reddit_urls` to suppress known old candidates\n- `history_ttl_days` to expire old private repeat-candidate exclusions\n- optional `verified_evidence_snapshots` when a Claw/browser agent has verified a source post but automated fetch is blocked\n\n## Draft Publish Handoff\n\nFounder Signal depends on the canonical `draft-cli` skill for Draft public-page\npublication. Draft handoff preparation is on by default for every run: Founder Signal\nwrites `public-run-review.md`, writes `draft-publish-intent.json` next to it, and does\nnot hardcode custom or local shell publish commands. The intent contains the artifact\npath, title, profile, Draft visibility request, and\n`requires_confirmation: false` and `draft_public_publish_requires_confirmation: false`\nfor the `draft page create -> draft page append -> draft page publish` sequence. It\nalso contains `external_public_publish_requires_confirmation: true` for any later\npublic web publication outside the Draft page.\n\nWhen any test run or scheduled run writes this intent, the agent must\nimmediately use the `draft` CLI supplied by the required `draft-cli` skill installed in\nthe agent workspace to run `draft page create`, `draft page append`, and\n`draft page publish` for `public-run-review.md`, then report the resulting\nhuman-reviewable Draft public page URL. Do not ask the founder for another approval\nbefore this Draft page step. Ask for explicit confirmation only before running a\nseparate public web publish action outside that Draft page.\n\nThe `draft-cli` skill is the source of truth for daemon readiness, page creation,\nappend/patch behavior, public publishing, invite codes, and Draft URL extraction.\n\n## E2E Verification Playbook\n\nWhen the founder asks for an end-to-end verification run, the agent must deliver a\nDraft public page URL or clearly report E2E incomplete.\n\n1. Enable the target profiles.\n2. Use the built-in discovery phase. Do not start from placeholder URLs.\n3. Try the normal Eddrit search/listing and post mirror paths first.\n4. If the mirror is blocked, use browser/manual verification and add\n   `verified_evidence_snapshots` to the profile:\n\n```json\n{\n  \"platform\": \"reddit\",\n  \"source_url\": \"https://www.reddit.com/r/ChatGPT/comments/abc123/real_slug/\",\n  \"verification_method\": \"agent_browser\",\n  \"verified_by\": \"openclaw-agent\",\n  \"text_snapshot\": \"Copy the relevant source post text observed by the agent here.\"\n}\n```\n\nThe snapshot must be real source text from the source post, not invented content.\nPlaceholder URLs such as `POST_ID`, `REAL_ID`, `SUB`, `/slug/`, or V2EX placeholder topic IDs are invalid and must\nnot be used. Founder Signal treats `verified_read_via_agent_browser` and\n`verified_read_via_manual_snapshot` as verified reads only after the snapshot is\npersisted.\n\nRun E2E checks with:\n\n```bash\npython3 -m founder_signal run --config founder-signal.config.json --require-action-card --require-publish-intent\n```\n\nWhen the run creates `draft-publish-intent.json`, inspect its `requires_confirmation`\nfield. If it is `false`, immediately invoke the `draft` CLI from the installed\n`draft-cli` skill in the agent workspace to run `draft page create`, `draft page\nappend`, and `draft page publish` for `public-run-review.md`, then return the resulting\nhuman-reviewable Draft public page URL to the founder. Reporting only that\n`draft-publish-intent.json` exists is incomplete. If a later action would make the\npage publicly reachable outside that Draft page, inspect\n`external_public_publish_requires_confirmation` and ask for explicit approval before that\nseparate public web publish action.\n\n## Outputs\n\n- `runs/<RUN_ID>/run.json`\n- `runs/<RUN_ID>/REPORT.md`\n- `runs/<RUN_ID>/profiles/<profile_id>/run.json`\n- `runs/<RUN_ID>/profiles/<profile_id>/REPORT.md`\n- `runs/<RUN_ID>/profiles/<profile_id>/public-run-review.md` for every profile run,\n  regardless of success or failure\n- `runs/<RUN_ID>/profiles/<profile_id>/evidence/`\n- `runs/<RUN_ID>/profiles/<profile_id>/outputs/candidates.json`\n- `runs/<RUN_ID>/profiles/<profile_id>/selected-candidate.json` when a verified\n  candidate is selected\n- `runs/<RUN_ID>/profiles/<profile_id>/daily-review.md` when an Action Card is generated\n- `runs/<RUN_ID>/profiles/<profile_id>/draft-publish-intent.json` for every profile\n  run when Draft public-page publishing is prepared for automatic downstream\n  `draft-cli` handling\n- `state/past-candidates.json` as private local candidate history used to avoid repeat\n  candidates in future runs\n\nThese output paths are relative to the runtime home, not the installed skill package.\nThe runtime home defaults to `${FOUNDER_SIGNAL_HOME:-~/.founder-signal}`.\n\nAction Cards use `Source platform` and `Source URL` labels and must not expose private local evidence paths in Draft-bound Markdown.\nHigh-quality structured evidence should improve Action Card quality, not decide whether\nthe card exists. If a selected candidate is verified, eligible, not agent-rejected, and\nhas a readable saved text snapshot, generate `daily-review.md` even when structured\nevidence is missing or low quality. In that fallback mode, render from the raw snapshot\nand record `action_card_generation_mode: snapshot_fallback`; structured cards record\n`action_card_generation_mode: structured`.\n## Manual Execution\n\n```bash\npython3 -m founder_signal doctor --config founder-signal.config.json\npython3 -m founder_signal config import founder-signal.config.json\npython3 -m founder_signal run --config founder-signal.config.json\nbash scripts/run_founder_signal_once.sh\nbash scripts/run_founder_signal_once.sh --profile draft\nbash scripts/run_founder_signal_once.sh --config founder-signal.config.json --require-action-card --require-publish-intent\n```\n\nWithout `--profile`, the runner processes all enabled profiles.\n\n## Bundled Runtime Payload\n\nThis published skill package includes the minimum local runtime payload needed to run\nfrom the installed skill directory:\n\n- `scripts/run_founder_signal_once.sh`\n- `src/founder_signal/`\n- `founder-signal.config.example.json`\n- `profiles/README.md`\n- `profiles/draft.example.json`\n\nBefore a real run, create one canonical config JSON, validate it, and import it. No\nDraft publish settings file is required; Draft public-page publication is part of the\ndefault flow and every run should be published to Draft automatically until a\nhuman-reviewable Draft public page URL exists or an explicit publish failure is\nrecorded. Public web publication outside that Draft page remains confirmation-gated.\n\n## Runtime Order\n\n1. Persist the run folder early, then load either all enabled profiles or one selected profile.\n2. For each profile, run enabled platform adapters, skipping profile exclusions and previous local candidate history before capping, then consider configured hints and verified snapshot fallbacks.\n3. Catch and record business-run failures with public-safe failure fields instead of returning before finalization.\n4. Save evidence from mirror or verified snapshot fallback when available, enforce the verified-read\n   gate, score only verified candidates, and optionally generate an Action Card.\n5. Always write `public-run-review.md` and `draft-publish-intent.json`.\n6. Always attempt automatic `draft page create -> draft page append -> draft page publish` for the public run review.\n7. Persist final artifacts with business failure and Draft publish failure represented separately, with explicit confirmation before any later public web publish outside that Draft page.\n\nEddrit search/listing and post mirror pages are the Reddit read layer. V2EX discovery providers are never the verified evidence source; verified V2EX reads use the original `https://www.v2ex.com/t/<topic_id>` topic URL or future official API reads. Browser/manual fallback remains a verified snapshot path when automated reads are blocked.\n","tags":{"latest":"0.2.14"},"stats":{"comments":0,"downloads":1025,"installsAllTime":39,"installsCurrent":3,"stars":0,"versions":35},"createdAt":1777875306683,"updatedAt":1780630290655},"latestVersion":{"version":"0.2.14","createdAt":1780630290655,"changelog":"## Founder Signal v0.2.14\n\n- Every run now generates and attempts to publish a public Draft review page, even if no evidence is found or the run fails.\n- The Draft publication handoff is now unconditional, with local artifacts and failure metadata preserved if Draft publishing fails.\n- The config import and profile management process is streamlined; setup and runtime profile handling are clarified to avoid legacy user-editable profiles.\n- Old modules for profile store, review output, and review scripts removed; codebase is more focused on main run/review/publish flow.\n- Documentation updated for the always-publish review model, revised setup flow, and cleaned up legacy details.","license":"MIT-0"},"metadata":{"setup":[],"os":null,"systems":null},"owner":{"handle":"toliuweijing","userId":"s1792my6kfgvzgtqavh11j5h0h83grgt","displayName":"Jim Liu","image":"https://avatars.githubusercontent.com/u/1712231?v=4"},"moderation":{"isSuspicious":false,"isMalwareBlocked":false,"verdict":"clean","reasonCodes":["review.llm_review"],"summary":"Review: review.llm_review","engineVersion":"v2.4.24","updatedAt":1780631594262}}