{"record":{"id":"59a5720515b0c63f","repo":"Panniantong/Agent-Reach","slug":"agent-reach-install-error-unknown-channel-s-u","errorCode":null,"errorMessage":"agent-reach install: error: unknown channel(s): {unknown}. Supported: {supported}","messagePattern":"agent-reach install: error: unknown channel\\(s\\): (.+?)\\. Supported: (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"agent_reach/cli.py","lineNumber":292,"sourceCode":"        # xueqiu: cookie-only, no install step\n        # linkedin: manual setup, no auto-install\n    }\n    supported_channels = set(CHANNEL_INSTALLERS) | {\"xueqiu\", \"linkedin\"}\n    raw_channels = [\n        channel.strip().lower()\n        for channel in args.channels.split(\",\")\n        if channel.strip()\n    ]\n    unknown_channels = set(raw_channels) - supported_channels - {\"all\"}\n    if unknown_channels:\n        supported = \", \".join(sorted(supported_channels | {\"all\"}))\n        unknown = \", \".join(sorted(unknown_channels))\n        print(\n            f\"agent-reach install: error: unknown channel(s): {unknown}. \"\n            f\"Supported: {supported}\",\n            file=sys.stderr,\n        )\n        raise SystemExit(2)\n\n    if \"all\" in raw_channels:\n        requested_channels = supported_channels\n    else:\n        requested_channels = set(raw_channels)\n\n    config = Config(read_only=dry_run or safe_mode)\n    print()\n    print(\"Agent Reach Installer\")\n    print(\"=\" * 40)\n\n    if dry_run:\n        print(\"DRY RUN — showing what would be done (no changes)\")\n        print()\n    if safe_mode:\n        print(\"SAFE MODE — skipping automatic system changes\")\n        print()\n","sourceCodeStart":274,"sourceCodeEnd":310,"githubUrl":"https://github.com/Panniantong/Agent-Reach/blob/93ae1d18c37b707dec053c7c4f9d91cd8ef8943d/agent_reach/cli.py#L274-L310","documentation":"`agent-reach install` parses its --channels argument as a comma-separated list and rejects any name not in the supported channel set (plus the pseudo-channel 'all'). Unknown names print this error to stderr (naming the offending names and the full supported list) and exit with status 2. Example: `agent-reach install twitter,reddit` works; `agent-reach install twiter` fails.","triggerScenarios":"agent-reach install --channels=<name> where <name> is misspelled ('twiter', 'reddt'), uses a hyphen where none is expected, refers to a channel removed/renamed in a newer version, or embeds whitespace that isn't trimmed away as an empty entry.","commonSituations":"Typos in shell scripts and CI pipelines; channel names changing across agent-reach versions; copying install commands from outdated docs or blog posts.","solutions":["Run `agent-reach install --channels=all` or `agent-reach doctor` to see the currently supported channel names","Fix the typo — the error message itself lists the exact supported set, sorted","Ensure names are comma-separated with no stray punctuation: --channels=twitter,reddit,youtube","Pin/upgrade agent-reach to the version whose docs you are following so names match"],"exampleFix":"# before\nagent-reach install --channels=twiter,reddit\n\n# after\nagent-reach install --channels=twitter,reddit","handlingStrategy":"validation","validationCode":"from agent_reach.core import create_channels  # names come from the registry\n\nsupported = {ch.name for ch in create_channels()} | {\"all\"}\n\ndef valid_install_targets(names: list[str]) -> list[str]:\n    unknown = set(names) - supported\n    if unknown:\n        raise ValueError(f\"unknown channels {sorted(unknown)}; supported: {sorted(supported)}\")\n    return names","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Generate install commands from the same agent-reach version you deploy, so names always match","Check exit status 2 from `agent-reach install` in scripts — its stderr already lists the valid names","Use --channels=all during provisioning to avoid name drift entirely"],"tags":["cli","install","channels","argument-error","exit-code-2"],"backgroundTag":null,"analyzedSha":"93ae1d18c37b707dec053c7c4f9d91cd8ef8943d","analyzedAt":"2026-08-14T22:54:06.735Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}