Kodemeio Outline CLI — manage Outline wiki instances and sync markdown docs
Project description
kctl-outline
Kodemeio Outline CLI — manages Outline wiki instances and syncs markdown documentation between git repositories and one or more Outline collections.
Install
cd packages/kctl-outline
uv sync --extra dev
uv run kctl-outline --help
Or via the workspace from the repo root:
uv sync
uv run --package kctl-outline kctl-outline --help
Configuration
Like other kctl-* tools, configuration lives at ~/.config/kodemeio/config.yaml. Each profile may declare an outline service block:
profiles:
kod:
outline:
url: https://outline.kodeme.io
token: env:OUTLINE_API_TOKEN_KOD
tpp:
outline:
url: https://outline.idtpp.com
token: env:OUTLINE_API_TOKEN_TPP
Add a profile interactively:
kctl-outline config init
kctl-outline config add tpp --url https://outline.idtpp.com --token <TOKEN>
kctl-outline config use kod
Commands
| Group | Purpose |
|---|---|
documents |
List, create, update, delete, move documents |
collections |
Manage collections |
users, groups |
User and group management |
shares |
Public share links |
comments, events, revisions |
Read-only metadata |
templates, stars, tokens |
Misc admin |
health, dashboard, doctor |
Diagnostics (doctor checks URL + auth config) |
search |
Search across documents |
sync |
Sync markdown docs between repos and Outline (see below) |
Sync subcommand
kctl-outline sync is the primary integration point with kodemeio-docs. It supports multi-mapping configs (.outline-sync.yaml v2) with three direction modes:
push— git is the source of truth. Markdown files are pushed to Outline.pull— Outline is the source of truth. Documents are pulled into the repo.mixed— per-file.ssotmarkers decide direction.
# Dry-run a sync from a repo
kctl-outline sync run /path/to/kodemeio-docs --config .outline-sync.kod.yaml
# Apply
kctl-outline sync run /path/to/kodemeio-docs --config .outline-sync.kod.yaml --no-dry-run
# Filter to a specific direction
kctl-outline sync run . --config .outline-sync.kod.yaml --mode push --no-dry-run
# Inspect tracked state
kctl-outline sync status
kctl-outline sync diff /path/to/repo
The full spec lives in kodemeio-docs/superpowers/specs/2026-04-10-docs-outline-restructure-design.md.
Profile-aware sync routing
When a sync config declares profile: tpp, kctl-outline sync run builds a fresh client using that profile's URL and token, regardless of the active CLI profile. This means the same machine can push to both outline.kodeme.io and outline.idtpp.com without switching profiles between commands.
Layout
packages/kctl-outline/
├── pyproject.toml
├── README.md
├── src/kctl_outline/
│ ├── cli.py # Typer entry point
│ ├── commands/ # one module per Outline subresource
│ │ ├── sync.py # the Plan A/D sync subcommand
│ │ ├── documents.py
│ │ ├── collections.py
│ │ └── …
│ └── core/
│ ├── client.py # httpx wrapper
│ ├── config.py # profile resolution
│ ├── sync_config.py # SyncConfig v2 schema + v1 auto-upgrade
│ ├── sync_planner.py # pure plan_push_mapping
│ ├── sync_pull.py # pull direction (Outline → disk)
│ ├── sync_state.py # MappingSyncEntry + v1→v2 migration
│ └── sync_ssot.py # .ssot marker walker
└── tests/ # 30+ tests (pytest)
Tests
cd packages/kctl-outline
uv run --extra dev pytest tests/ -v
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kctl_outline-0.8.1.tar.gz.
File metadata
- Download URL: kctl_outline-0.8.1.tar.gz
- Upload date:
- Size: 41.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3972a89295bea34472078b48f2204d312ec39bac8d36178ef5f1a5f52482c544
|
|
| MD5 |
f69b32aeb43d944758b1fb38568ba9d0
|
|
| BLAKE2b-256 |
2738d83dcee4ee499556390220c66b0b0cb95b1bfa82e10dfacee2f04ecb60b2
|
File details
Details for the file kctl_outline-0.8.1-py3-none-any.whl.
File metadata
- Download URL: kctl_outline-0.8.1-py3-none-any.whl
- Upload date:
- Size: 49.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
894aa61faefb63ecb65e584cc0c13a47ed44d280ab8affadaa18a3a24c74e788
|
|
| MD5 |
16e2eec264848ebb6d1baebfbd1d46b2
|
|
| BLAKE2b-256 |
2904da6c76edfa35aab55bd027d4b7e97a098efd325a1aafbbbd868d87e362d4
|