Multi-tasking agent / wrangler of time management. A Unix-style launcher that spreads context across terminals while preserving identity.
This document defines what texas is, what it is not, and the conventions that govern its implementation and evolution.
Think of texas as a binary, not a script.
- Same name
- Same interface
- Same meaning
- Multiple implementations
Just like ls, sed, or tar:
- There is no single canonical implementation
- Behavior is defined by contract, not code
- Differences exist behind a stable interface
From the top level of the repo, texas should feel like:
“One command, many environments, zero surprises.”
texas <dir> [subdir]What it does (only this, nothing more):
- Opens one terminal per subdirectory of
<dir>(or just[subdir]if specified). - For each terminal:
- Establishes visual identity via
.themefile - Establishes context identity via
NAMESPACE - Drops the user into an interactive shell
- Establishes visual identity via
That’s it.
- No tmux.
- No editors.
- No orchestration.
- No automation beyond identity + launch.
Anything beyond this belongs above texas, not inside it.
Purpose: Give each repo/worktree a persistent, portable color identity.
Rules:
-
.themefilelives at the repo/worktree top level (same level as.git). -
Contents:
#RRGGBB -
If missing or invalid:
- Generate a random color
- Persist it
-
Once created:
- Never change it automatically
Why this matters:
- Survives symlinks, worktrees, repo moves, lifecycle reshuffles
- Two terminals pointing at the same worktree must look the same
- Two different worktrees must never fight over identity
This is repo identity, not lifecycle identity.
Purpose: Tell your eyes and hands where you are operating, not what the repo is.
Default convention:
NAMESPACE="<basename(dir)>/<basename(subdir)>"
Examples:
texas srv/prod api→prod/apitexas srv/triage v2→triage/v2
Key rule: Namespace reflects placement, not repo name.
This avoids guessing when:
- The same repo exists in multiple lifecycle stages
- Multiple versions/worktrees are active
- Names are reused intentionally
Important: NAMESPACE is contextual, not persistent. It is derived at launch time, not stored.
The repo does not enforce lifecycle semantics, but it assumes this common pattern:
srv/
prod/
triage/
wip/
dev/
Each lifecycle directory contains modules, which may be real directories, symlinks to worktrees, or versioned subdirectories (v1, v2, etc.). texas must not care which you choose. If it is a directory (or symlink to one), it is a module.
You may split versions like this:
prod/
v1/
api/
v2/
api/
This is encouraged because it avoids collisions, makes NAMESPACE self-describing, and works naturally with worktrees. But texas must not require this.
Forbidden:
if [[ "$(uname)" == "Darwin" ]]; then ...This rots.
From the top level of the repo, different OS realizations are conceptually equivalent to:
bin/
texas-linux
texas-darwin
texas-bsd
…but hidden behind the same interface.
Rule:
- Differences are isolated behind capability tags
- Never behind explicit OS checks
Tags are conceptual capabilities, not files or flags.
Required tags:
terminal.open: Can open a new terminal running a commandgit.root: Can resolve repo/worktree top levelcolor.random: Can generate entropy for#RRGGBBtheme.apply: Can apply theme via hooks
Each implementation may realize these tags differently.
Example (conceptual):
terminal.open(cmd)
Might be realized by:
- gnome-terminal
- kitty
- wezterm
- xterm
- Terminal.app wrapper
But the contract stays the same.
When terminal.open is invoked, the new terminal must:
cdinto the module directory- Export:
NAMESPACETHEMEFILECOLOR
- Source shell rc files if needed to load hooks
- Apply theme:
load_themefile "$THEMEFILE"if available- else
apply_theme_vars "$COLOR"if available
- Drop into an interactive shell
Anything less breaks the contract.
Supported hooks (optional):
load_themefile <path>: Preferred theme applicationapply_theme_vars <color>: Fallback
texas must detect hooks, never require them, and never fail if they are missing.
Git awareness:
- Git is optional
- If present: use
git rev-parse --show-toplevel - If absent: treat module directory as top level
Worktrees are first-class citizens.
.themefilebelongs to the worktree- Not the bare repo
- Not the lifecycle directory
This makes multiple worktrees safe, symlinks safe, and parallel work safe.
Branching:
- Feature branches are encouraged
- Behavior-changing PRs must update docs
- No “silent semantic changes”
Pull requests touching texas should answer:
- Does this change the contract?
- Does this introduce a new tag?
- Does this violate namespace truth, repo identity, or capability isolation?
If yes → docs first, code second.
Explicit non-goals:
- Project manager
- Task runner
- tmux wrapper
- Editor launcher
- Dependency resolver
- CI tool
Those live above texas. texas is a primitive.
texas is a Unix-style launcher that fans out terminal sessions across a directory of modules while preserving visual identity (via a persistent .themefile at repo top level) and context identity (via a derived NAMESPACE). It avoids OS branching by isolating platform differences behind capability tags, treats operating systems like interchangeable binaries, and refuses to guess repo semantics. Its power comes from doing one small thing correctly and consistently, so higher-level workflows can be built on top without friction.