Author SHA1 Message Date
forge-recoveryandCodex 1f89b55dd3 ci: follow the protected shared native build channel
KofTwentyTwo/ci-policy: ci / fork-guard (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / go-0 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / gradle-2 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / gradle-3 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / java-docker-4 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / java-maven-5 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / manifests-6 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / nix-7 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / node-8 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / python-9 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / rust-10 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / rust-11 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / rust-12 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / source-config-13 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / source-config-14 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / source-config-15 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-0 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-1 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-2 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-3 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-4 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-5 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-6 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-7 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / not-enrolled (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / content-validate-0 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / fork-deny (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-macos-0 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-macos-1 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-macos-2 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-macos-3 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-windows-4 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-windows-5 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-windows-6 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-windows-7 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / dotnet-8 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / dotnet-9 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / dotnet-10 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / dotnet-11 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-12 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-13 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-14 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-15 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-16 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-17 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-18 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-19 (pull_request) Skipped
KofTwentyTwo/ci-policy: Shared Go and Nix CI / secrets (pull_request) Successful in 21s
KofTwentyTwo/ci-policy: native / native-result (pull_request) Successful in 6s
KofTwentyTwo/ci-policy: Shared Go and Nix CI / verify (pull_request) Successful in 1m46s
KofTwentyTwo/ci-policy: Shared Go and Nix CI / nix (pull_request) Successful in 2m5s
KofTwentyTwo/ci-policy: Shared Go and Nix CI / gate (pull_request) Successful in 12s
KofTwentyTwo/ci-policy: ci / go-nix-1 (pull_request) Successful in 2m25s
KofTwentyTwo/ci-policy: ci / ci-result (pull_request) Successful in 5s
Co-Authored-By: Codex <noreply@openai.com>
2026-11-04 02:34:50 +00:00
forge-recoveryandCodex 4cd03e1534 ci: restore original native release lifecycle
KofTwentyTwo/ci-policy: ci / fork-guard (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / go-0 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / gradle-2 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / gradle-3 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / java-docker-4 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / java-maven-5 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / manifests-6 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / nix-7 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / node-8 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / python-9 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / rust-10 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / rust-11 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / rust-12 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / source-config-13 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / source-config-14 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / source-config-15 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-0 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-1 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-2 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-3 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-4 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-5 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-6 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-7 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / not-enrolled (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / content-validate-0 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / fork-deny (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-macos-0 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-macos-1 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-macos-2 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-macos-3 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-windows-4 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-windows-5 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-windows-6 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-windows-7 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / dotnet-8 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / dotnet-9 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / dotnet-10 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / dotnet-11 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-12 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-13 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-14 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-15 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-16 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-17 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-18 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-19 (pull_request) Skipped
KofTwentyTwo/ci-policy: Shared Go and Nix CI / secrets (pull_request) Successful in 11s
KofTwentyTwo/ci-policy: native / native-result (pull_request) Successful in 6s
KofTwentyTwo/ci-policy: Shared Go and Nix CI / verify (pull_request) Successful in 1m23s
KofTwentyTwo/ci-policy: Shared Go and Nix CI / nix (pull_request) Successful in 1m52s
KofTwentyTwo/ci-policy: Shared Go and Nix CI / gate (pull_request) Successful in 13s
KofTwentyTwo/ci-policy: ci / go-nix-1 (pull_request) Successful in 2m9s
KofTwentyTwo/ci-policy: ci / ci-result (pull_request) Successful in 5s
Co-Authored-By: Codex <noreply@openai.com>
2026-11-04 00:34:04 +00:00
5 changed files with 146 additions and 86 deletions

No files matched your search

+45
View File
@@ -0,0 +1,45 @@
name: Release
# Original tag-only native assets and Homebrew completion, using isolated shared phases.
on:
create:
permissions:
contents: read
concurrency:
group: release-${{ github.ref }}
cancel-in-progress: false
jobs:
build:
if: ${{ github.event_name == 'create' && github.event.ref_type == 'tag' && github.event.ref == github.ref && startsWith(github.ref, 'refs/tags/v') }}
uses: self:KofTwentyTwo/platform-ci/.gitea/workflows/go.yaml@kof-release-v1
with:
runner: linux-small
packaging: go-cross
artifact: limen
build-targets: linux/amd64:limen-linux-amd64,linux/arm64:limen-linux-arm64,darwin/amd64:limen-macos-amd64,darwin/arm64:limen-macos-arm64
publish:
needs: [build]
uses: self:KofTwentyTwo/platform-ci/.gitea/workflows/native-release-assets.yaml@kof-release-v1
permissions:
contents: write
actions: read
with:
artifact-pattern: limen-release-*
asset-names: |
limen-linux-amd64
limen-linux-arm64
limen-macos-amd64
limen-macos-arm64
checksums.txt
generate-release-notes: true
homebrew:
needs: [publish]
uses: self:KofTwentyTwo/platform-ci/.gitea/workflows/native-homebrew.yaml@kof-release-v1
permissions:
contents: read
actions: read
with:
artifact: limen-release-linux
+21 -15
View File
@@ -158,22 +158,28 @@ jobs:
depends_on "tmux"
host_cpu = RbConfig::CONFIG.fetch("host_cpu", "")
macos_arm = OS.mac? && (Hardware::CPU.arm? || host_cpu == "arm64" || RUBY_PLATFORM.start_with?("arm64-darwin"))
linux_arm = OS.linux? && (Hardware::CPU.arm? || host_cpu == "aarch64" || host_cpu == "arm64")
on_macos do
on_arm do
url "https://github.com/KofTwentyTwo/limen/releases/download/v#{version}/limen-macos-arm64"
sha256 "${SHA_MACOS_ARM64}"
end
if macos_arm
url "https://github.com/KofTwentyTwo/limen/releases/download/v#{version}/limen-macos-arm64"
sha256 "${SHA_MACOS_ARM64}"
elsif OS.mac?
url "https://github.com/KofTwentyTwo/limen/releases/download/v#{version}/limen-macos-amd64"
sha256 "${SHA_MACOS_AMD64}"
elsif linux_arm
url "https://github.com/KofTwentyTwo/limen/releases/download/v#{version}/limen-linux-arm64"
sha256 "${SHA_LINUX_ARM64}"
else
url "https://github.com/KofTwentyTwo/limen/releases/download/v#{version}/limen-linux-amd64"
sha256 "${SHA_LINUX_AMD64}"
on_intel do
url "https://github.com/KofTwentyTwo/limen/releases/download/v#{version}/limen-macos-amd64"
sha256 "${SHA_MACOS_AMD64}"
end
end
on_linux do
on_arm do
url "https://github.com/KofTwentyTwo/limen/releases/download/v#{version}/limen-linux-arm64"
sha256 "${SHA_LINUX_ARM64}"
end
on_intel do
url "https://github.com/KofTwentyTwo/limen/releases/download/v#{version}/limen-linux-amd64"
sha256 "${SHA_LINUX_AMD64}"
end
end
def install
+59 -56
View File
@@ -2,83 +2,66 @@
> *Latin: "threshold". The doorsill one crosses when entering.*
A two-stage terminal launcher TUI for tmux and SSH. The first thing you see when opening a new terminal: pick a host, pick a session, get to work.
A terminal launcher TUI for tmux and SSH. The first thing you see when you open a new terminal: pick a host, pick a session, get to work.
**Status**: Active implementation. The TUI launches host and session pickers. See [`docs/DESIGN.md`](docs/DESIGN.md) for the canonical architecture specification.
**Status:** Early implementation. The binary can launch the host and session picker; see [`docs/DESIGN.md`](docs/DESIGN.md) for the canonical spec.
---
## What It Does
## What it does
`limen` replaces tmux's default name-prompt-on-launch with an interactive, keyboard-driven TUI:
Replaces tmux's name-prompt-on-launch with a two-stage TUI:
1. **Host Picker**: Choose `localhost` or one of your declared SSH targets. Live status indicators show reachability and active session counts.
2. **Session Picker**: Pick an existing tmux session to attach to, or spawn a new named session. Behaves consistently across local and remote targets.
1. **Host picker** — choose `localhost` or one of your declared SSH targets. Live status dots show which hosts are reachable and how many sessions each has.
2. **Session picker** — pick an existing tmux session to attach to, or create a new one with a name. Works the same whether the host is local or remote.
Pressing `Esc` at any stage drops you into a fresh unnamed tmux session at the selected host with zero deliberation tax.
Press `Esc` at any point and `limen` drops you into a fresh unnamed tmux session at the appropriate host. No deliberation tax.
![limen Launcher Architecture & Session Flow](docs/architecture.png)
```
╭─ limen ─────────────────────────╮ ╭─ DETAILS ──────────────────────────╮
│ │ │ │
│ ● localhost (renova) 3 sess. │ │ prod │
│ ● prod 2 sess. │ ◀ │ ──────────────────────────────────│
│ ● dev 1 sess. │ │ deploy@prod-server-01.example.com │
│ ○ builder unreach. │ │ │
│ ● sandbox — │ │ Status: ● online │
│ │ │ Sessions: 2 (api, ops) │
│ │ │ Last attached: 2 hours ago │
│ │ │ │
│ │ │ Production application servers. │
╰─────────────────────────────────╯ ╰────────────────────────────────────╯
---
## Tech Stack & Architecture
- **Language & Runtime**: Go 1.22+
- **TUI Engine**: [Charm Bubble Tea](https://github.com/charmbracelet/bubbletea) (Elm Architecture) & [Lip Gloss](https://github.com/charmbracelet/lipgloss) styling
- **Orchestration**: `tmux` IPC & native OpenSSH background client stream
- **Configuration**: Single JSON fleet declaration at `~/.config/limen/hosts.json`
---
## Installation
### Homebrew (macOS / Linux)
```bash
brew install KofTwentyTwo/tap/limen
↑↓ navigate · enter connect · / search · ? help · esc skip
```
### Nix Flake Run
---
## Install
Install with Nix:
```bash
nix run github:KofTwentyTwo/limen
```
### Binary Releases
Pre-built binaries are available on the [Releases](https://github.com/KofTwentyTwo/limen/releases) page:
Install with Homebrew after the first tagged release:
| Platform | Architecture | Binary Name |
| :--- | :--- | :--- |
| **Linux** | x86_64 | `limen-linux-amd64` |
| **Linux** | ARM64 | `limen-linux-arm64` |
| **macOS** | Intel | `limen-macos-amd64` |
| **macOS** | Apple Silicon | `limen-macos-arm64` |
---
## Local Build & Verification
### Build from Source
```bash
# Build binary
go build -ldflags="-s -w" -o bin/limen ./cmd/limen
# Or build via Nix
nix build
brew install KofTwentyTwo/tap/limen
```
### Quality Gates & Verification
```bash
# 1. Run Unit & Integration Tests
go test -v ./...
Prebuilt binaries are published to the GitHub Releases page for:
# 2. Run Go Linter & Vet
go vet ./...
```
| Platform | Architecture | Binary |
|----------|--------------|--------|
| Linux | x64 | `limen-linux-amd64` |
| Linux | ARM64 | `limen-linux-arm64` |
| macOS | Intel | `limen-macos-amd64` |
| macOS | Apple Silicon | `limen-macos-arm64` |
---
## Configuration
## Fleet Configuration
Declare target hosts in `~/.config/limen/hosts.json`:
A single JSON file at `~/.config/limen/hosts.json` declares your fleet. Example:
```json
{
@@ -90,10 +73,30 @@ Declare target hosts in `~/.config/limen/hosts.json`:
}
```
`localhost` is implicit and managed automatically by `limen`. See [`docs/DESIGN.md`](docs/DESIGN.md) for full schema specifications.
`localhost` is implicit and always available — never declare it in this file.
See [`docs/DESIGN.md` §7.1](docs/DESIGN.md) for the full schema.
---
## Design
The full design and requirements document lives at [`docs/DESIGN.md`](docs/DESIGN.md). That document is the source of truth for what `limen` is and should be; implementation work proceeds from there.
## Status & roadmap
Implementation lands on the `develop` branch. Tagged releases publish prebuilt binaries and update the Homebrew tap.
## Contributing
See [`CONTRIBUTING.md`](CONTRIBUTING.md).
## License
[GPL-3.0](LICENSE).
## See also
- [tmux](https://github.com/tmux/tmux/wiki) — the multiplexer `limen` orchestrates
- [bubbletea](https://github.com/charmbracelet/bubbletea) — the TUI framework `limen` is built on
- [WezTerm](https://wezfurlong.org/wezterm/) — the terminal `limen` is designed to live inside
Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

+21 -15
View File
@@ -6,22 +6,28 @@ class Limen < Formula
depends_on "tmux"
host_cpu = RbConfig::CONFIG.fetch("host_cpu", "")
macos_arm = OS.mac? && (Hardware::CPU.arm? || host_cpu == "arm64" || RUBY_PLATFORM.start_with?("arm64-darwin"))
linux_arm = OS.linux? && (Hardware::CPU.arm? || host_cpu == "aarch64" || host_cpu == "arm64")
on_macos do
on_arm do
url "https://github.com/KofTwentyTwo/limen/releases/download/v#{version}/limen-macos-arm64"
sha256 "PLACEHOLDER_MACOS_ARM64_SHA256"
end
if macos_arm
url "https://github.com/KofTwentyTwo/limen/releases/download/v#{version}/limen-macos-arm64"
sha256 "PLACEHOLDER_MACOS_ARM64_SHA256"
elsif OS.mac?
url "https://github.com/KofTwentyTwo/limen/releases/download/v#{version}/limen-macos-amd64"
sha256 "PLACEHOLDER_MACOS_AMD64_SHA256"
elsif linux_arm
url "https://github.com/KofTwentyTwo/limen/releases/download/v#{version}/limen-linux-arm64"
sha256 "PLACEHOLDER_LINUX_ARM64_SHA256"
else
url "https://github.com/KofTwentyTwo/limen/releases/download/v#{version}/limen-linux-amd64"
sha256 "PLACEHOLDER_LINUX_AMD64_SHA256"
on_intel do
url "https://github.com/KofTwentyTwo/limen/releases/download/v#{version}/limen-macos-amd64"
sha256 "PLACEHOLDER_MACOS_AMD64_SHA256"
end
end
on_linux do
on_arm do
url "https://github.com/KofTwentyTwo/limen/releases/download/v#{version}/limen-linux-arm64"
sha256 "PLACEHOLDER_LINUX_ARM64_SHA256"
end
on_intel do
url "https://github.com/KofTwentyTwo/limen/releases/download/v#{version}/limen-linux-amd64"
sha256 "PLACEHOLDER_LINUX_AMD64_SHA256"
end
end
def install