Gleam CLI client for Tangled (clone of aly.codes/tg)
0

Configure Feed

Select the types of activity you want to include in your feed.

1 1 0

Clone this repository

https://git.vm.fail/nandi.uk/gtg https://git.vm.fail/did:plc:4qdilko35cq2e5x3nknotu2r
ssh://git@knot1.tangled.sh:2222/nandi.uk/gtg ssh://git@knot1.tangled.sh:2222/did:plc:4qdilko35cq2e5x3nknotu2r

For self-hosted knots, clone URLs may differ based on your setup.


README.md

gtg#

A Gleam CLI client for Tangled, the git forge built on AT Protocol.

gtg is a Gleam reimplementation of aly.codes/tg (the Go tg tool — an analogue of GitHub’s gh).

Features#

  • Auth — OAuth (browser + localhost callback + DPoP) or app-password login; multi-account store
  • Repos — list, view, clone, create, delete, edit, set-default-branch
  • Issues — list, view, create, comment, close, reopen
  • Pull requests — list, view, create (patch upload), comment, diff, checkout, close, reopen, merge
  • Strings — list, view, create, delete
  • SSH keys — list, add, delete
  • API — call authenticated XRPC endpoints
  • Browse — open a repo on tangled.org

Reads go through the Bobbin appview (default https://bobbin.klbr.net). Writes use your PDS session and knot service-auth JWTs.

Build / develop#

nix develop          # or: direnv allow  (uses .envrc → use flake)
gleam run -- --help
gleam test

One-shot without entering the shell:

nix run . -- --help
nix run . -- repo list aly.codes

Without Nix#

Requires Erlang/OTP and Gleam on PATH:

gleam build
gleam run -- --help
gleam run -- auth status

Quick start#

# Log in with OAuth (opens browser; callback on 127.0.0.1:8095)
gtg auth login alice.example.com

# Or headless with an atproto app password
gtg auth login alice.example.com xxxx-xxxx-xxxx-xxxx

# Clone a repository (SSH)
gtg repo clone aly.codes/tg

# List issues / PRs (detects origin remote in a Tangled clone)
gtg issue list
gtg pr list

# Create an issue
gtg issue create --body "Details" "Bug report" -R handle/repo

Configuration#

Precedence (highest first): flags → TG_* env → config file → defaults.

Source Keys
Flags --appview, --account, --config, --json
Env TG_APPVIEW, TG_ACCOUNT
File $XDG_CONFIG_HOME/gtg/config.toml (also reads tg/config.toml)
# ~/.config/gtg/config.toml
appview = "https://bobbin.klbr.net"

Sessions are stored under $XDG_DATA_HOME/gtg/ (not the OS keyring — unlike Go tg).

Architecture#

src/gtg.gleam           entrypoint
src/gtg/cli.gleam       command tree
src/gtg/config.gleam    flags / env / toml
src/gtg/app/            domain service (repos, issues, PRs, …)
src/gtg/atproto/        resolve, XRPC, OAuth+DPoP, password auth, PDS, sessions
src/gtg/tangled/        Bobbin appview client
src/gtg/knot/           knot RPCs
src/gtg/gitutil.gleam   git clone / remotes / patches

Differences from Go tg#

tg (Go) gtg (Gleam)
Auth OAuth + app password, OS keyring OAuth (DPoP) + app password, file store
Binary name tg gtg
Config dir ~/.config/tg ~/.config/gtg (falls back to reading tg)
Completions / man generated not yet

License#

MIT (this port). Upstream tg has its own license — see aly.codes/tg.