mvanhorn/last30days-skill · error · SystemExit

delivery_channel must be an https:// URL, got {value!r}

Error message

delivery_channel must be an https:// URL, got {value!r}

What it means

Error "delivery_channel must be an https:// URL, got {value!r}" thrown in mvanhorn/last30days-skill.

Source

Thrown at skills/last30days/scripts/watchlist.py:264

            run_id,
            status="failed",
            error_message=f"Invalid JSON output: {exc}",
            duration_seconds=duration,
        )
        return {"topic": topic["name"], "status": "failed", "error": f"parse error: {exc}"}
def cmd_config(args):
    if args.key == "budget":
        store.set_setting("daily_budget", str(args.value))
        print(json.dumps({"action": "config", "key": "daily_budget", "value": str(args.value)}))
        return
    if args.key == "delivery":
        value = str(args.value)
        # Reject a non-https channel at write time so the operator gets
        # immediate feedback, rather than discovering it via a stderr line
        # buried in a research run hours later. Matches the delivery-time guard
        # in _deliver_findings.
        if value and urllib.parse.urlparse(value).scheme != "https":
            raise SystemExit(f"delivery_channel must be an https:// URL, got {value!r}")
        store.set_setting("delivery_channel", value)
        print(json.dumps({"action": "config", "key": "delivery_channel", "value": value}))
        return
    raise SystemExit(f"Unknown config key: {args.key}")


def build_parser() -> argparse.ArgumentParser:
    parser = argparse.ArgumentParser(description="Manage the last30days watchlist")
    sub = parser.add_subparsers(dest="command")

    add = sub.add_parser("add")
    add.add_argument("topic")
    add.add_argument("--schedule")
    add.add_argument("--weekly", action="store_true")
    add.add_argument("--queries")
    add.set_defaults(func=cmd_add)

    remove = sub.add_parser("remove")

View on GitHub (pinned to c7460f6114)

Solutions

  1. Pass an https:// URL for the delivery channel, e.g. watchlist.py config delivery https://example.com/webhook.
  2. Use an empty value to clear the delivery channel if you do not want delivery configured.

When it happens

Trigger: Fires when the user sets the watchlist delivery_channel config key to a value that is not an https:// URL. Plain http:// URLs, bare hostnames, webhook paths without scheme, or empty strings all fail this validation.

Common situations: See trigger scenarios.


AI-assisted analysis of mvanhorn/last30days-skill@c7460f6114 (2026-08-15). Data as JSON: /api/errors/cc4a702753cf6e20. Report an issue: GitHub.