{"id":"7ebd2ab0-0c01-45bf-949a-9174a0ad2b70","entityType":"agent","slug":"clawhub-toliuweijing-founder-signal","name":"Founder Signal","canonicalUrl":"https://www.xpersona.co/agent/clawhub-toliuweijing-founder-signal","canonicalPath":"/agent/clawhub-toliuweijing-founder-signal","generatedAt":"2026-10-10T11:54:02.547Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T08:52:53.659Z","emptyReason":null},"description":"Founder Signal turns verified Reddit and V2EX evidence into a small, reviewable signal package for founders evaluating product demand and positioning across...","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.5K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s1792my6kfgvzgtqavh11j5h0h83grgt:founder-signal","sourceUrl":"https://clawhub.ai/toliuweijing/founder-signal","homepage":"https://clawhub.ai/toliuweijing/skills/founder-signal","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/toliuweijing/founder-signal","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/toliuweijing/skills/founder-signal","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":64,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Founder Signal technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T08:52:53.659Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T08:52:53.659Z","emptyReason":null},"stars":null,"forks":null,"downloads":1545,"packageName":null,"latestVersion":"0.2.14","tractionLabel":"1.5K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T08:52:53.659Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T08:52:53.659Z","lastCrawledAt":"2026-10-10T08:52:53.659Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T08:52:53.659Z","lastVerifiedAt":null,"highlights":[{"version":"0.2.14","createdAt":"2026-06-05T03:31:30.655Z","changelog":"## Founder Signal v0.2.14 - Every run now generates and attempts to publish a public Draft review page, even if no evidence is found or the run fails. - The Draft publication handoff is now unconditional, with local artifacts and failure metadata preserved if Draft publishing fails. - The config import and profile management process is streamlined; setup and runtime profile handling are clarified to avoid legacy user-editable profiles. - Old modules for profile store, review output, and review scripts removed; codebase is more focused on main run/review/publish flow. - Documentation updated for the always-publish review model, revised setup flow, and cleaned up legacy details.","fileCount":25,"zipByteSize":72356},{"version":"0.2.13","createdAt":"2026-05-29T08:42:20.584Z","changelog":"- Improved user experience by introducing explicit profile management commands: create, run, and open latest review page. - Added profile storage and management logic (new profile_store module). - Setup and run instructions updated for a simpler, profile-focused workflow. - Backward-compatible: advanced/config import commands remain available for debugging. - Normal runs now auto-repair missing canonical config imports from runnable profiles.","fileCount":29,"zipByteSize":80372},{"version":"0.2.12","createdAt":"2026-05-29T03:36:50.363Z","changelog":"- Updated version to 0.2.12. - Documentation improvements and updates in SKILL.md. - No functional or behavioral changes—this release focuses on improved documentation and clarity.","fileCount":28,"zipByteSize":73926},{"version":"0.2.11","createdAt":"2026-05-29T03:07:37.849Z","changelog":"- Updated setup instructions to use `${FOUNDER_SIGNAL_HOME:-~/.founder-signal}` as the default runtime home directory. - Clarified the configuration, validation, import, and run steps with examples using the new default path. - Improved documentation on where canonical config should reside and how to properly initialize and validate it. - No functional or interface changes; documentation update only.","fileCount":28,"zipByteSize":73740},{"version":"0.2.10","createdAt":"2026-05-29T03:06:36.230Z","changelog":"Version 0.2.10 of founder-signal includes improved runtime customization and support for site-wide Python customization via sitecustomize. - Added support for loading a sitecustomize.py at startup to allow site-wide Python customizations. - Improved and refactored runtime path handling for better flexibility and reliability. - Minor updates to run scripts and setup metadata to align with new runtime structure. - Updated documentation to reflect current setup and usage best practices.","fileCount":28,"zipByteSize":73725},{"version":"0.2.9","createdAt":"2026-05-29T02:42:24.693Z","changelog":"Version 0.2.9 introduces minor structural updates and improved reporting. - Added new module: `review_output.py` for handling review output logic. - Updated scripts and main application files to integrate review output enhancements. - Improved reporting and artifact handling in review workflows. - Minor adjustments to SKILL.md, including clarification on publish handoff and E2E output requirements.","fileCount":27,"zipByteSize":73028},{"version":"0.2.8","createdAt":"2026-05-28T23:05:34.979Z","changelog":"- Adds new public-safe \"run review\" artifact: always creates `public-run-review.md` for every run. - Draft publishing now uses `public-run-review.md` instead of `daily-review.md` when an Action Card is not present. - Updated draft publish intent: every successful run emits a Draft-ready publish intent for the run review artifact. - Refined run structure to persist and publish artifacts even if no verified evidence snapshot is present. - Expanded and clarified documentation on artifact creation and Draft publishing workflow.","fileCount":26,"zipByteSize":71736},{"version":"0.2.7","createdAt":"2026-05-28T12:31:42.403Z","changelog":"- Refined Draft publication workflow: all successful runs now perform the `draft page create -> draft page append -> draft page publish` sequence to ensure a human-reviewable Draft public page URL is always returned. - Updated SKILL.md and intent fields to clarify that no further approval is needed for Draft page publishing, but explicit confirmation is still required for web publication outside Draft. - Improved documentation for E2E output requirements and correct use of publish intent flags. - Minor code and script updates to align output and handoff processes with the new Draft workflow semantics.","fileCount":25,"zipByteSize":69139}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1792my6kfgvzgtqavh11j5h0h83grgt:founder-signal","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s1792my6kfgvzgtqavh11j5h0h83grgt:founder-signal` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/toliuweijing/founder-signal before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-toliuweijing-founder-signal/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-toliuweijing-founder-signal/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-toliuweijing-founder-signal/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-toliuweijing-founder-signal/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-toliuweijing-founder-signal/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-toliuweijing-founder-signal/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T11:54:02.544Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-toliuweijing-founder-signal/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-toliuweijing-founder-signal/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-toliuweijing-founder-signal/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-toliuweijing-founder-signal/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T08:52:53.659Z","emptyReason":null},"readme":"Skill: Founder Signal\n\nOwner: toliuweijing\n\nSummary: Founder Signal turns verified Reddit and V2EX evidence into a small, reviewable signal package for founders evaluating product demand and positioning across...\n\nTags: latest:0.2.14\n\nVersion history:\n\nv0.2.14 | 2026-06-05T03:31:30.655Z | auto\n\n## 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.\n\nv0.2.13 | 2026-05-29T08:42:20.584Z | auto\n\n- Improved user experience by introducing explicit profile management commands: create, run, and open latest review page.\n- Added profile storage and management logic (new profile_store module).\n- Setup and run instructions updated for a simpler, profile-focused workflow.\n- Backward-compatible: advanced/config import commands remain available for debugging.\n- Normal runs now auto-repair missing canonical config imports from runnable profiles.\n\nv0.2.12 | 2026-05-29T03:36:50.363Z | auto\n\n- Updated version to 0.2.12.\n- Documentation improvements and updates in SKILL.md.\n- No functional or behavioral changes—this release focuses on improved documentation and clarity.\n\nv0.2.11 | 2026-05-29T03:07:37.849Z | auto\n\n- Updated setup instructions to use `${FOUNDER_SIGNAL_HOME:-~/.founder-signal}` as the default runtime home directory.\n- Clarified the configuration, validation, import, and run steps with examples using the new default path.\n- Improved documentation on where canonical config should reside and how to properly initialize and validate it.\n- No functional or interface changes; documentation update only.\n\nv0.2.10 | 2026-05-29T03:06:36.230Z | auto\n\nVersion 0.2.10 of founder-signal includes improved runtime customization and support for site-wide Python customization via sitecustomize.\n\n- Added support for loading a sitecustomize.py at startup to allow site-wide Python customizations.\n- Improved and refactored runtime path handling for better flexibility and reliability.\n- Minor updates to run scripts and setup metadata to align with new runtime structure.\n- Updated documentation to reflect current setup and usage best practices.\n\nv0.2.9 | 2026-05-29T02:42:24.693Z | auto\n\nVersion 0.2.9 introduces minor structural updates and improved reporting.\n\n- Added new module: `review_output.py` for handling review output logic.\n- Updated scripts and main application files to integrate review output enhancements.\n- Improved reporting and artifact handling in review workflows.\n- Minor adjustments to SKILL.md, including clarification on publish handoff and E2E output requirements.\n\nv0.2.8 | 2026-05-28T23:05:34.979Z | auto\n\n- Adds new public-safe \"run review\" artifact: always creates `public-run-review.md` for every run.\n- Draft publishing now uses `public-run-review.md` instead of `daily-review.md` when an Action Card is not present.\n- Updated draft publish intent: every successful run emits a Draft-ready publish intent for the run review artifact.\n- Refined run structure to persist and publish artifacts even if no verified evidence snapshot is present.\n- Expanded and clarified documentation on artifact creation and Draft publishing workflow.\n\nv0.2.7 | 2026-05-28T12:31:42.403Z | auto\n\n- Refined Draft publication workflow: all successful runs now perform the `draft page create -> draft page append -> draft page publish` sequence to ensure a human-reviewable Draft public page URL is always returned.\n- Updated SKILL.md and intent fields to clarify that no further approval is needed for Draft page publishing, but explicit confirmation is still required for web publication outside Draft.\n- Improved documentation for E2E output requirements and correct use of publish intent flags.\n- Minor code and script updates to align output and handoff processes with the new Draft workflow semantics.\n\nv0.2.6 | 2026-05-28T12:18:09.457Z | auto\n\n- Adds runtime home support, storing runtime data under `${FOUNDER_SIGNAL_HOME:-~/.founder-signal}` instead of the skill source directory.\n- Introduces an explicit `init` command to initialize the runtime environment.\n- Updates setup instructions and paths throughout SKILL.md to reference the runtime home.\n- Internal logic updated to use new runtime path management module (`runtime_paths.py`).\n\nv0.2.5 | 2026-05-28T09:42:25.293Z | auto\n\nVersion 0.2.5\n\n- Updated version number and metadata in SKILL.md.\n- Internal code and documentation maintenance across multiple source files.\n- No user-facing feature changes or new configuration requirements.\n\nv0.2.4 | 2026-05-28T09:25:50.618Z | auto\n\nFounder Signal 0.2.4\n\n- Clarifies that agents must invoke the installed draft CLI to create or open Draft review pages when a publish intent is generated, not just report artifact existence.\n- Tightens instructions around E2E runs and agent obligations: delivering a Draft URL is required for completion.\n- Removes ambiguity about reliance on the draft-cli skill for actual publishing actions, aligning documentation with expected downstream workflow.\n- SKILL.md updated for clearer agent workflow, specifically around use of the Draft CLI and what constitutes a successful publish handoff.\n\nv0.2.3 | 2026-05-28T07:55:49.677Z | auto\n\n- Draft review-page publication flow improved: successful runs now publish to Draft review pages automatically, requiring no extra approval.\n- Public web publication (outside Draft review) still requires explicit founder confirmation.\n- Updated `draft-publish-intent.json` to clarify when confirmation is required (`requires_confirmation: false` for Draft review, `public_publish_requires_confirmation: true` for public web).\n- Clarified documentation and E2E verification playbook to reflect streamlined Draft page publishing.\n\nv0.2.2 | 2026-05-06T08:44:49.581Z | auto\n\n**Adds canonical JSON config import and validation; introduces Python entrypoint.**\n\n- Implements a canonical JSON config (`founder-signal.config.example.json`) for easier setup and import.\n- Adds config validation and import commands via Python (`python3 -m founder_signal …`), reducing the need to hand-edit profile files.\n- Introduces a Python CLI entrypoint and packaging (`src/founder_signal/setup.py`, `src/founder_signal/__main__.py`).\n- Updates documentation to reflect the new setup flow and config contract.\n- Existing shell runner remains, now supports the new config via command-line.\n\nv0.2.1 | 2026-05-06T07:23:53.273Z | auto\n\n**V2EX platform support and platformization update.**\n\n- Added first-class support for V2EX as an evidence platform alongside Reddit.\n- Introduced a platforms adapter system for multi-platform candidate discovery.\n- Updated configuration, inputs, and outputs to handle both Reddit and V2EX.\n- Expanded example profiles and documentation to cover platform fields and V2EX usage.\n- Action Cards now correctly label \"Source platform\" and \"Source URL\" for all platforms.\n- Refactored codebase to separate platform logic (Reddit, V2EX) into dedicated modules.\n\nv0.1.20 | 2026-05-05T23:41:33.623Z | auto\n\nVersion 0.1.20 introduces live-mode subreddit feed discovery alongside Eddrit-based research-mode for candidate selection.\n\n- Adds support for live candidate discovery from Reddit `/r/<subreddit>/new.json` feeds using `live_discovery_terms`\n- Retains Eddrit search/hydration as research-mode for backward compatibility\n- Distinguishes between \"live\" (fresh feed) and \"research\" (Eddrit search) discovery paths in documentation and runtime order\n- Updates candidate filtering: live mode now rejects stale, off-topic, unusable, or saturated threads before scoring\n- Enhances example profiles and documentation for clarity on live vs. research modes\n\nv0.1.19 | 2026-05-05T14:37:23.819Z | auto\n\n- Version bump to 0.1.19.\n- Internal code updates across multiple modules.\n- SKILL.md updated to reflect the new version.\n\nv0.1.18 | 2026-05-05T13:55:51.998Z | auto\n\nVersion 0.1.18\n\n- Updated version and metadata in SKILL.md.\n- Minor documentation cleanup and standardization in SKILL.md.\n- No changes to core logic or outputs.\n- Internal file structure and function organization remain the same.\n\nv0.1.17 | 2026-05-05T08:30:31.206Z | auto\n\nVersion 0.1.17\n\n- Updated version metadata to 0.1.17.\n- Internal code changes in scoring logic (see src/founder_signal/scoring.py for details).\n- No changes to functionality or usage documented in SKILL.md.\n\nv0.1.16 | 2026-05-05T08:15:22.856Z | auto\n\n- Improved handling and documentation of profile examples and evidence snapshots.\n- Updated internal code structure for candidate scoring and reporting.\n- Refined profile and output folder organization.\n- Improved README and SKILL documentation for clarity on end-to-end workflow and profile setup.\n\nv0.1.15 | 2026-05-05T04:02:28.498Z | auto\n\nVersion 0.1.15\n\n- Updated skill version metadata from 0.1.14 to 0.1.15.\n- Documentation and support files updated; no functional changes to core logic.\n\nv0.1.14 | 2026-05-05T03:38:14.391Z | auto\n\nfounder-signal 0.1.14\n\n- Update version to 0.1.14 in SKILL.md.\n- No functional or behavioral code changes included.\n\nv0.1.13 | 2026-05-05T02:56:40.916Z | auto\n\n- Added two new example product profiles: `hitrl-remote-agents.example.json` and `reusable-ai-insights.example.json`.\n- Updated and reorganized profile documentation and examples in the `profiles` directory.\n- Minor changes to scoring logic, candidate discovery, and model code to support new example profiles.\n- Incremented version to 0.1.13.\n\nv0.1.12 | 2026-05-05T02:26:58.996Z | auto\n\nVersion 0.1.12\n\n- Updated version to 0.1.12 in SKILL.md.\n- General code and documentation maintenance across multiple source files.\n- No major user-facing features or breaking changes introduced.\n\nv0.1.11 | 2026-05-04T09:49:20.209Z | auto\n\n- Adds private local candidate history (`state/past-candidates.json`) to avoid repeat candidates in future runs.\n- Supports `excluded_reddit_urls` field in profiles to suppress known old candidates from discovery and selection.\n- Discovery logic now skips candidates that match local history or exclusion lists, improving review freshness.\n- Documentation updated to explain new candidate history and exclusion features.\n- Minor code refactors and one new source file (`candidate_history.py`) to support these changes.\n\nv0.1.10 | 2026-05-04T09:28:51.433Z | auto\n\nFounder-facing Draft publishing is now confirmation-gated.\n\n- Prepares Draft publish intent with requires_confirmation: true, instead of immediately approving public publish.\n- Agent must now show the prepared draft and request founder approval before invoking downstream draft-cli publication.\n- Ensures unused or unapproved public draft pages are not created without explicit confirmation.\n- Updated docs to clarify confirmation workflow and that public boundary is always reviewable by the founder before publishing.\n\nv0.1.9 | 2026-05-04T09:14:03.659Z | auto\n\n- Draft publishing is now enabled by default; no extra user setup is required.\n- Shared Draft runtime settings and local publish configuration are removed; public Draft handoff always happens when an Action Card is generated.\n- Documentation and skill manifest updated to clarify that Draft is the default review flow and not an optional add-on.\n- Minor cleanup and consolidation of input requirements and runtime order in documentation.\n\nv0.1.8 | 2026-05-04T08:54:17.803Z | auto\n\n- Adds deterministic Reddit candidate discovery via Eddrit based on profile subreddits, keywords, and scoring terms; always runs before using configured hints or snapshots.\n- Clarifies that placeholder Reddit URLs (like POST_ID, REAL_ID, SUB, or slug) and invented content are invalid in profiles and evidence snapshots.\n- Updates E2E workflow and documentation to require real Reddit discovery and valid snapshots; placeholder and non-deterministic URLs are explicitly disallowed.\n- Improves documentation on the discovery phase, verified evidence snapshot usage, and overall runtime order.\n- Tightens enforcement of valid, verified Reddit snapshots for evidence and candidate scoring.\n\nv0.1.7 | 2026-05-04T08:40:59.719Z | auto\n\n- Adds support for browser/manual verification fallback with `verified_evidence_snapshots` when Reddit mirror fetch is blocked.\n- Documents new E2E verification flow, including steps for using snapshots and stricter requirements for public Draft publishing.\n- Updates manual execution instructions to support new flags (`--all`, `--require-action-card`, `--require-publish-intent`).\n- Clarifies primary vs. fallback evidence sources and handling for agent/browser-verified snapshots.\n- Expands SKILL.md with detailed verification and publishing instructions.\n\nv0.1.6 | 2026-05-04T08:11:28.700Z | auto\n\nVersion 0.1.6\n\n- Minor updates to documentation in SKILL.md, including formatting changes and removal of legacy instructions around Draft CLI command syntax.\n- Cleaned up advanced/legacy details in the Shared Runtime Settings section.\n- No user-facing changes to skill usage or outputs.\n- Internal and documentation updates only—functionality remains the same.\n\nv0.1.5 | 2026-05-04T07:54:11.881Z | auto\n\n- Added explicit public Draft publishing intent: writes draft-publish-intent.json instead of invoking Draft CLI commands directly.\n- Updated SKILL.md and runtime to delegate publishing to the draft-cli skill, clarifying public publishing flow and removing hardcoded CLI subcommands.\n- Shared runtime config is now optional; missing config no longer blocks runs.\n- Maintains legacy draft_publish_command as an advanced override, but promotes \"draft_publish\": \"public\" as the main user setting.\n- Output and documentation updated to describe new handoff and artifact paths for Draft publish requests.\n\nv0.1.4 | 2026-05-04T06:26:28.107Z | auto\n\nMinor runtime initialization improvements and packaging tweaks.\n\n- Now auto-creates `founder-signal.local.json.example` if missing on first run, ensuring example config is always available.\n- Clarified configuration and packaging details in docs, noting the runtime template is always bundled and recreated if absent.\n- Removed redundant packaging of the root example config; only the runtime template under `src/founder_signal` is required.\n- No end-user workflow or interface changes.\n\nv0.1.3 | 2026-05-04T06:25:33.962Z | auto\n\n- Updates the default location for the shared config example from config/ to profiles/.\n- SKILL.md now references profiles/founder-signal.local.json.example as the canonical sample config.\n- Bundled runtime payload and documentation updated for consistency with the new config location.\n- No functional logic changes—documentation and configuration path update only.\n\nv0.1.2 | 2026-05-04T06:24:45.989Z | auto\n\nFounder Signal 0.1.2 improves local config fallback and skill packaging.\n\n- Adds fallback to packaged example config under config/ if root-level config is missing.\n- Updates SKILL.md to clarify bundled payload, including config/founder-signal.local.json.example for reliable setup.\n- No changes required to runtime behavior for existing setups.\n\nv0.1.1 | 2026-05-04T06:23:02.112Z | auto\n\n- Bundled a minimal local runtime payload, including example config and profile files, to support out-of-the-box execution after installation.\n- Added scripts and Python modules under src/founder_signal/ for streamlined running and modularity.\n- Provided example configuration files and updated documentation to guide initial setup.\n- No changes to user-facing functionality; this release focuses on packaging improvements for easier adoption and local testing.\n\nv0.1.0 | 2026-05-04T06:15:06.683Z | auto\n\nFounder Signal initial release\n\n- Introduces verified Reddit evidence collection for founder product research.\n- Generates reviewable signal packages and scored review artifacts.\n- Supports multiple product profiles with configurable settings and profile selection.\n- Integrates Draft CLI for publishing generated reviews; depends on canonical readiness checks.\n- Persists run folders and outputs detailed artifacts for each run and profile, including evidence, scoring, and publish status.\n- Provides clear manual execution options and output structure.\n\nArchive index:\n\nArchive v0.2.14: 25 files, 72356 bytes\n\nFiles: founder-signal.config.example.json (1115b), profiles/draft.example.json (1855b), profiles/hitrl-remote-agents.example.json (1976b), profiles/README.md (2436b), profiles/reusable-ai-insights.example.json (1881b), scripts/run_founder_signal_once.sh (9337b), skill-card.md (2353b), SKILL.md (12775b), src/founder_signal/__init__.py (33038b), src/founder_signal/__main__.py (9422b), src/founder_signal/action_card.py (19789b), src/founder_signal/candidate_discovery.py (20553b), src/founder_signal/candidate_history.py (8335b), src/founder_signal/config.py (5961b), src/founder_signal/draft_publish.py (9891b), src/founder_signal/models.py (9043b), src/founder_signal/platforms/__init__.py (2259b), src/founder_signal/platforms/reddit.py (8485b), src/founder_signal/platforms/v2ex.py (19923b), src/founder_signal/reddit_fetcher.py (20605b), src/founder_signal/report.py (37586b), src/founder_signal/runtime_paths.py (735b), src/founder_signal/scoring.py (29458b), src/founder_signal/setup.py (16854b), _meta.json (134b)\n\nFile v0.2.14:SKILL.md\n\n---\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\nFile v0.2.14:profiles/README.md\n\n# Founder Signal Profiles\n\nThis directory stores the internal runtime profiles that Founder Signal actually runs.\nAfter install, do not start by hand-editing files here unless you are debugging the\nruntime itself.\n\nPreferred setup workflow:\n\n1. Fill one canonical config such as [`founder-signal.config.example.json`](/Users/weijingliunyu/.codex/worktrees/d515/founder-signal/founder-signal.config.example.json).\n2. Validate it:\n\n```bash\npython3 -m founder_signal doctor --config founder-signal.config.json\n```\n\n3. Import it into an internal profile:\n\n```bash\npython3 -m founder_signal config import founder-signal.config.json\n```\n\n4. Run that profile:\n\n```bash\npython3 -m founder_signal run --profile ai-code-review\n```\n\nShortcut:\n\n```bash\npython3 -m founder_signal run --config founder-signal.config.json\n```\n\nThe shell runner also supports the shortcut:\n\n```bash\nbash scripts/run_founder_signal_once.sh --config founder-signal.config.json\n```\n\nImported runtime profiles remain here under `profiles/*.json`.\n\nConfig notes:\n\n- Use `platforms.reddit.communities`, `platforms.reddit.seed_urls`, and\n  `platforms.reddit.excluded_urls` instead of legacy Reddit keys.\n- Use `platforms.v2ex.communities` plus `discovery_providers` for SOV2EX,\n  node-latest, and configured-seed topic discovery.\n- Do not use placeholder Reddit URLs or V2EX topic IDs in any field; `POST_ID`,\n  `REAL_ID`, `SUB`, `/slug/`, and `TOPIC_ID` examples are rejected.\n- If automated fetch is blocked but an agent/browser has verified the post, add a\n  `verified_evidence_snapshots` item with `platform`, `source_url`,\n  `verification_method`, `verified_by`, and the observed `text_snapshot`.\n- `draft.require_confirmation_before_public_publish` must remain `true`.\n- Imported profiles are internal runtime artifacts; the canonical JSON config is the\n  user-facing setup contract.\n\nLegacy Reddit keys (`subreddits`, `seed_reddit_urls`, and `excluded_reddit_urls`) are\nstill accepted only inside existing internal profiles for backward compatibility.\n\nFile naming notes:\n\n- `*.example.json` is for committed examples.\n- `*.json` is for active profile files.\n\nEach active profile must include:\n\n- `profile_id`\n- `enabled`\n- `product_name`\n- `product_one_liner`\n- `target_audience`\n- `keywords`\n- either legacy Reddit fields or `platforms`\n- `verified_evidence_snapshots`\n- `discovery_mode`\n- `history_ttl_days`\n- `scoring_terms`\n- `max_candidates`\n- `max_action_cards`\n\nFile v0.2.14:_meta.json\n\n{\n  \"ownerId\": \"kn756a13aw1mqmzdr452d1z6xx82qdga\",\n  \"slug\": \"founder-signal\",\n  \"version\": \"0.2.14\",\n  \"publishedAt\": 1780630290655\n}\n\nFile v0.2.14:skill-card.md\n\n## Description:\n\nFounder Signal turns verified Reddit and V2EX evidence into a small, reviewable signal package for founders evaluating product demand and positioning across one or more configured product profiles.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[toliuweijing](https://clawhub.ai/user/toliuweijing)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal founders and product teams use this skill to configure product profiles, discover Reddit and V2EX demand signals, verify candidate evidence, score findings, and generate review artifacts plus Draft review pages.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Public Draft review pages may expose configured product names, source URLs, scores, generated recommendations, and failure details because Draft publication is attempted automatically for every run.\n\nMitigation: Use the skill only when public Draft publication is acceptable, or require a version that keeps reviews local by default and asks before publishing.\n\nRisk: Research quality depends on verified Reddit or V2EX evidence and saved snapshots; missing or stale evidence can produce weak or misleading demand signals.\n\nMitigation: Review the source URLs, verification status, selected candidate, and generated Action Card before relying on recommendations.\n\n## Reference(s):\n\n- [Founder Signal on ClawHub](https://clawhub.ai/toliuweijing/skills/founder-signal)\n- [Draft CLI dependency](https://clawhub.ai/toliuweijing/draft-cli)\n- [Founder Signal Profiles](profiles/README.md)\n\n## Skill Output:\n\n**Output Type(s):** [Markdown, JSON, Files, Shell commands, Configuration, Guidance]\n\n**Output Format:** [Markdown reports and public run reviews, JSON run artifacts and configuration, local files, and shell commands]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Writes runtime artifacts under the Founder Signal home directory and attempts Draft public-page publication for each run.]\n\n## Skill Version(s):\n\n0.2.14 (source: frontmatter and server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v0.2.14:founder-signal.config.example.json\n\n{\n  \"profile_id\": \"ai-code-review\",\n  \"product_name\": \"AI Code Review Assistant\",\n  \"product_one_liner\": \"An AI agent that reviews pull requests for solo founders.\",\n  \"target_audience\": \"Solo technical founders and small engineering teams\",\n  \"keywords\": [\n    \"AI code review\",\n    \"PR review\",\n    \"developer workflow\"\n  ],\n  \"scoring_terms\": [\n    \"code review\",\n    \"pull request\",\n    \"bug\",\n    \"AI agent\",\n    \"developer workflow\"\n  ],\n  \"platforms\": {\n    \"reddit\": {\n      \"enabled\": true,\n      \"communities\": [\n        \"ChatGPT\",\n        \"SideProject\",\n        \"indiehackers\"\n      ],\n      \"seed_urls\": [],\n      \"excluded_urls\": []\n    },\n    \"v2ex\": {\n      \"enabled\": true,\n      \"communities\": [\n        \"programmer\",\n        \"create\",\n        \"qna\"\n      ],\n      \"discovery_providers\": [\n        \"sov2ex\",\n        \"node_latest\",\n        \"configured_seed_urls\"\n      ],\n      \"seed_urls\": [],\n      \"excluded_urls\": []\n    }\n  },\n  \"discovery_mode\": \"research\",\n  \"max_candidates\": 12,\n  \"draft\": {\n    \"generate_publish_intent\": true,\n    \"require_confirmation_before_public_publish\": true\n  }\n}\n\nFile v0.2.14:profiles/draft.example.json\n\n{\n  \"profile_id\": \"draft\",\n  \"enabled\": false,\n  \"product_name\": \"Draft\",\n  \"product_one_liner\": \"A local-first Markdown workspace for saving and organizing useful AI chat answers.\",\n  \"target_audience\": \"solo founders, indie hackers, AI-heavy builders, and knowledge workers who save useful ChatGPT/Claude/Gemini answers\",\n  \"keywords\": [\n    \"save ChatGPT answers\",\n    \"AI chat history\",\n    \"organize AI responses\",\n    \"markdown notes\",\n    \"local-first notes\",\n    \"knowledge management for AI\"\n  ],\n  \"platforms\": {\n    \"reddit\": {\n      \"enabled\": true,\n      \"communities\": [\n        \"ChatGPT\",\n        \"SideProject\",\n        \"indiehackers\",\n        \"ObsidianMD\",\n        \"productivity\",\n        \"PKMS\",\n        \"Notion\",\n        \"artificial\"\n      ],\n      \"seed_urls\": [],\n      \"excluded_urls\": []\n    },\n    \"v2ex\": {\n      \"enabled\": false,\n      \"communities\": [\n        \"create\",\n        \"programmer\",\n        \"qna\"\n      ],\n      \"discovery_providers\": [\n        \"sov2ex\",\n        \"site_search\",\n        \"node_latest\",\n        \"configured_seed_urls\"\n      ],\n      \"seed_urls\": [],\n      \"excluded_urls\": []\n    }\n  },\n  \"verified_evidence_snapshots\": [],\n  \"discovery_mode\": \"research\",\n  \"max_post_age_days\": 7,\n  \"preferred_post_age_hours\": 72,\n  \"min_comment_count\": 0,\n  \"max_comment_count\": 250,\n  \"history_ttl_days\": 45,\n  \"discovery_terms\": [\n    \"save chatgpt answers\",\n    \"organize ai responses\"\n  ],\n  \"live_discovery_terms\": [\n    \"save chatgpt answers\",\n    \"markdown notes\"\n  ],\n  \"research_terms\": [\n    \"local-first notes\",\n    \"ai chat history\"\n  ],\n  \"scoring_terms\": [\n    \"markdown\",\n    \"notes\",\n    \"chatgpt\",\n    \"claude\",\n    \"ai\",\n    \"knowledge\",\n    \"local-first\"\n  ],\n  \"negative_scoring_terms\": [\n    \"benchmark\",\n    \"subscription\",\n    \"model release\"\n  ],\n  \"max_candidates\": 3,\n  \"max_action_cards\": 1\n}\n\nFile v0.2.14:profiles/hitrl-remote-agents.example.json\n\n{\n  \"profile_id\": \"hitrl-remote-agents\",\n  \"enabled\": false,\n  \"product_name\": \"HITRL Remote Agents\",\n  \"product_one_liner\": \"A human-in-the-loop review layer for AI agents before they execute risky remote work.\",\n  \"target_audience\": \"founders, operators, automation builders, and engineering teams experimenting with AI agents that call tools, touch production systems, or hand work across teammates\",\n  \"keywords\": [\n    \"agent approval\",\n    \"human in the loop\",\n    \"review agent output\",\n    \"agent permissions\",\n    \"tool calls\",\n    \"agent workflow\",\n    \"supervise agents\",\n    \"AI agent handoff\"\n  ],\n  \"subreddits\": [\n    \"AutoGPT\",\n    \"LocalLLaMA\",\n    \"selfhosted\",\n    \"devops\",\n    \"n8n\",\n    \"automation\",\n    \"SaaS\",\n    \"ExperiencedDevs\",\n    \"ChatGPTCoding\"\n  ],\n  \"excluded_reddit_urls\": [],\n  \"verified_evidence_snapshots\": [],\n  \"discovery_mode\": \"live\",\n  \"discovery_terms\": [\n    \"AI agent workflow\",\n    \"agent tool calls\",\n    \"autonomous agent mistake\",\n    \"agent permissions\",\n    \"human approval\",\n    \"review agent output\",\n    \"agent automation\"\n  ],\n  \"live_discovery_terms\": [\n    \"human approval\",\n    \"review agent output\",\n    \"agent permissions\",\n    \"before execution\"\n  ],\n  \"research_terms\": [\n    \"AI agent workflow\",\n    \"agent tool calls\",\n    \"human approval\",\n    \"agent automation\"\n  ],\n  \"scoring_terms\": [\n    \"agent approval\",\n    \"human in the loop\",\n    \"review agent output\",\n    \"agent permissions\",\n    \"tool calls\",\n    \"agent workflow\",\n    \"supervise agents\",\n    \"approval step\",\n    \"agent handoff\",\n    \"before execution\"\n  ],\n  \"negative_scoring_terms\": [\n    \"agi\",\n    \"singularity\",\n    \"prediction\",\n    \"model release\",\n    \"benchmark\",\n    \"which model\",\n    \"subscription\",\n    \"token price\",\n    \"stock price\"\n  ],\n  \"max_candidates\": 10,\n  \"max_post_age_days\": 7,\n  \"preferred_post_age_hours\": 48,\n  \"min_comment_count\": 0,\n  \"max_comment_count\": 150,\n  \"history_ttl_days\": 45,\n  \"max_action_cards\": 1\n}\n\nFile v0.2.14:profiles/reusable-ai-insights.example.json\n\n{\n  \"profile_id\": \"reusable-ai-insights\",\n  \"enabled\": false,\n  \"product_name\": \"Reusable AI Insights\",\n  \"product_one_liner\": \"A workflow for saving, exporting, searching, and reusing valuable AI chat outputs.\",\n  \"target_audience\": \"AI-heavy builders, solo founders, students, researchers, and knowledge workers who lose useful ChatGPT, Claude, or Gemini answers after the conversation ends\",\n  \"keywords\": [\n    \"export conversation\",\n    \"save chat\",\n    \"backup chats\",\n    \"conversation history\",\n    \"full conversation\",\n    \"reuse answers\",\n    \"search chat history\",\n    \"download data\"\n  ],\n  \"subreddits\": [\n    \"ChatGPT\",\n    \"ObsidianMD\",\n    \"PKMS\",\n    \"productivity\",\n    \"Notion\"\n  ],\n  \"excluded_reddit_urls\": [],\n  \"verified_evidence_snapshots\": [],\n  \"discovery_mode\": \"live\",\n  \"discovery_terms\": [\n    \"ChatGPT export\",\n    \"save ChatGPT\",\n    \"conversation history\",\n    \"export conversation\",\n    \"backup chats\",\n    \"download ChatGPT data\",\n    \"search chat history\"\n  ],\n  \"live_discovery_terms\": [\n    \"save chat\",\n    \"conversation history\",\n    \"export conversation\",\n    \"search chat history\"\n  ],\n  \"research_terms\": [\n    \"ChatGPT export\",\n    \"save ChatGPT\",\n    \"download ChatGPT data\",\n    \"search chat history\"\n  ],\n  \"scoring_terms\": [\n    \"export conversation\",\n    \"save chat\",\n    \"backup chats\",\n    \"conversation history\",\n    \"full conversation\",\n    \"reuse answers\",\n    \"search chat history\",\n    \"archive prompts\",\n    \"download data\",\n    \"lost chat\"\n  ],\n  \"negative_scoring_terms\": [\n    \"jailbreak\",\n    \"roleplay\",\n    \"pretend\",\n    \"convinced gpt\",\n    \"which model\",\n    \"subscription\",\n    \"benchmark\",\n    \"grok\",\n    \"vs claude\"\n  ],\n  \"max_candidates\": 10,\n  \"max_post_age_days\": 7,\n  \"preferred_post_age_hours\": 72,\n  \"min_comment_count\": 0,\n  \"max_comment_count\": 250,\n  \"history_ttl_days\": 45,\n  \"max_action_cards\": 1\n}\n\nArchive v0.2.13: 29 files, 80372 bytes\n\nFiles: founder-signal.config.example.json (1115b), profiles/draft.example.json (1855b), profiles/hitrl-remote-agents.example.json (1976b), profiles/README.md (2538b), profiles/reusable-ai-insights.example.json (1881b), scripts/run_founder_signal_once.sh (11394b), skill-card.md (2241b), SKILL.md (13106b), src/founder_signal/__init__.py (30432b), src/founder_signal/__main__.py (27427b), src/founder_signal/action_card.py (19789b), src/founder_signal/candidate_discovery.py (20553b), src/founder_signal/candidate_history.py (8335b), src/founder_signal/config.py (5961b), src/founder_signal/draft_publish.py (9337b), src/founder_signal/models.py (9043b), src/founder_signal/platforms/__init__.py (2259b), src/founder_signal/platforms/reddit.py (8485b), src/founder_signal/platforms/v2ex.py (19923b), src/founder_signal/profile_store.py (6829b), src/founder_signal/reddit_fetcher.py (20605b), src/founder_signal/report.py (30604b), src/founder_signal/review_output.py (934b), src/founder_signal/run_review.py (10278b), src/founder_signal/runtime_paths.py (1505b), src/founder_signal/scoring.py (29458b), src/founder_signal/setup.py (20607b), src/sitecustomize.py (348b), _meta.json (134b)\n\nFile v0.2.13:SKILL.md\n\n---\nname: founder-signal\nversion: \"0.2.13\"\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 verified candidate discussions.\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 the\n  run review artifact on every successful run. Successful runs 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. Draft can still publish a public-safe run review page.\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. It should always\nprepare a public-safe run review page for founder review and should embed\n`daily-review.md` only when an Action Card exists for the selected profile.\nSuccessful test and scheduled runs should publish the generated content into a\nhuman-reviewable Draft public page automatically. Public web publication outside that\nDraft page requires explicit founder confirmation.\n\n## Setup Contract\n\nAfter installation, treat the signal profile as the primary user-facing object. The\nfounder should be able to create a profile, run it, and open the latest review page\nwithout learning about runtime profiles, config imports, or Draft publish intents. Do\nnot ask the founder to hand-edit package-local `profiles/*.json` unless they explicitly\nwant to debug the skill source. The installed ClawHub skill directory is source code;\nmutable runtime data belongs under `${FOUNDER_SIGNAL_HOME:-~/.founder-signal}` unless\n`--root-dir` is passed 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\nThis seeds a working canonical config at `${FOUNDER_SIGNAL_HOME:-~/.founder-signal}/founder-signal.config.json`.\n\n3. Save that config as a profile:\n\n```bash\npython3 -m founder_signal profile create --config ~/.founder-signal/founder-signal.config.json\n```\n\n4. Run it:\n\n```bash\npython3 -m founder_signal run draft\n```\n\n5. Re-open the latest review page:\n\n```bash\npython3 -m founder_signal latest-review draft\n```\n\nAdvanced/debug commands still exist:\n\n```bash\npython3 -m founder_signal doctor --config ~/.founder-signal/founder-signal.config.json\npython3 -m founder_signal config import ~/.founder-signal/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. Founder Signal writes an internal runtime profile under `<runtime-home>/profiles/`\nplus a normalized canonical copy under `<runtime-home>/config-imports/`, but normal\nrun UX should not depend on the founder understanding that split. If the canonical copy\nis missing later, normal runs should rebuild it from the runnable profile automatically.\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: when Founder Signal creates\n`public-run-review.md`, it also writes `draft-publish-intent.json` next to\n`public-run-review.md` and does not hardcode Draft CLI subcommands. The intent contains the\nartifact path, 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 a test run or scheduled run succeeds and 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 in the completion message. 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/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 in the completion message. 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>/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>/public-run-review.md` for every successful profile run\n- `runs/<RUN_ID>/profiles/<profile_id>/draft-publish-intent.json` when Draft\n  public-page publishing is prepared for automatic downstream `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/founder-signal.config.json\npython3 -m founder_signal config import ~/.founder-signal/founder-signal.config.json\npython3 -m founder_signal run --config ~/.founder-signal/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/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 successful runs should be published to Draft automatically until a\nhuman-reviewable Draft public page URL exists. Public web publication outside that\nDraft page remains confirmation-gated. Keep the working canonical config under the\nruntime home rather than the installed skill directory.\n\n## Runtime Order\n\n1. 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. Save evidence from mirror or verified snapshot fallback, enforce the verified-read\n   gate, score only verified candidates, and optionally generate an Action Card.\n4. Write `public-run-review.md` for founder review on every successful profile run,\n   embedding `daily-review.md` when an Action Card exists.\n5. Write a Draft public-page publish intent whenever `public-run-review.md` exists, marked\n   for automatic `draft page create -> draft page append -> draft page publish` and\n   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\nFile v0.2.13:profiles/README.md\n\n# Founder Signal Profiles\n\nThis directory stores the internal runtime profiles that Founder Signal actually runs.\nAfter install, do not start by hand-editing files here unless you are debugging the\nruntime itself.\n\nPreferred setup workflow:\n\n1. Fill one canonical config such as [`founder-signal.config.example.json`](/Users/weijingliunyu/.codex/worktrees/d515/founder-signal/founder-signal.config.example.json).\n2. Validate it:\n\n```bash\npython3 -m founder_signal doctor --config founder-signal.config.json\n```\n\n3. Import it into an internal profile:\n\n```bash\npython3 -m founder_signal config import founder-signal.config.json\n```\n\n4. Run that profile:\n\n```bash\npython3 -m founder_signal run --profile ai-code-review\n```\n\nShortcut:\n\n```bash\npython3 -m founder_signal run --config founder-signal.config.json\n```\n\nThe shell runner also supports the shortcut:\n\n```bash\nbash scripts/run_founder_signal_once.sh --config founder-signal.config.json\n```\n\nImported runtime profiles remain here under `profiles/*.json`.\n\nConfig notes:\n\n- Use `platforms.reddit.communities`, `platforms.reddit.seed_urls`, and\n  `platforms.reddit.excluded_urls` instead of legacy Reddit keys.\n- Use `platforms.v2ex.communities` plus `discovery_providers` for SOV2EX,\n  node-latest, and configured-seed topic discovery.\n- Do not use placeholder Reddit URLs or V2EX topic IDs in any field; `POST_ID`,\n  `REAL_ID`, `SUB`, `/slug/`, and `TOPIC_ID` examples are rejected.\n- If automated fetch is blocked but an agent/browser has verified the post, add a\n  `verified_evidence_snapshots` item with `platform`, `source_url`,\n  `verification_method`, `verified_by`, and the observed `text_snapshot`.\n- `draft.require_confirmation_before_public_publish` must remain `true`; it protects publication outside the Draft review surface, not the automatic Draft-hosted review page.\n- Imported profiles are internal runtime artifacts; the canonical JSON config is the\n  user-facing setup contract.\n\nLegacy Reddit keys (`subreddits`, `seed_reddit_urls`, and `excluded_reddit_urls`) are\nstill accepted only inside existing internal profiles for backward compatibility.\n\nFile naming notes:\n\n- `*.example.json` is for committed examples.\n- `*.json` is for active profile files.\n\nEach active profile must include:\n\n- `profile_id`\n- `enabled`\n- `product_name`\n- `product_one_liner`\n- `target_audience`\n- `keywords`\n- either legacy Reddit fields or `platforms`\n- `verified_evidence_snapshots`\n- `discovery_mode`\n- `history_ttl_days`\n- `scoring_terms`\n- `max_candidates`\n- `max_action_cards`\n\nFile v0.2.13:_meta.json\n\n{\n  \"ownerId\": \"kn756a13aw1mqmzdr452d1z6xx82qdga\",\n  \"slug\": \"founder-signal\",\n  \"version\": \"0.2.13\",\n  \"publishedAt\": 1780044140584\n}\n\nFile v0.2.13:skill-card.md\n\n## Description: <br>\nFounder Signal turns verified Reddit and V2EX evidence into a reviewable signal package for founders evaluating product demand and positioning across configured product profiles. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[toliuweijing](https://clawhub.ai/user/toliuweijing) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nFounders and startup operators use this skill to discover, verify, score, and review Reddit and V2EX discussions as demand and positioning signals for configured products. It can generate local run reports and a Draft review page for human review. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Successful runs can automatically publish generated research reviews to a public Draft page without a fresh approval step. <br>\nMitigation: Review profiles and verified evidence snapshots for sensitive product, customer, or internal context before running, and use a private or manual publication workflow when the inputs are not intended for public sharing. <br>\n\n\n## Reference(s): <br>\n- [Founder Signal on ClawHub](https://clawhub.ai/toliuweijing/founder-signal) <br>\n- [draft-cli dependency](https://clawhub.ai/toliuweijing/draft-cli) <br>\n- [Founder Signal Profiles](profiles/README.md) <br>\n- [Founder Signal example config](founder-signal.config.example.json) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [markdown, JSON, configuration, shell commands, guidance] <br>\n**Output Format:** [Markdown reports, JSON run artifacts, configuration files, and Draft publication commands or intents] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Writes run outputs under the Founder Signal runtime home and prepares a Draft public-page publish intent on successful runs.] <br>\n\n## Skill Version(s): <br>\n0.2.13 (source: SKILL.md frontmatter and server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v0.2.13:founder-signal.config.example.json\n\n{\n  \"profile_id\": \"ai-code-review\",\n  \"product_name\": \"AI Code Review Assistant\",\n  \"product_one_liner\": \"An AI agent that reviews pull requests for solo founders.\",\n  \"target_audience\": \"Solo technical founders and small engineering teams\",\n  \"keywords\": [\n    \"AI code review\",\n    \"PR review\",\n    \"developer workflow\"\n  ],\n  \"scoring_terms\": [\n    \"code review\",\n    \"pull request\",\n    \"bug\",\n    \"AI agent\",\n    \"developer workflow\"\n  ],\n  \"platforms\": {\n    \"reddit\": {\n      \"enabled\": true,\n      \"communities\": [\n        \"ChatGPT\",\n        \"SideProject\",\n        \"indiehackers\"\n      ],\n      \"seed_urls\": [],\n      \"excluded_urls\": []\n    },\n    \"v2ex\": {\n      \"enabled\": true,\n      \"communities\": [\n        \"programmer\",\n        \"create\",\n        \"qna\"\n      ],\n      \"discovery_providers\": [\n        \"sov2ex\",\n        \"node_latest\",\n        \"configured_seed_urls\"\n      ],\n      \"seed_urls\": [],\n      \"excluded_urls\": []\n    }\n  },\n  \"discovery_mode\": \"research\",\n  \"max_candidates\": 12,\n  \"draft\": {\n    \"generate_publish_intent\": true,\n    \"require_confirmation_before_public_publish\": true\n  }\n}\n\nFile v0.2.13:profiles/draft.example.json\n\n{\n  \"profile_id\": \"draft\",\n  \"enabled\": false,\n  \"product_name\": \"Draft\",\n  \"product_one_liner\": \"A local-first Markdown workspace for saving and organizing useful AI chat answers.\",\n  \"target_audience\": \"solo founders, indie hackers, AI-heavy builders, and knowledge workers who save useful ChatGPT/Claude/Gemini answers\",\n  \"keywords\": [\n    \"save ChatGPT answers\",\n    \"AI chat history\",\n    \"organize AI responses\",\n    \"markdown notes\",\n    \"local-first notes\",\n    \"knowledge management for AI\"\n  ],\n  \"platforms\": {\n    \"reddit\": {\n      \"enabled\": true,\n      \"communities\": [\n        \"ChatGPT\",\n        \"SideProject\",\n        \"indiehackers\",\n        \"ObsidianMD\",\n        \"productivity\",\n        \"PKMS\",\n        \"Notion\",\n        \"artificial\"\n      ],\n      \"seed_urls\": [],\n      \"excluded_urls\": []\n    },\n    \"v2ex\": {\n      \"enabled\": false,\n      \"communities\": [\n        \"create\",\n        \"programmer\",\n        \"qna\"\n      ],\n      \"discovery_providers\": [\n        \"sov2ex\",\n        \"site_search\",\n        \"node_latest\",\n        \"configured_seed_urls\"\n      ],\n      \"seed_urls\": [],\n      \"excluded_urls\": []\n    }\n  },\n  \"verified_evidence_snapshots\": [],\n  \"discovery_mode\": \"research\",\n  \"max_post_age_days\": 7,\n  \"preferred_post_age_hours\": 72,\n  \"min_comment_count\": 0,\n  \"max_comment_count\": 250,\n  \"history_ttl_days\": 45,\n  \"discovery_terms\": [\n    \"save chatgpt answers\",\n    \"organize ai responses\"\n  ],\n  \"live_discovery_terms\": [\n    \"save chatgpt answers\",\n    \"markdown notes\"\n  ],\n  \"research_terms\": [\n    \"local-first notes\",\n    \"ai chat history\"\n  ],\n  \"scoring_terms\": [\n    \"markdown\",\n    \"notes\",\n    \"chatgpt\",\n    \"claude\",\n    \"ai\",\n    \"knowledge\",\n    \"local-first\"\n  ],\n  \"negative_scoring_terms\": [\n    \"benchmark\",\n    \"subscription\",\n    \"model release\"\n  ],\n  \"max_candidates\": 3,\n  \"max_action_cards\": 1\n}\n\nFile v0.2.13:profiles/hitrl-remote-agents.example.json\n\n{\n  \"profile_id\": \"hitrl-remote-agents\",\n  \"enabled\": false,\n  \"product_name\": \"HITRL Remote Agents\",\n  \"product_one_liner\": \"A human-in-the-loop review layer for AI agents before they execute risky remote work.\",\n  \"target_audience\": \"founders, operators, automation builders, and engineering teams experimenting with AI agents that call tools, touch production systems, or hand work across teammates\",\n  \"keywords\": [\n    \"agent approval\",\n    \"human in the loop\",\n    \"review agent output\",\n    \"agent permissions\",\n    \"tool calls\",\n    \"agent workflow\",\n    \"supervise agents\",\n    \"AI agent handoff\"\n  ],\n  \"subreddits\": [\n    \"AutoGPT\",\n    \"LocalLLaMA\",\n    \"selfhosted\",\n    \"devops\",\n    \"n8n\",\n    \"automation\",\n    \"SaaS\",\n    \"ExperiencedDevs\",\n    \"ChatGPTCoding\"\n  ],\n  \"excluded_reddit_urls\": [],\n  \"verified_evidence_snapshots\": [],\n  \"discovery_mode\": \"live\",\n  \"discovery_terms\": [\n    \"AI agent workflow\",\n    \"agent tool calls\",\n    \"autonomous agent mistake\",\n    \"agent permissions\",\n    \"human approval\",\n    \"review agent output\",\n    \"agent automation\"\n  ],\n  \"live_discovery_terms\": [\n    \"human approval\",\n    \"review agent output\",\n    \"agent permissions\",\n    \"before execution\"\n  ],\n  \"research_terms\": [\n    \"AI agent workflow\",\n    \"agent tool calls\",\n    \"human approval\",\n    \"agent automation\"\n  ],\n  \"scoring_terms\": [\n    \"agent approval\",\n    \"human in the loop\",\n    \"review agent output\",\n    \"agent permissions\",\n    \"tool calls\",\n    \"agent workflow\",\n    \"supervise agents\",\n    \"approval step\",\n    \"agent handoff\",\n    \"before execution\"\n  ],\n  \"negative_scoring_terms\": [\n    \"agi\",\n    \"singularity\",\n    \"prediction\",\n    \"model release\",\n    \"benchmark\",\n    \"which model\",\n    \"subscription\",\n    \"token price\",\n    \"stock price\"\n  ],\n  \"max_candidates\": 10,\n  \"max_post_age_days\": 7,\n  \"preferred_post_age_hours\": 48,\n  \"min_comment_count\": 0,\n  \"max_comment_count\": 150,\n  \"history_ttl_days\": 45,\n  \"max_action_cards\": 1\n}\n\nFile v0.2.13:profiles/reusable-ai-insights.example.json\n\n{\n  \"profile_id\": \"reusable-ai-insights\",\n  \"enabled\": false,\n  \"product_name\": \"Reusable AI Insights\",\n  \"product_one_liner\": \"A workflow for saving, exporting, searching, and reusing valuable AI chat outputs.\",\n  \"target_audience\": \"AI-heavy builders, solo founders, students, researchers, and knowledge workers who lose useful ChatGPT, Claude, or Gemini answers after the conversation ends\",\n  \"keywords\": [\n    \"export conversation\",\n    \"save chat\",\n    \"backup chats\",\n    \"conversation history\",\n    \"full conversation\",\n    \"reuse answers\",\n    \"search chat history\",\n    \"download data\"\n  ],\n  \"subreddits\": [\n    \"ChatGPT\",\n    \"ObsidianMD\",\n    \"PKMS\",\n    \"productivity\",\n    \"Notion\"\n  ],\n  \"excluded_reddit_urls\": [],\n  \"verified_evidence_snapshots\": [],\n  \"discovery_mode\": \"live\",\n  \"discovery_terms\": [\n    \"ChatGPT export\",\n    \"save ChatGPT\",\n    \"conversation history\",\n    \"export conversation\",\n    \"backup chats\",\n    \"download ChatGPT data\",\n    \"search chat history\"\n  ],\n  \"live_discovery_terms\": [\n    \"save chat\",\n    \"conversation history\",\n    \"export conversation\",\n    \"search chat history\"\n  ],\n  \"research_terms\": [\n    \"ChatGPT export\",\n    \"save ChatGPT\",\n    \"download ChatGPT data\",\n    \"search chat history\"\n  ],\n  \"scoring_terms\": [\n    \"export conversation\",\n    \"save chat\",\n    \"backup chats\",\n    \"conversation history\",\n    \"full conversation\",\n    \"reuse answers\",\n    \"search chat history\",\n    \"archive prompts\",\n    \"download data\",\n    \"lost chat\"\n  ],\n  \"negative_scoring_terms\": [\n    \"jailbreak\",\n    \"roleplay\",\n    \"pretend\",\n    \"convinced gpt\",\n    \"which model\",\n    \"subscription\",\n    \"benchmark\",\n    \"grok\",\n    \"vs claude\"\n  ],\n  \"max_candidates\": 10,\n  \"max_post_age_days\": 7,\n  \"preferred_post_age_hours\": 72,\n  \"min_comment_count\": 0,\n  \"max_comment_count\": 250,\n  \"history_ttl_days\": 45,\n  \"max_action_cards\": 1\n}\n\nArchive v0.2.12: 28 files, 73926 bytes\n\nFiles: founder-signal.config.example.json (1115b), profiles/draft.example.json (1855b), profiles/hitrl-remote-agents.example.json (1976b), profiles/README.md (2538b), profiles/reusable-ai-insights.example.json (1881b), scripts/run_founder_signal_once.sh (11394b), skill-card.md (2491b), SKILL.md (12793b), src/founder_signal/__init__.py (30068b), src/founder_signal/__main__.py (8161b), src/founder_signal/action_card.py (19789b), src/founder_signal/candidate_discovery.py (20553b), src/founder_signal/candidate_history.py (8335b), src/founder_signal/config.py (5961b), src/founder_signal/draft_publish.py (9337b), src/founder_signal/models.py (9043b), src/founder_signal/platforms/__init__.py (2259b), src/founder_signal/platforms/reddit.py (8485b), src/founder_signal/platforms/v2ex.py (19923b), src/founder_signal/reddit_fetcher.py (20605b), src/founder_signal/report.py (30604b), src/founder_signal/review_output.py (934b), src/founder_signal/run_review.py (7609b), src/founder_signal/runtime_paths.py (1128b), src/founder_signal/scoring.py (29458b), src/founder_signal/setup.py (16896b), src/sitecustomize.py (348b), _meta.json (134b)\n\nFile v0.2.12:SKILL.md\n\n---\nname: founder-signal\nversion: \"0.2.12\"\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 verified candidate discussions.\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 the\n  run review artifact on every successful run. Successful runs 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. Draft can still publish a public-safe run review page.\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. It should always\nprepare a public-safe run review page for founder review and should embed\n`daily-review.md` only when an Action Card exists for the selected profile.\nSuccessful test and scheduled runs should publish the generated content into a\nhuman-reviewable Draft public page automatically. Public web publication outside that\nDraft page requires explicit 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\nThis seeds a working canonical config at `${FOUNDER_SIGNAL_HOME:-~/.founder-signal}/founder-signal.config.json`.\n\n3. Validate that runtime-home config:\n\n```bash\npython3 -m founder_signal doctor --config ~/.founder-signal/founder-signal.config.json\n```\n\n4. Import it:\n\n```bash\npython3 -m founder_signal config import ~/.founder-signal/founder-signal.config.json\n```\n\n5. Run it:\n\n```bash\npython3 -m founder_signal run --config ~/.founder-signal/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/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: when Founder Signal creates\n`public-run-review.md`, it also writes `draft-publish-intent.json` next to\n`public-run-review.md` and does not hardcode Draft CLI subcommands. The intent contains the\nartifact path, 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 a test run or scheduled run succeeds and 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 in the completion message. 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/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 in the completion message. 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>/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>/public-run-review.md` for every successful profile run\n- `runs/<RUN_ID>/profiles/<profile_id>/draft-publish-intent.json` when Draft\n  public-page publishing is prepared for automatic downstream `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/founder-signal.config.json\npython3 -m founder_signal config import ~/.founder-signal/founder-signal.config.json\npython3 -m founder_signal run --config ~/.founder-signal/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/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 successful runs should be published to Draft automatically until a\nhuman-reviewable Draft public page URL exists. Public web publication outside that\nDraft page remains confirmation-gated. Keep the working canonical config under the\nruntime home rather than the installed skill directory.\n\n## Runtime Order\n\n1. 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. Save evidence from mirror or verified snapshot fallback, enforce the verified-read\n   gate, score only verified candidates, and optionally generate an Action Card.\n4. Write `public-run-review.md` for founder review on every successful profile run,\n   embedding `daily-review.md` when an Action Card exists.\n5. Write a Draft public-page publish intent whenever `public-run-review.md` exists, marked\n   for automatic `draft page create -> draft page append -> draft page publish` and\n   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\nFile v0.2.12:profiles/README.md\n\n# Founder Signal Profiles\n\nThis directory stores the internal runtime profiles that Founder Signal actually runs.\nAfter install, do not start by hand-editing files here unless you are debugging the\nruntime itself.\n\nPreferred setup workflow:\n\n1. Fill one canonical config such as [`founder-signal.config.example.json`](/Users/weijingliunyu/.codex/worktrees/d515/founder-signal/founder-signal.config.example.json).\n2. Validate it:\n\n```bash\npython3 -m founder_signal doctor --config founder-signal.config.json\n```\n\n3. Import it into an internal profile:\n\n```bash\npython3 -m founder_signal config import founder-signal.config.json\n```\n\n4. Run that profile:\n\n```bash\npython3 -m founder_signal run --profile ai-code-review\n```\n\nShortcut:\n\n```bash\npython3 -m founder_signal run --config founder-signal.config.json\n```\n\nThe shell runner also supports the shortcut:\n\n```bash\nbash scripts/run_founder_signal_once.sh --config founder-signal.config.json\n```\n\nImported runtime profiles remain here under `profiles/*.json`.\n\nConfig notes:\n\n- Use `platforms.reddit.communities`, `platforms.reddit.seed_urls`, and\n  `platforms.reddit.excluded_urls` instead of legacy Reddit keys.\n- Use `platforms.v2ex.communities` plus `discovery_providers` for SOV2EX,\n  node-latest, and configured-seed topic discovery.\n- Do not use placeholder Reddit URLs or V2EX topic IDs in any field; `POST_ID`,\n  `REAL_ID`, `SUB`, `/slug/`, and `TOPIC_ID` examples are rejected.\n- If automated fetch is blocked but an agent/browser has verified the post, add a\n  `verified_evidence_snapshots` item with `platform`, `source_url`,\n  `verification_method`, `verified_by`, and the observed `text_snapshot`.\n- `draft.require_confirmation_before_public_publish` must remain `true`; it protects publication outside the Draft review surface, not the automatic Draft-hosted review page.\n- Imported profiles are internal runtime artifacts; the canonical JSON config is the\n  user-facing setup contract.\n\nLegacy Reddit keys (`subreddits`, `seed_reddit_urls`, and `excluded_reddit_urls`) are\nstill accepted only inside existing internal profiles for backward compatibility.\n\nFile naming notes:\n\n- `*.example.json` is for committed examples.\n- `*.json` is for active profile files.\n\nEach active profile must include:\n\n- `profile_id`\n- `enabled`\n- `product_name`\n- `product_one_liner`\n- `target_audience`\n- `keywords`\n- either legacy Reddit fields or `platforms`\n- `verified_evidence_snapshots`\n- `discovery_mode`\n- `history_ttl_days`\n- `scoring_terms`\n- `max_candidates`\n- `max_action_cards`\n\nFile v0.2.12:_meta.json\n\n{\n  \"ownerId\": \"kn756a13aw1mqmzdr452d1z6xx82qdga\",\n  \"slug\": \"founder-signal\",\n  \"version\": \"0.2.12\",\n  \"publishedAt\": 1780025810363\n}\n\nFile v0.2.12:skill-card.md\n\n## Description: <br>\nFounder Signal turns verified Reddit and V2EX evidence into a small, reviewable signal package for founders evaluating product demand and positioning across one or more configured product profiles. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[toliuweijing](https://clawhub.ai/user/toliuweijing) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nFounders, product operators, and builder teams use this skill to convert verified Reddit and V2EX discussions into scored demand signals, founder review reports, and Draft-hosted review pages for product positioning decisions. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Successful runs can automatically create and publish a public Draft review page. <br>\nMitigation: Review the Founder Signal config and generated public-run-review.md for sensitive product details, source excerpts, URLs, and private notes before running, or disable or modify the auto-publish flow when a confirmation step is required. <br>\nRisk: The skill's security verdict is suspicious because the public Draft publishing step does not ask for a fresh confirmation. <br>\nMitigation: Treat evidence.security as authoritative during release review and require an operator decision on whether automatic Draft publication is acceptable for the deployment context. <br>\n\n\n## Reference(s): <br>\n- [Founder Signal on ClawHub](https://clawhub.ai/toliuweijing/founder-signal) <br>\n- [draft-cli dependency on ClawHub](https://clawhub.ai/toliuweijing/draft-cli) <br>\n- [Founder Signal Profiles](profiles/README.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance] <br>\n**Output Format:** [JSON, Markdown reports, shell command guidance, and Draft public page URLs] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Writes runtime run folders containing reports, candidate JSON, evidence snapshots, action cards when available, public run reviews, and Draft publish intent records.] <br>\n\n## Skill Version(s): <br>\n0.2.12 (source: frontmatter and server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v0.2.12:founder-signal.config.example.json\n\n{\n  \"profile_id\": \"ai-code-review\",\n  \"product_name\": \"AI Code Review Assistant\",\n  \"product_one_liner\": \"An AI agent that reviews pull requests for solo founders.\",\n  \"target_audience\": \"Solo technical founders and small engineering teams\",\n  \"keywords\": [\n    \"AI code review\",\n    \"PR review\",\n    \"developer workflow\"\n  ],\n  \"scoring_terms\": [\n    \"code review\",\n    \"pull request\",\n    \"bug\",\n    \"AI agent\",\n    \"developer workflow\"\n  ],\n  \"platforms\": {\n    \"reddit\": {\n      \"enabled\": true,\n      \"communities\": [\n        \"ChatGPT\",\n        \"SideProject\",\n        \"indiehackers\"\n      ],\n      \"seed_urls\": [],\n      \"excluded_urls\": []\n    },\n    \"v2ex\": {\n      \"enabled\": true,\n      \"communities\": [\n        \"programmer\",\n        \"create\",\n        \"qna\"\n      ],\n      \"discovery_providers\": [\n        \"sov2ex\",\n        \"node_latest\",\n        \"configured_seed_urls\"\n      ],\n      \"seed_urls\": [],\n      \"excluded_urls\": []\n    }\n  },\n  \"discovery_mode\": \"research\",\n  \"max_candidates\": 12,\n  \"draft\": {\n    \"generate_publish_intent\": true,\n    \"require_confirmation_before_public_publish\": true\n  }\n}\n\nFile v0.2.12:profiles/draft.example.json\n\n{\n  \"profile_id\": \"draft\",\n  \"enabled\": false,\n  \"product_name\": \"Draft\",\n  \"product_one_liner\": \"A local-first Markdown workspace for saving and organizing useful AI chat answers.\",\n  \"target_audience\": \"solo founders, indie hackers, AI-heavy builders, and knowledge workers who save useful ChatGPT/Claude/Gemini answers\",\n  \"keywords\": [\n    \"save ChatGPT answers\",\n    \"AI chat history\",\n    \"organize AI responses\",\n    \"markdown notes\",\n    \"local-first notes\",\n    \"knowledge management for AI\"\n  ],\n  \"platforms\": {\n    \"reddit\": {\n      \"enabled\": true,\n      \"communities\": [\n        \"ChatGPT\",\n        \"SideProject\",\n        \"indiehackers\",\n        \"ObsidianMD\",\n        \"productivity\",\n        \"PKMS\",\n        \"Notion\",\n        \"artificial\"\n      ],\n      \"seed_urls\": [],\n      \"excluded_urls\": []\n    },\n    \"v2ex\": {\n      \"enabled\": false,\n      \"communities\": [\n        \"create\",\n        \"programmer\",\n        \"qna\"\n      ],\n      \"discovery_providers\": [\n        \"sov2ex\",\n        \"site_search\",\n        \"node_latest\",\n        \"configured_seed_urls\"\n      ],\n      \"seed_urls\": [],\n      \"excluded_urls\": []\n    }\n  },\n  \"verified_evidence_snapshots\": [],\n  \"discovery_mode\": \"research\",\n  \"max_post_age_days\": 7,\n  \"preferred_post_age_hours\": 72,\n  \"min_comment_count\": 0,\n  \"max_comment_count\": 250,\n  \"history_ttl_days\": 45,\n  \"discovery_terms\": [\n    \"save chatgpt answers\",\n    \"organize ai responses\"\n  ],\n  \"live_discovery_terms\": [\n    \"save chatgpt answers\",\n    \"markdown notes\"\n  ],\n  \"research_terms\": [\n    \"local-first notes\",\n    \"ai chat history\"\n  ],\n  \"scoring_terms\": [\n    \"markdown\",\n    \"notes\",\n    \"chatgpt\",\n    \"claude\",\n    \"ai\",\n    \"knowledge\",\n    \"local-first\"\n  ],\n  \"negative_scoring_terms\": [\n    \"benchmark\",\n    \"subscription\",\n    \"model release\"\n  ],\n  \"max_candidates\": 3,\n  \"max_action_cards\": 1\n}\n\nFile v0.2.12:profiles/hitrl-remote-agents.example.json\n\n{\n  \"profile_id\": \"hitrl-remote-agents\",\n  \"enabled\": false,\n  \"product_name\": \"HITRL Remote Agents\",\n  \"product_one_liner\": \"A human-in-the-loop review layer for AI agents before they execute risky remote work.\",\n  \"target_audience\": \"founders, operators, automation builders, and engineering teams experimenting with AI agents that call tools, touch production systems, or hand work across teammates\",\n  \"keywords\": [\n    \"agent approval\",\n    \"human in the loop\",\n    \"review agent output\",\n    \"agent permissions\",\n    \"tool calls\",\n    \"agent workflow\",\n    \"supervise agents\",\n    \"AI agent handoff\"\n  ],\n  \"subreddits\": [\n    \"AutoGPT\",\n    \"LocalLLaMA\",\n    \"selfhosted\",\n    \"devops\",\n    \"n8n\",\n    \"automation\",\n    \"SaaS\",\n    \"ExperiencedDevs\",\n    \"ChatGPTCoding\"\n  ],\n  \"excluded_reddit_urls\": [],\n  \"verified_evidence_snapshots\": [],\n  \"discovery_mode\": \"live\",\n  \"discovery_terms\": [\n    \"AI agent workflow\",\n    \"agent tool calls\",\n    \"autonomous agent mistake\",\n    \"agent permissions\",\n    \"human approval\",\n    \"review agent output\",\n    \"agent automation\"\n  ],\n  \"live_discovery_terms\": [\n    \"human approval\",\n    \"review agent output\",\n    \"agent permissions\",\n    \"before execution\"\n  ],\n  \"research_terms\": [\n    \"AI agent workflow\",\n    \"agent tool calls\",\n    \"human approval\",\n    \"agent automation\"\n  ],\n  \"scoring_terms\": [\n    \"agent approval\",\n    \"human in the loop\",\n    \"review agent output\",\n    \"agent permissions\",\n    \"tool calls\",\n    \"agent workflow\",\n    \"supervise agents\",\n    \"approval step\",\n    \"agent handoff\",\n    \"before execution\"\n  ],\n  \"negative_scoring_terms\": [\n    \"agi\",\n    \"singularity\",\n    \"prediction\",\n    \"model release\",\n    \"benchmark\",\n    \"which model\",\n    \"subscription\",\n    \"token price\",\n    \"stock price\"\n  ],\n  \"max_candidates\": 10,\n  \"max_post_age_days\": 7,\n  \"preferred_post_age_hours\": 48,\n  \"min_comment_count\": 0,\n  \"max_comment_count\": 150,\n  \"history_ttl_days\": 45,\n  \"max_action_cards\": 1\n}\n\nFile v0.2.12:profiles/reusable-ai-insights.example.json\n\n{\n  \"profile_id\": \"reusable-ai-insights\",\n  \"enabled\": false,\n  \"product_name\": \"Reusable AI Insights\",\n  \"product_one_liner\": \"A workflow for saving, exporting, searching, and reusing valuable AI chat outputs.\",\n  \"target_audience\": \"AI-heavy builders, solo founders, students, researchers, and knowledge workers who lose useful ChatGPT, Claude, or Gemini answers after the conversation ends\",\n  \"keywords\": [\n    \"export conversation\",\n    \"save chat\",\n    \"backup chats\",\n    \"conversation history\",\n    \"full conversation\",\n    \"reuse answers\",\n    \"search chat history\",\n    \"download data\"\n  ],\n  \"subreddits\": [\n    \"ChatGPT\",\n    \"ObsidianMD\",\n    \"PKMS\",\n    \"productivity\",\n    \"Notion\"\n  ],\n  \"excluded_reddit_urls\": [],\n  \"verified_evidence_snapshots\": [],\n  \"discovery_mode\": \"live\",\n  \"discovery_terms\": [\n    \"ChatGPT export\",\n    \"save ChatGPT\",\n    \"conversation history\",\n    \"export conversation\",\n    \"backup chats\",\n    \"download ChatGPT data\",\n    \"search chat history\"\n  ],\n  \"live_discovery_terms\": [\n    \"save chat\",\n    \"conversation history\",\n    \"export conversation\",\n    \"search chat history\"\n  ],\n  \"research_terms\": [\n    \"ChatGPT export\",\n    \"save ChatGPT\",\n    \"download ChatGPT data\",\n    \"search chat history\"\n  ],\n  \"scoring_terms\": [\n    \"export conversation\",\n    \"save chat\",\n    \"backup chats\",\n    \"conversation history\",\n    \"full conversation\",\n    \"reuse answers\",\n    \"search chat history\",\n    \"archive prompts\",\n    \"download data\",\n    \"lost chat\"\n  ],\n  \"negative_scoring_terms\": [\n    \"jailbreak\",\n    \"roleplay\",\n    \"pretend\",\n    \"convinced gpt\",\n    \"which model\",\n    \"subscription\",\n    \"benchmark\",\n    \"grok\",\n    \"vs claude\"\n  ],\n  \"max_candidates\": 10,\n  \"max_post_age_days\": 7,\n  \"preferred_post_age_hours\": 72,\n  \"min_comment_count\": 0,\n  \"max_comment_count\": 250,\n  \"history_ttl_days\": 45,\n  \"max_action_cards\": 1\n}\n\nArchive v0.2.11: 28 files, 73740 bytes\n\nFiles: founder-signal.config.example.json (1115b), profiles/draft.example.json (1855b), profiles/hitrl-remote-agents.example.json (1976b), profiles/README.md (2538b), profiles/reusable-ai-insights.example.json (1881b), scripts/run_founder_signal_once.sh (11394b), skill-card.md (2412b), SKILL.md (12793b), src/founder_signal/__init__.py (29989b), src/founder_signal/__main__.py (8161b), src/founder_signal/action_card.py (19789b), src/founder_signal/candidate_discovery.py (20553b), src/founder_signal/candidate_history.py (8335b), src/founder_signal/config.py (5961b), src/founder_signal/draft_publish.py (9337b), src/founder_signal/models.py (9043b), src/founder_signal/platforms/__init__.py (2259b), src/founder_signal/platforms/reddit.py (8485b), src/founder_signal/platforms/v2ex.py (19923b), src/founder_signal/reddit_fetcher.py (20605b), src/founder_signal/report.py (30604b), src/founder_signal/review_output.py (934b), src/founder_signal/run_review.py (7609b), src/founder_signal/runtime_paths.py (891b), src/founder_signal/scoring.py (29458b), src/founder_signal/setup.py (16896b), src/sitecustomize.py (348b), _meta.json (134b)\n\nFile v0.2.11:SKILL.md\n\n---\nname: founder-signal\nversion: \"0.2.11\"\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 verified candidate discussions.\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 the\n  run review artifact on every successful run. Successful runs 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. Draft can still publish a public-safe run review page.\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. It should always\nprepare a public-safe run review page for founder review and should embed\n`daily-review.md` only when an Action Card exists for the selected profile.\nSuccessful test and scheduled runs should publish the generated content into a\nhuman-reviewable Draft public page automatically. Public web publication outside that\nDraft page requires explicit 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\nThis seeds a working canonical config at `${FOUNDER_SIGNAL_HOME:-~/.founder-signal}/founder-signal.config.json`.\n\n3. Validate that runtime-home config:\n\n```bash\npython3 -m founder_signal doctor --config ~/.founder-signal/founder-signal.config.json\n```\n\n4. Import it:\n\n```bash\npython3 -m founder_signal config import ~/.founder-signal/founder-signal.config.json\n```\n\n5. Run it:\n\n```bash\npython3 -m founder_signal run --config ~/.founder-signal/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/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: when Founder Signal creates\n`public-run-review.md`, it also writes `draft-publish-intent.json` next to\n`public-run-review.md` and does not hardcode Draft CLI subcommands. The intent contains the\nartifact path, 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 a test run or scheduled run succeeds and 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 in the completion message. 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/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 in the completion message. 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>/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>/public-run-review.md` for every successful profile run\n- `runs/<RUN_ID>/profiles/<profile_id>/draft-publish-intent.json` when Draft\n  public-page publishing is prepared for automatic downstream `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/founder-signal.config.json\npython3 -m founder_signal config import ~/.founder-signal/founder-signal.config.json\npython3 -m founder_signal run --config ~/.founder-signal/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/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 successful runs should be published to Draft automatically until a\nhuman-reviewable Draft public page URL exists. Public web publication outside that\nDraft page remains confirmation-gated. Keep the working canonical config under the\nruntime home rather than the installed skill directory.\n\n## Runtime Order\n\n1. 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. Save evidence from mirror or verified snapshot fallback, enforce the verified-read\n   gate, score only verified candidates, and optionally generate an Action Card.\n4. Write `public-run-review.md` for founder review on every successful profile run,\n   embedding `daily-review.md` when an Action Card exists.\n5. Write a Draft public-page publish intent whenever `public-run-review.md` exists, marked\n   for automatic `draft page create -> draft page append -> draft page publish` and\n   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\nFile v0.2.11:profiles/README.md\n\n# Founder Signal Profiles\n\nThis directory stores the internal runtime profiles that Founder Signal actually runs.\nAfter install, do not start by hand-editing files here unless you are debugging the\nruntime itself.\n\nPreferred setup workflow:\n\n1. Fill one canonical config such as [`founder-signal.config.example.json`](/Users/weijingliunyu/.codex/worktrees/d515/founder-signal/founder-signal.config.example.json).\n2. Validate it:\n\n```bash\npython3 -m founder_signal doctor --config founder-signal.config.json\n```\n\n3. Import it into an internal profile:\n\n```bash\npython3 -m founder_signal config import founder-signal.config.json\n```\n\n4. Run that profile:\n\n```bash\npython3 -m founder_signal run --profile ai-code-review\n```\n\nShortcut:\n\n```bash\npython3 -m founder_signal run --config founder-signal.config.json\n```\n\nThe shell runner also supports the shortcut:\n\n```bash\nbash scripts/run_founder_signal_once.sh --config founder-signal.config.json\n```\n\nImported runtime profiles remain here under `profiles/*.json`.\n\nConfig notes:\n\n- Use `platforms.reddit.communities`, `platforms.reddit.seed_urls`, and\n  `platforms.reddit.excluded_urls` instead of legacy Reddit keys.\n- Use `platforms.v2ex.communities` plus `discovery_providers` for SOV2EX,\n  node-latest, and configured-seed topic discovery.\n- Do not use placeholder Reddit URLs or V2EX topic IDs in any field; `POST_ID`,\n  `REAL_ID`, `SUB`, `/slug/`, and `TOPIC_ID` examples are rejected.\n- If automated fetch is blocked but an agent/browser has verified the post, add a\n  `verified_evidence_snapshots` item with `platform`, `source_url`,\n  `verification_method`, `verified_by`, and the observed `text_snapshot`.\n- `draft.require_confirmation_before_public_publish` must remain `true`; it protects publication outside the Draft review surface, not the automatic Draft-hosted review page.\n- Imported profiles are internal runtime artifacts; the canonical JSON config is the\n  user-facing setup contract.\n\nLegacy Reddit keys (`subreddits`, `seed_reddit_urls`, and `excluded_reddit_urls`) are\nstill accepted only inside existing internal profiles for backward compatibility.\n\nFile naming notes:\n\n- `*.example.json` is for committed examples.\n- `*.json` is for active profile files.\n\nEach active profile must include:\n\n- `profile_id`\n- `enabled`\n- `product_name`\n- `product_one_liner`\n- `target_audience`\n- `keywords`\n- either legacy Reddit fields or `platforms`\n- `verified_evidence_snapshots`\n- `discovery_mode`\n- `history_ttl_days`\n- `scoring_terms`\n- `max_candidates`\n- `max_action_cards`\n\nFile v0.2.11:_meta.json\n\n{\n  \"ownerId\": \"kn756a13aw1mqmzdr452d1z6xx82qdga\",\n  \"slug\": \"founder-signal\",\n  \"version\": \"0.2.11\",\n  \"publishedAt\": 1780024057849\n}\n\nFile v0.2.11:skill-card.md\n\n## Description: <br>\nFounder Signal turns verified Reddit and V2EX evidence into a small, reviewable signal package for founders evaluating product demand and positioning across one or more configured product profiles. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[toliuweijing](https://clawhub.ai/user/toliuweijing) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal founders and product operators use this skill to gather and score verified Reddit and V2EX discussions, generate founder review artifacts, and prepare a Draft review page for configured product profiles. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Successful runs can create a publicly reachable Draft review page without per-run approval. <br>\nMitigation: Install and run only when public Draft review publication is acceptable; require a separate approval boundary for publication outside the Draft page. <br>\nRisk: Configs, verified evidence snapshots, or generated reviews may contain confidential product strategy, private founder notes, proprietary research, or sensitive source text. <br>\nMitigation: Keep sensitive information out of configs and verified evidence unless separate controls prevent public publication. <br>\n\n\n## Reference(s): <br>\n- [Founder Signal ClawHub listing](https://clawhub.ai/toliuweijing/founder-signal) <br>\n- [draft-cli dependency](https://clawhub.ai/toliuweijing/draft-cli) <br>\n- [Founder Signal profile setup guide](artifact/profiles/README.md) <br>\n- [Founder Signal example configuration](artifact/founder-signal.config.example.json) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Markdown, JSON, Files, Shell commands, Configuration, Guidance] <br>\n**Output Format:** [Markdown and JSON files with shell command guidance] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Creates local run artifacts and can prepare or publish a public Draft review page URL for human review.] <br>\n\n## Skill Version(s): <br>\n0.2.11 (source: frontmatter and server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v0.2.11:founder-signal.config.example.json\n\n{\n  \"profile_id\": \"ai-code-review\",\n  \"product_name\": \"AI Code Review Assistant\",\n  \"product_one_liner\": \"An AI agent that reviews pull requests for solo founders.\",\n  \"target_audience\": \"Solo technical founders and small engineering teams\",\n  \"keywords\": [\n    \"AI code review\",\n    \"PR review\",\n    \"developer workflow\"\n  ],\n  \"scoring_terms\": [\n    \"code review\",\n    \"pull request\",\n    \"bug\",\n    \"AI agent\",\n    \"developer workflow\"\n  ],\n  \"platforms\": {\n    \"reddit\": {\n      \"enabled\": true,\n      \"communities\": [\n        \"ChatGPT\",\n        \"SideProject\",\n        \"indiehackers\"\n      ],\n      \"seed_urls\": [],\n      \"excluded_urls\": []\n    },\n    \"v2ex\": {\n      \"enabled\": true,\n      \"communities\": [\n        \"programmer\",\n        \"create\",\n        \"qna\"\n      ],\n      \"discovery_providers\": [\n        \"sov2ex\",\n        \"node_latest\",\n        \"configured_seed_urls\"\n      ],\n      \"seed_urls\": [],\n      \"excluded_urls\": []\n    }\n  },\n  \"discovery_mode\": \"research\",\n  \"max_candidates\": 12,\n  \"draft\": {\n    \"generate_publish_intent\": true,\n    \"require_confirmation_before_public_publish\": true\n  }\n}\n\nFile v0.2.11:profiles/draft.example.json\n\n{\n  \"profile_id\": \"draft\",\n  \"enabled\": false,\n  \"product_name\": \"Draft\",\n  \"product_one_liner\": \"A local-first Markdown workspace for saving and organizing useful AI chat answers.\",\n  \"target_audience\": \"solo founders, indie hackers, AI-heavy builders, and knowledge workers who save useful ChatGPT/Claude/Gemini answers\",\n  \"keywords\": [\n    \"save ChatGPT answers\",\n    \"AI chat history\",\n    \"organize AI responses\",\n    \"markdown notes\",\n    \"local-first notes\",\n    \"knowledge management for AI\"\n  ],\n  \"platforms\": {\n    \"reddit\": {\n      \"enabled\": true,\n      \"communities\": [\n        \"ChatGPT\",\n        \"SideProject\",\n        \"indiehackers\",\n        \"ObsidianMD\",\n        \"productivity\",\n        \"PKMS\",\n        \"Notion\",\n        \"artificial\"\n      ],\n      \"seed_urls\": [],\n      \"excluded_urls\": []\n    },\n    \"v2ex\": {\n      \"enabled\": false,\n      \"communities\": [\n        \"create\",\n        \"programmer\",\n        \"qna\"\n      ],\n      \"discovery_providers\": [\n        \"sov2ex\",\n        \"site_search\",\n        \"node_latest\",\n        \"configured_seed_urls\"\n      ],\n      \"seed_urls\": [],\n      \"excluded_urls\": []\n    }\n  },\n  \"verified_evidence_snapshots\": [],\n  \"discovery_mode\": \"research\",\n  \"max_post_age_days\": 7,\n  \"preferred_post_age_hours\": 72,\n  \"min_comment_count\": 0,\n  \"max_comment_count\": 250,\n  \"history_ttl_days\": 45,\n  \"discovery_terms\": [\n    \"save chatgpt answers\",\n    \"organize ai responses\"\n  ],\n  \"live_discovery_terms\": [\n    \"save chatgpt answers\",\n    \"markdown notes\"\n  ],\n  \"research_terms\": [\n    \"local-first notes\",\n    \"ai chat history\"\n  ],\n  \"scoring_terms\": [\n    \"markdown\",\n    \"notes\",\n    \"chatgpt\",\n    \"claude\",\n    \"ai\",\n    \"knowledge\",\n    \"local-first\"\n  ],\n  \"negative_scoring_terms\": [\n    \"benchmark\",\n    \"subscription\",\n    \"model release\"\n  ],\n  \"max_candidates\": 3,\n  \"max_action_cards\": 1\n}\n\nFile v0.2.11:profiles/hitrl-remote-agents.example.json\n\n{\n  \"profile_id\": \"hitrl-remote-agents\",\n  \"enabled\": false,\n  \"product_name\": \"HITRL Remote Agents\",\n  \"product_one_liner\": \"A human-in-the-loop review layer for AI agents before they execute risky remote work.\",\n  \"target_audience\": \"founders, operators, automation builders, and engineering teams experimenting with AI agents that call tools, touch production systems, or hand work across teammates\",\n  \"keywords\": [\n    \"agent approval\",\n    \"human in the loop\",\n    \"review agent output\",\n    \"agent permissions\",\n    \"tool calls\",\n    \"agent workflow\",\n    \"supervise agents\",\n    \"AI agent handoff\"\n  ],\n  \"subreddits\": [\n    \"AutoGPT\",\n    \"LocalLLaMA\",\n    \"selfhosted\",\n    \"devops\",\n    \"n8n\",\n    \"automation\",\n    \"SaaS\",\n    \"ExperiencedDevs\",\n    \"ChatGPTCoding\"\n  ],\n  \"excluded_reddit_urls\": [],\n  \"verified_evidence_snapshots\": [],\n  \"discovery_mode\": \"live\",\n  \"discovery_terms\": [\n    \"AI agent workflow\",\n    \"agent tool calls\",\n    \"autonomous agent mistake\",\n    \"agent permissions\",\n    \"human approval\",\n    \"review agent output\",\n    \"agent automation\"\n  ],\n  \"live_discovery_terms\": [\n    \"human approval\",\n    \"review agent output\",\n    \"agent permissions\",\n    \"before execution\"\n  ],\n  \"research_terms\": [\n    \"AI agent workflow\",\n    \"agent tool calls\",\n    \"human approval\",\n    \"agent automation\"\n  ],\n  \"scoring_terms\": [\n    \"agent approval\",\n    \"human in the loop\",\n    \"review agent output\",\n    \"agent permissions\",\n    \"tool calls\",\n    \"agent workflow\",\n    \"supervise agents\",\n    \"approval step\",\n    \"agent handoff\",\n    \"before execution\"\n  ],\n  \"negative_scoring_terms\": [\n    \"agi\",\n    \"singularity\",\n    \"prediction\",\n    \"model release\",\n    \"benchmark\",\n    \"which model\",\n    \"subscription\",\n    \"token price\",\n    \"stock price\"\n  ],\n  \"max_candidates\": 10,\n  \"max_post_age_days\": 7,\n  \"preferred_post_age_hours\": 48,\n  \"min_comment_count\": 0,\n  \"max_comment_count\": 150,\n  \"history_ttl_days\": 45,\n  \"max_action_cards\": 1\n}\n\nFile v0.2.11:profiles/reusable-ai-insights.example.json\n\n{\n  \"profile_id\": \"reusable-ai-insights\",\n  \"enabled\": false,\n  \"product_name\": \"Reusable AI Insights\",\n  \"product_one_liner\": \"A workflow for saving, exporting, searching, and reusing valuable AI chat outputs.\",\n  \"target_audience\": \"AI-heavy builders, solo founders, students, researchers, and knowledge workers who lose useful ChatGPT, Claude, or Gemini answers after the conversation ends\",\n  \"keywords\": [\n    \"export conversation\",\n    \"save chat\",\n    \"backup chats\",\n    \"conversation history\",\n    \"full conversation\",\n    \"reuse answers\",\n    \"search chat history\",\n    \"download data\"\n  ],\n  \"subreddits\": [\n    \"ChatGPT\",\n    \"ObsidianMD\",\n    \"PKMS\",\n    \"productivity\",\n    \"Notion\"\n  ],\n  \"excluded_reddit_urls\": [],\n  \"verified_evidence_snapshots\": [],\n  \"discovery_mode\": \"live\",\n  \"discovery_terms\": [\n    \"ChatGPT export\",\n    \"save ChatGPT\",\n    \"conversation history\",\n    \"export conversation\",\n    \"backup chats\",\n    \"download ChatGPT data\",\n    \"search chat history\"\n  ],\n  \"live_discovery_terms\": [\n    \"save chat\",\n    \"conversation history\",\n    \"export conversation\",\n    \"search chat history\"\n  ],\n  \"research_terms\": [\n    \"ChatGPT export\",\n    \"save ChatGPT\",\n    \"download ChatGPT data\",\n    \"search chat history\"\n  ],\n  \"scoring_terms\": [\n    \"export conversation\",\n    \"save chat\",\n    \"backup chats\",\n    \"conversation history\",\n    \"full conversation\",\n    \"reuse answers\",\n    \"search chat history\",\n    \"archive prompts\",\n    \"download data\",\n    \"lost chat\"\n  ],\n  \"negative_scoring_terms\": [\n    \"jailbreak\",\n    \"roleplay\",\n    \"pretend\",\n    \"convinced gpt\",\n    \"which model\",\n    \"subscription\",\n    \"benchmark\",\n    \"grok\",\n    \"vs claude\"\n  ],\n  \"max_candidates\": 10,\n  \"max_post_age_days\": 7,\n  \"preferred_post_age_hours\": 72,\n  \"min_comment_count\": 0,\n  \"max_comment_count\": 250,\n  \"history_ttl_days\": 45,\n  \"max_action_cards\": 1\n}\n\nArchive v0.2.10: 28 files, 73725 bytes\n\nFiles: founder-signal.config.example.json (1115b), profiles/draft.example.json (1855b), profiles/hitrl-remote-agents.example.json (1976b), profiles/README.md (2538b), profiles/reusable-ai-insights.example.json (1881b), scripts/run_founder_signal_once.sh (11394b), skill-card.md (2544b), SKILL.md (12395b), src/founder_signal/__init__.py (29989b), src/founder_signal/__main__.py (8161b), src/founder_signal/action_card.py (19789b), src/founder_signal/candidate_discovery.py (20553b), src/founder_signal/candidate_history.py (8335b), src/founder_signal/config.py (5961b), src/founder_signal/draft_publish.py (9337b), src/founder_signal/models.py (9043b), src/founder_signal/platforms/__init__.py (2259b), src/founder_signal/platforms/reddit.py (8485b), src/founder_signal/platforms/v2ex.py (19923b), src/founder_signal/reddit_fetcher.py (20605b), src/founder_signal/report.py (30604b), src/founder_signal/review_output.py (934b), src/founder_signal/run_review.py (7609b), src/founder_signal/runtime_paths.py (891b), src/founder_signal/scoring.py (29458b), src/founder_signal/setup.py (16896b), src/sitecustomize.py (348b), _meta.json (134b)\n\nFile v0.2.10:SKILL.md\n\n---\nname: founder-signal\nversion: \"0.2.10\"\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 verified candidate discussions.\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 the\n  run review artifact on every successful run. Successful runs 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. Draft can still publish a public-safe run review page.\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. It should always\nprepare a public-safe run review page for founder review and should embed\n`daily-review.md` only when an Action Card exists for the selected profile.\nSuccessful test and scheduled runs should publish the generated content into a\nhuman-reviewable Draft public page automatically. Public web publication outside that\nDraft page requires explicit 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: when Founder Signal creates\n`public-run-review.md`, it also writes `draft-publish-intent.json` next to\n`public-run-review.md` and does not hardcode Draft CLI subcommands. The intent contains the\nartifact path, 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 a test run or scheduled run succeeds and 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 in the completion message. 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 in the completion message. 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>/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>/public-run-review.md` for every successful profile run\n- `runs/<RUN_ID>/profiles/<profile_id>/draft-publish-intent.json` when Draft\n  public-page publishing is prepared for automatic downstream `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 successful runs should be published to Draft automatically until a\nhuman-reviewable Draft public page URL exists. Public web publication outside that\nDraft page remains confirmation-gated.\n\n## Runtime Order\n\n1. 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. Save evidence from mirror or verified snapshot fallback, enforce the verified-read\n   gate, score only verified candidates, and optionally generate an Action Card.\n4. Write `public-run-review.md` for founder review on every successful profile run,\n   embedding `daily-review.md` when an Action Card exists.\n5. Write a Draft public-page publish intent whenever `public-run-review.md` exists, marked\n   for automatic `draft page create -> draft page append -> draft page publish` and\n   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\nFile v0.2.10:profiles/README.md\n\n# Founder Signal Profiles\n\nThis directory stores the internal runtime profiles that Founder Signal actually runs.\nAfter install, do not start by hand-editing files here unless you are debugging the\nruntime itself.\n\nPreferred setup workflow:\n\n1. Fill one canonical config such as [`founder-signal.config.example.json`](/Users/weijingliunyu/.codex/worktrees/d515/founder-signal/founder-signal.config.example.json).\n2. Validate it:\n\n```bash\npython3 -m founder_signal doctor --config founder-signal.config.json\n```\n\n3. Import it into an internal profile:\n\n```bash\npython3 -m founder_signal config import founder-signal.config.json\n```\n\n4. Run that profile:\n\n```bash\npython3 -m founder_signal run --profile ai-code-review\n```\n\nShortcut:\n\n```bash\npython3 -m founder_signal run --config founder-signal.config.json\n```\n\nThe shell runner also supports the shortcut:\n\n```bash\nbash scripts/run_founder_signal_once.sh --config founder-signal.config.json\n```\n\nImported runtime profiles remain here under `profiles/*.json`.\n\nConfig notes:\n\n- Use `platforms.reddit.communities`, `platforms.reddit.seed_urls`, and\n  `platforms.reddit.excluded_urls` instead of legacy Reddit keys.\n- Use `platforms.v2ex.communities` plus `discovery_providers` for SOV2EX,\n  node-latest, and configured-seed topic discovery.\n- Do not use placeholder Reddit URLs or V2EX topic IDs in any field; `POST_ID`,\n  `REAL_ID`, `SUB`, `/slug/`, and `TOPIC_ID` examples are rejected.\n- If automated fetch is blocked but an agent/browser has verified the post, add a\n  `verified_evidence_snapshots` item with `platform`, `source_url`,\n  `verification_method`, `verified_by`, and the observed `text_snapshot`.\n- `draft.require_confirmation_before_public_publish` must remain `true`; it protects publication outside the Draft review surface, not the automatic Draft-hosted review page.\n- Imported profiles are internal runtime artifacts; the canonical JSON config is the\n  user-facing setup contract.\n\nLegacy Reddit keys (`subreddits`, `seed_reddit_urls`, and `excluded_reddit_urls`) are\nstill accepted only inside existing internal profiles for backward compatibility.\n\nFile naming notes:\n\n- `*.example.json` is for committed examples.\n- `*.json` is for active profile files.\n\nEach active profile must include:\n\n- `profile_id`\n- `enabled`\n- `product_name`\n- `product_one_liner`\n- `target_audience`\n- `keywords`\n- either legacy Reddit fields or `platforms`\n- `verified_evidence_snapshots`\n- `discovery_mode`\n- `history_ttl_days`\n- `scoring_terms`\n- `max_candidates`\n- `max_action_cards`\n\nFile v0.2.10:_meta.json\n\n{\n  \"ownerId\": \"kn756a13aw1mqmzdr452d1z6xx82qdga\",\n  \"slug\": \"founder-signal\",\n  \"version\": \"0.2.10\",\n  \"publishedAt\": 1780023996230\n}\n\nFile v0.2.10:skill-card.md\n\n## Description: <br>\nFounder Signal turns verified Reddit and V2EX evidence into a small, reviewable signal package for founders evaluating product demand and positioning across one or more configured product profiles. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[toliuweijing](https://clawhub.ai/user/toliuweijing) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nFounders and product teams use this skill to research product demand and positioning from verified Reddit and V2EX discussions, score candidate evidence, and produce reviewable run reports and Draft-ready review pages. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Successful runs can automatically publish generated founder-research reports to a publicly reachable Draft page without per-run approval. <br>\nMitigation: Review generated public-run-review.md before using real product ideas, private research, customer quotes, or proprietary positioning notes, or disable or modify the Draft publish step before running. <br>\nRisk: The skill depends on verified Reddit or V2EX evidence snapshots for scoring, so missing or unverified evidence can make scoring incomplete. <br>\nMitigation: Persist verified source snapshots before relying on scores and treat public-safe review pages as founder review artifacts rather than final conclusions. <br>\n\n\n## Reference(s): <br>\n- [Founder Signal ClawHub listing](https://clawhub.ai/toliuweijing/founder-signal) <br>\n- [draft-cli dependency](https://clawhub.ai/toliuweijing/draft-cli) <br>\n- [profiles/README.md](profiles/README.md) <br>\n- [founder-signal.config.example.json](founder-signal.config.example.json) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, json, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown reports, JSON run artifacts, Draft publish intent JSON, and shell commands] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Creates runtime files under the configured Founder Signal home and may prepare a public Draft review page for successful runs.] <br>\n\n## Skill Version(s): <br>\n0.2.10 (source: SKILL.md frontmatter and server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v0.2.10:founder-signal.config.example.json\n\n{\n  \"profile_id\": \"ai-code-review\",\n  \"product_name\": \"AI Code Review Assistant\",\n  \"product_one_liner\": \"An AI agent that reviews pull requests for solo founders.\",\n  \"target_audience\": \"Solo technical founders and small engineering teams\",\n  \"keywords\": [\n    \"AI code review\",\n    \"PR review\",\n    \"developer workflow\"\n  ],\n  \"scoring_terms\": [\n    \"code review\",\n    \"pull request\",\n    \"bug\",\n    \"AI agent\",\n    \"developer workflow\"\n  ],\n  \"platforms\": {\n    \"reddit\": {\n      \"enabled\": true,\n      \"communities\": [\n        \"ChatGPT\",\n        \"SideProject\",\n        \"indiehackers\"\n      ],\n      \"seed_urls\": [],\n      \"excluded_urls\": []\n    },\n    \"v2ex\": {\n      \"enabled\": true,\n      \"communities\": [\n        \"programmer\",\n        \"create\",\n        \"qna\"\n      ],\n      \"discovery_providers\": [\n        \"sov2ex\",\n        \"node_latest\",\n        \"configured_seed_urls\"\n      ],\n      \"seed_urls\": [],\n      \"excluded_urls\": []\n    }\n  },\n  \"discovery_mode\": \"research\",\n  \"max_candidates\": 12,\n  \"draft\": {\n    \"generate_publish_intent\": true,\n    \"require_confirmation_before_public_publish\": true\n  }\n}\n\nFile v0.2.10:profiles/draft.example.json\n\n{\n  \"profile_id\": \"draft\",\n  \"enabled\": false,\n  \"product_name\": \"Draft\",\n  \"product_one_liner\": \"A local-first Markdown workspace for saving and organizing useful AI chat answers.\",\n  \"target_audience\": \"solo founders, indie hackers, AI-heavy builders, and knowledge workers who save useful ChatGPT/Claude/Gemini answers\",\n  \"keywords\": [\n    \"save ChatGPT answers\",\n    \"AI chat history\",\n    \"organize AI responses\",\n    \"markdown notes\",\n    \"local-first notes\",\n    \"knowledge management for AI\"\n  ],\n  \"platforms\": {\n    \"reddit\": {\n      \"enabled\": true,\n      \"communities\": [\n        \"ChatGPT\",\n        \"SideProject\",\n        \"indiehackers\",\n        \"ObsidianMD\",\n        \"productivity\",\n        \"PKMS\",\n        \"Notion\",\n        \"artificial\"\n      ],\n      \"seed_urls\": [],\n      \"excluded_urls\": []\n    },\n    \"v2ex\": {\n      \"enabled\": false,\n      \"communities\": [\n        \"create\",\n        \"programmer\",\n        \"qna\"\n      ],\n      \"discovery_providers\": [\n        \"sov2ex\",\n        \"site_search\",\n        \"node_latest\",\n        \"configured_seed_urls\"\n      ],\n      \"seed_urls\": [],\n      \"excluded_urls\": []\n    }\n  },\n  \"verified_evidence_snapshots\": [],\n  \"discovery_mode\": \"research\",\n  \"max_post_age_days\": 7,\n  \"preferred_post_age_hours\": 72,\n  \"min_comment_count\": 0,\n  \"max_comment_count\": 250,\n  \"history_ttl_days\": 45,\n  \"discovery_terms\": [\n    \"save chatgpt answers\",\n    \"organize ai responses\"\n  ],\n  \"live_discovery_terms\": [\n    \"save chatgpt answers\",\n    \"markdown notes\"\n  ],\n  \"research_terms\": [\n    \"local-first notes\",\n    \"ai chat history\"\n  ],\n  \"scoring_terms\": [\n    \"markdown\",\n    \"notes\",\n    \"chatgpt\",\n    \"claude\",\n    \"ai\",\n    \"knowledge\",\n    \"local-first\"\n  ],\n  \"negative_scoring_terms\": [\n    \"benchmark\",\n    \"subscription\",\n    \"model release\"\n  ],\n  \"max_candidates\": 3,\n  \"max_action_cards\": 1\n}\n\nFile v0.2.10:profiles/hitrl-remote-agents.example.json\n\n{\n  \"profile_id\": \"hitrl-remote-agents\",\n  \"enabled\": false,\n  \"product_name\": \"HITRL Remote Agents\",\n  \"product_one_liner\": \"A human-in-the-loop review layer for AI agents before they execute risky remote work.\",\n  \"target_audience\": \"founders, operators, automation builders, and engineering teams experimenting with AI agents that call tools, touch production systems, or hand work across teammates\",\n  \"keywords\": [\n    \"agent approval\",\n    \"human in the loop\",\n    \"review agent output\",\n    \"agent permissions\",\n    \"tool calls\",\n    \"agent workflow\",\n    \"supervise agents\",\n    \"AI agent handoff\"\n  ],\n  \"subreddits\": [\n    \"AutoGPT\",\n    \"LocalLLaMA\",\n    \"selfhosted\",\n    \"devops\",\n    \"n8n\",\n    \"automation\",\n    \"SaaS\",\n    \"ExperiencedDevs\",\n    \"ChatGPTCoding\"\n  ],\n  \"excluded_reddit_urls\": [],\n  \"verified_evidence_snapshots\": [],\n  \"discovery_mode\": \"live\",\n  \"discovery_terms\": [\n    \"AI agent workflow\",\n    \"agent tool calls\",\n    \"autonomous agent mistake\",\n    \"agent permissions\",\n    \"human approval\",\n    \"review agent output\",\n    \"agent automation\"\n  ],\n  \"live_discovery_terms\": [\n    \"human approval\",\n    \"review agent output\",\n    \"agent permissions\",\n    \"before execution\"\n  ],\n  \"research_terms\": [\n    \"AI agent workflow\",\n    \"agent tool calls\",\n    \"human approval\",\n    \"agent automation\"\n  ],\n  \"scoring_terms\": [\n    \"agent approval\",\n    \"human in the loop\",\n    \"review agent output\",\n    \"agent permissions\",\n    \"tool calls\",\n    \"agent workflow\",\n    \"supervise agents\",\n    \"approval step\",\n    \"agent handoff\",\n    \"before execution\"\n  ],\n  \"negative_scoring_terms\": [\n    \"agi\",\n    \"singularity\",\n    \"prediction\",\n    \"model release\",\n    \"benchmark\",\n    \"which model\",\n    \"subscription\",\n    \"token price\",\n    \"stock price\"\n  ],\n  \"max_candidates\": 10,\n  \"max_post_age_days\": 7,\n  \"preferred_post_age_hours\": 48,\n  \"min_comment_count\": 0,\n  \"max_comment_count\": 150,\n  \"history_ttl_days\": 45,\n  \"max_action_cards\": 1\n}\n\nFile v0.2.10:profiles/reusable-ai-insights.example.json\n\n{\n  \"profile_id\": \"reusable-ai-insights\",\n  \"enabled\": false,\n  \"product_name\": \"Reusable AI Insights\",\n  \"product_one_liner\": \"A workflow for saving, exporting, searching, and reusing valuable AI chat outputs.\",\n  \"target_audience\": \"AI-heavy builders, solo founders, students, researchers, and knowledge workers who lose useful ChatGPT, Claude, or Gemini answers after the conversation ends\",\n  \"keywords\": [\n    \"export conversation\",\n    \"save chat\",\n    \"backup chats\",\n    \"conversation history\",\n    \"full conversation\",\n    \"reuse answers\",\n    \"search chat history\",\n    \"download data\"\n  ],\n  \"subreddits\": [\n    \"ChatGPT\",\n    \"ObsidianMD\",\n    \"PKMS\",\n    \"productivity\",\n    \"Notion\"\n  ],\n  \"excluded_reddit_urls\": [],\n  \"verified_evidence_snapshots\": [],\n  \"discovery_mode\": \"live\",\n  \"discovery_terms\": [\n    \"ChatGPT export\",\n    \"save ChatGPT\",\n    \"conversation history\",\n    \"export conversation\",\n    \"backup chats\",\n    \"download ChatGPT data\",\n    \"search chat history\"\n  ],\n  \"live_discovery_terms\": [\n    \"save chat\",\n    \"conversation history\",\n    \"export conversation\",\n    \"search chat history\"\n  ],\n  \"research_terms\": [\n    \"ChatGPT export\",\n    \"save ChatGPT\",\n    \"download ChatGPT data\",\n    \"search chat history\"\n  ],\n  \"scoring_terms\": [\n    \"export conversation\",\n    \"save chat\",\n    \"backup chats\",\n    \"conversation history\",\n    \"full conversation\",\n    \"reuse answers\",\n    \"search chat history\",\n    \"archive prompts\",\n    \"download data\",\n    \"lost chat\"\n  ],\n  \"negative_scoring_terms\": [\n    \"jailbreak\",\n    \"roleplay\",\n    \"pretend\",\n    \"convinced gpt\",\n    \"which model\",\n    \"subscription\",\n    \"benchmark\",\n    \"grok\",\n    \"vs claude\"\n  ],\n  \"max_candidates\": 10,\n  \"max_post_age_days\": 7,\n  \"preferred_post_age_hours\": 72,\n  \"min_comment_count\": 0,\n  \"max_comment_count\": 250,\n  \"history_ttl_days\": 45,\n  \"max_action_cards\": 1\n}\n\nArchive v0.2.9: 27 files, 73028 bytes\n\nFiles: founder-signal.config.example.json (1115b), profiles/draft.example.json (1855b), profiles/hitrl-remote-agents.example.json (1976b), profiles/README.md (2538b), profiles/reusable-ai-insights.example.json (1881b), scripts/run_founder_signal_once.sh (11346b), skill-card.md (2253b), SKILL.md (12394b), src/founder_signal/__init__.py (29989b), src/founder_signal/__main__.py (7593b), src/founder_signal/action_card.py (19789b), src/founder_signal/candidate_discovery.py (20553b), src/founder_signal/candidate_history.py (8335b), src/founder_signal/config.py (5961b), src/founder_signal/draft_publish.py (9337b), src/founder_signal/models.py (9043b), src/founder_signal/platforms/__init__.py (2259b), src/founder_signal/platforms/reddit.py (8485b), src/founder_signal/platforms/v2ex.py (19923b), src/founder_signal/reddit_fetcher.py (20605b), src/founder_signal/report.py (30604b), src/founder_signal/review_output.py (934b), src/founder_signal/run_review.py (7609b), src/founder_signal/runtime_paths.py (735b), src/founder_signal/scoring.py (29458b), src/founder_signal/setup.py (16901b), _meta.json (133b)\n\nFile v0.2.9:SKILL.md\n\n---\nname: founder-signal\nversion: \"0.2.9\"\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 verified candidate discussions.\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 the\n  run review artifact on every successful run. Successful runs 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. Draft can still publish a public-safe run review page.\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. It should always\nprepare a public-safe run review page for founder review and should embed\n`daily-review.md` only when an Action Card exists for the selected profile.\nSuccessful test and scheduled runs should publish the generated content into a\nhuman-reviewable Draft public page automatically. Public web publication outside that\nDraft page requires explicit 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: when Founder Signal creates\n`public-run-review.md`, it also writes `draft-publish-intent.json` next to\n`public-run-review.md` and does not hardcode Draft CLI subcommands. The intent contains the\nartifact path, 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 a test run or scheduled run succeeds and 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 in the completion message. 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 in the completion message. 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>/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>/public-run-review.md` for every successful profile run\n- `runs/<RUN_ID>/profiles/<profile_id>/draft-publish-intent.json` when Draft\n  public-page publishing is prepared for automatic downstream `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 successful runs should be published to Draft automatically until a\nhuman-reviewable Draft public page URL exists. Public web publication outside that\nDraft page remains confirmation-gated.\n\n## Runtime Order\n\n1. 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 snap...","readmeExcerpt":"Skill: Founder Signal Owner: toliuweijing Summary: Founder Signal turns verified Reddit and V2EX evidence into a small, reviewable signal package for founders evaluating product demand and positioning across... Tags: latest:0.2.14 Version history: v0.2.14 | 2026-06-05T03:31:30.655Z | auto Founder Signal v0.2.14 - Every run now generates and attempts to publish a public Draft review page, even if no evidence is found ","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"python3 -m founder_signal init"},{"language":"bash","snippet":"python3 -m founder_signal doctor --config founder-signal.config.json"},{"language":"bash","snippet":"python3 -m founder_signal config import founder-signal.config.json"},{"language":"bash","snippet":"python3 -m founder_signal run --config founder-signal.config.json"},{"language":"bash","snippet":"bash scripts/run_founder_signal_once.sh --config founder-signal.config.json"},{"language":"json","snippet":"{\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}"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\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` i"},{"path":"profiles/README.md","content":"# Founder Signal Profiles\n\nThis directory stores the internal runtime profiles that Founder Signal actually runs.\nAfter install, do not start by hand-editing files here unless you are debugging the\nruntime itself.\n\nPreferred setup workflow:\n\n1. Fill one canonical config such as [`founder-signal.config.example.json`](/Users/weijingliunyu/.codex/worktrees/d515/founder-signal/founder-signal.config.example.json).\n2. Validate it:\n\n```bash\npython3 -m founder_signal doctor --config founder-signal.config.json\n```\n\n3. Import it into an internal profile:\n\n```bash\npython3 -m founder_signal config import founder-signal.config.json\n```\n\n4. Run that profile:\n\n```bash\npython3 -m founder_signal run --profile ai-code-review\n```\n\nShortcut:\n\n```bash\npython3 -m founder_signal run --config founder-signal.config.json\n```\n\nThe shell runner also supports the shortcut:\n\n```bash\nbash scripts/run_founder_signal_once.sh --config founder-signal.config.json\n```\n\nImported runtime profiles remain here under `profiles/*.json`.\n\nConfig notes:\n\n- Use `platforms.reddit.communities`, `platforms.reddit.seed_urls`, and\n  `platforms.reddit.excluded_urls` instead of legacy Reddit keys.\n- Use `platforms.v2ex.communities` plus `discovery_providers` for SOV2EX,\n  node-latest, and configured-seed topic discovery.\n- Do not use placeholder Reddit URLs or V2EX topic IDs in any field; `POST_ID`,\n  `REAL_ID`, `SUB`, `/slug/`, and `TOPIC_ID` examples are rejected.\n- If automated fetch is blocked but an agent/browser has verified the post, add a\n  `verified_evidence_snapshots` item with `platform`, `source_url`,\n  `verification_method`, `verified_by`, and the observed `text_snapshot`.\n- `draft.require_confirmation_before_public_publish` must remain `true`.\n- Imported profiles are internal runtime artifacts; the canonical JSON config is the\n  user-facing setup contract.\n\nLegacy Reddit keys (`subreddits`, `seed_reddit_urls`, and `excluded_reddit_urls`) are\nstill accepted only inside existing internal profiles for backward compatibility.\n\nFile naming notes:\n\n- `*.example.json` is for committed examples.\n- `*.json` is for active profile files.\n\nEach active profile must include:\n\n- `profile_id`\n- `enabled`\n- `product_name`\n- `product_one_liner`\n- `target_audience`\n- `keywords`\n- either legacy Reddit fields or `platforms`\n- `verified_evidence_snapshots`\n- `discovery_mode`\n- `history_ttl_days`\n- `scoring_terms`\n- `max_candidates`\n- `max_action_cards`"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn756a13aw1mqmzdr452d1z6xx82qdga\",\n  \"slug\": \"founder-signal\",\n  \"version\": \"0.2.14\",\n  \"publishedAt\": 1780630290655\n}"},{"path":"skill-card.md","content":"## Description:\n\nFounder Signal turns verified Reddit and V2EX evidence into a small, reviewable signal package for founders evaluating product demand and positioning across one or more configured product profiles.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[toliuweijing](https://clawhub.ai/user/toliuweijing)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal founders and product teams use this skill to configure product profiles, discover Reddit and V2EX demand signals, verify candidate evidence, score findings, and generate review artifacts plus Draft review pages.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Public Draft review pages may expose configured product names, source URLs, scores, generated recommendations, and failure details because Draft publication is attempted automatically for every run.\n\nMitigation: Use the skill only when public Draft publication is acceptable, or require a version that keeps reviews local by default and asks before publishing.\n\nRisk: Research quality depends on verified Reddit or V2EX evidence and saved snapshots; missing or stale evidence can produce weak or misleading demand signals.\n\nMitigation: Review the source URLs, verification status, selected candidate, and generated Action Card before relying on recommendations.\n\n## Reference(s):\n\n- [Founder Signal on ClawHub](https://clawhub.ai/toliuweijing/skills/founder-signal)\n- [Draft CLI dependency](https://clawhub.ai/toliuweijing/draft-cli)\n- [Founder Signal Profiles](profiles/README.md)\n\n## Skill Output:\n\n**Output Type(s):** [Markdown, JSON, Files, Shell commands, Configuration, Guidance]\n\n**Output Format:** [Markdown reports and public run reviews, JSON run artifacts and configuration, local files, and shell commands]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Writes runtime artifacts under the Founder Signal home directory and attempts Draft public-page publication for each run.]\n\n## Skill Version(s):\n\n0.2.14 (source: frontmatter and server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."},{"path":"founder-signal.config.example.json","content":"{\n  \"profile_id\": \"ai-code-review\",\n  \"product_name\": \"AI Code Review Assistant\",\n  \"product_one_liner\": \"An AI agent that reviews pull requests for solo founders.\",\n  \"target_audience\": \"Solo technical founders and small engineering teams\",\n  \"keywords\": [\n    \"AI code review\",\n    \"PR review\",\n    \"developer workflow\"\n  ],\n  \"scoring_terms\": [\n    \"code review\",\n    \"pull request\",\n    \"bug\",\n    \"AI agent\",\n    \"developer workflow\"\n  ],\n  \"platforms\": {\n    \"reddit\": {\n      \"enabled\": true,\n      \"communities\": [\n        \"ChatGPT\",\n        \"SideProject\",\n        \"indiehackers\"\n      ],\n      \"seed_urls\": [],\n      \"excluded_urls\": []\n    },\n    \"v2ex\": {\n      \"enabled\": true,\n      \"communities\": [\n        \"programmer\",\n        \"create\",\n        \"qna\"\n      ],\n      \"discovery_providers\": [\n        \"sov2ex\",\n        \"node_latest\",\n        \"configured_seed_urls\"\n      ],\n      \"seed_urls\": [],\n      \"excluded_urls\": []\n    }\n  },\n  \"discovery_mode\": \"research\",\n  \"max_candidates\": 12,\n  \"draft\": {\n    \"generate_publish_intent\": true,\n    \"require_confirmation_before_public_publish\": true\n  }\n}"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":2000,"uniquenessScore":38,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T08:52:53.659Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T08:52:53.659Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T11:54:02.547Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}