Skip to main content

Agent-friendly CLI for the unofficial Skylight API reference.

Project description

Skylight CLI

skylightctl is a JSON-first CLI for the unofficial Skylight API reference. It is built for agents and scripts: predictable command names, redacted previews, and dry-run writes by default.

Install

Development use from this repository:

cd cli
uv sync --extra dev
uv run skylightctl --help

User-level install after the first PyPI release:

uv tool install skylightctl
skylightctl --help

Until then, install from GitHub:

uv tool install "skylightctl @ git+https://github.com/JamesHWade/SkylightAPI.git@main#subdirectory=cli"

From a local checkout:

uv tool install /path/to/SkylightAPI/cli

Setup

Interactive login prompts for email and a hidden password:

skylightctl auth login --save

--save writes the Bearer token, refresh token, and device fingerprint to ~/.config/skylightctl/config.json with 0600 permissions. Normal output redacts secrets. Use --show-secret only when shell exports are needed.

Save a default frame:

skylightctl frames use --first

Check readiness:

skylightctl doctor
skylightctl smoke read

smoke read performs read-only requests and reports status, response shape, and counts without dumping full account data.

Configuration

Optional environment variables:

SKYLIGHT_BASE_URL=https://app.ourskylight.com
SKYLIGHT_CONFIG=~/.config/skylightctl/config.json
SKYLIGHT_DEVICE_FINGERPRINT=<stable UUID>
SKYLIGHT_REFRESH_TOKEN=<oauth refresh token>
SKYLIGHT_PROFILE=default
SKYLIGHT_TIMEOUT=30
SKYLIGHT_API_VERSION=2026-03-01

Config files are JSON:

{
  "default_profile": "default",
  "profiles": {
    "default": {
      "auth_header": "Bearer REDACTED",
      "refresh_token": "REDACTED",
      "device_fingerprint": "REDACTED",
      "frame_id": "REDACTED",
      "base_url": "https://app.ourskylight.com",
      "api_version": "2026-03-01"
    }
  }
}

Precedence is CLI option, environment variable, profile config, built-in default.

Agent Usage

Start here:

skylightctl capabilities
skylightctl doctor
skylightctl smoke read

Common reads:

skylightctl frames list
skylightctl chores list --after 2026-05-01 --before 2026-05-10
skylightctl categories list
skylightctl lists list
skylightctl lists get --list-id "$LIST_ID"
skylightctl calendars events --date-min 2026-05-10 --date-max 2026-05-17
skylightctl rewards points

Writes dry-run unless --execute is passed:

skylightctl chores create --summary "Take out trash" --start 2026-05-10
skylightctl chores update --chore-id "$CHORE_ID" --summary "Updated title"
skylightctl chores complete --chore-id "$CHORE_ID"
skylightctl chores skip --chore-id "$CHORE_ID"
skylightctl chores delete --chore-id "$CHORE_ID"

Raw escape hatches:

skylightctl raw get /api/frames/FRAME_ID/categories
skylightctl raw post /api/frames/FRAME_ID/chores --body '{"summary":"Test"}'
skylightctl raw put /api/frames/FRAME_ID/chores/CHORE_ID --body '{"summary":"Test"}'
skylightctl raw patch /api/frames/FRAME_ID/rewards/REWARD_ID --body '{"name":"Test"}'
skylightctl raw delete /api/frames/FRAME_ID/chores/CHORE_ID

--body accepts an inline JSON string or @path/to/file.json to load from disk. Anything not prefixed with @ is parsed as inline JSON.

Inspection helpers:

skylightctl config show              # resolved config with secrets redacted
skylightctl discover routes          # probe known routes for 401-vs-404 drift
skylightctl discover routes --path /api/frames/{frameId}/something --probe-frame-id FRAME

The legacy /api/sessions flow is intentionally not implemented because it now returns an unsupported-version error in live testing. Saved OAuth credentials are refreshed automatically after a 401 response, retried once, and persisted — this requires both refresh_token and device_fingerprint to be saved (run skylightctl auth login --save to populate them). If the refreshed token cannot be persisted to disk, the request fails loudly rather than silently desyncing in-memory and on-disk state.

Validation

uv run pytest
uv run ruff check .
uv run ty check

PyPI releases are handled by the tag-triggered workflow in .github/workflows/publish.yml; see ../docs/release.md.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

skylightctl-0.1.0.tar.gz (34.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

skylightctl-0.1.0-py3-none-any.whl (22.5 kB view details)

Uploaded Python 3

File details

Details for the file skylightctl-0.1.0.tar.gz.

File metadata

  • Download URL: skylightctl-0.1.0.tar.gz
  • Upload date:
  • Size: 34.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.12 {"installer":{"name":"uv","version":"0.11.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for skylightctl-0.1.0.tar.gz
Algorithm Hash digest
SHA256 93d0df30a6589866f3d3b8a8801ced7d6508626eda5064d973d6c03bdbab3abb
MD5 aac724141dbf9fde6ae29b08a88443f0
BLAKE2b-256 5ced15806d3919492017aa51c8c18f3c7d3fdb3caf8eb5b726807c44769d6d95

See more details on using hashes here.

File details

Details for the file skylightctl-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: skylightctl-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 22.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.12 {"installer":{"name":"uv","version":"0.11.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for skylightctl-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f5ade2451d8b6905d6c0acce82fb48f9f13f7f8a5b93440b72ad7768d64d36eb
MD5 f00d068a8cdb928fa497c40495a5ee4e
BLAKE2b-256 d4b2834a534382ac6c61dc0b61f9b897be2a38debdea3524965b16c7838a1949

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page