Metadata-Version: 2.4
Name: uluka
Version: 0.2.4
Summary: The Uluka terminal: Uluka Dango for approved accounts, and the local Uluka app on Apple silicon Macs
Author: UlukaLabs
License-Expression: LicenseRef-Proprietary
Project-URL: Homepage, https://ulukalabs.com
Classifier: Operating System :: MacOS
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX :: Linux
Classifier: Environment :: MacOS X
Classifier: Programming Language :: Python :: 3
Requires-Python: >=3.9
Description-Content-Type: text/markdown
Requires-Dist: duckdb>=1.0
Requires-Dist: httpx>=0.27
Requires-Dist: prompt-toolkit>=3.0.47
Requires-Dist: psutil>=5.9
Requires-Dist: rich>=13.7

# uluka

The Uluka terminal: a coding agent in your terminal, running **Uluka Dango**, Uluka's hosted model
(Uluka Pro; private preview for approved accounts). On Apple silicon Macs, `uluka app` also installs the
local Uluka app and opens its terminal with the on-device model.

```
pipx install uluka        # or: python3 -m pip install uluka   (Python 3.10 or newer)
uluka login               # opens ulukalabs.com/device: sign in with Google and approve the code shown
uluka                     # the terminal, in the current folder, with Uluka Dango
```

`uluka login` signs this computer in for 90 days (an account can have 5 signed-in devices; a 6th signs out
the oldest). The sign-in is kept in `~/.uluka/uluka-medium.token`, readable only by you; `uluka logout`
removes it. If Uluka Dango was asleep, the first reply can take a minute or so while it starts; the terminal
waits and says so. It works on macOS, Windows and Linux. Uluka Tiramisu is paused for now; `/model` lists it for
when it is back.

## The local Uluka app (`uluka app`)

The first time, `uluka app` opens your browser to connect this Mac: sign in with an
approved account, check that the device code matches, and choose
**Allow this Mac**. It then downloads the signed, encrypted release once
(about 9 GB; an interrupted download continues where it stopped), checks it and
opens the Uluka terminal in the same window. Later runs check that your account
is still approved and open the terminal; new releases install themselves.
`uluka app login` signs this Mac in again.

On Windows, `uluka app` opens the terminal of the installed Uluka app: install the app from
https://ulukalabs.com/app (approved account, NVIDIA GPU), open it once and sign in, then run `uluka app` in any
folder. It does not download or install the app itself.

Requirements (Mac app): an Apple silicon Mac with macOS 14 or newer, 16 GB of memory and
about 20 GB of free space while installing. Access requires an approved
account: request it at https://ulukalabs.com/app. The model stays encrypted on disk and is unlocked only while
your account is approved.

## Building

`python launcher/vendor_terminal.py` copies the repository's terminal (`uluka/` and the `app/` modules it uses)
into `src/ulukalabs/terminal/`; then build with `uv build launcher` (or `python -m build launcher`). Always
vendor first: a wheel built without it has no terminal inside.

## If `uluka` does not start

- `pip: command not found`, or pip says the environment is "externally managed" (Homebrew Python):
  use `pipx install uluka` (`brew install pipx` first), or `python3 -m pip install --user uluka`.
- "The Uluka terminal needs Python 3.10 or newer": macOS's built-in `python3` is 3.9. Install a newer one
  (`brew install python`, or python.org), or use `pipx install --python python3.12 uluka`.
- `uluka: command not found` after a `--user` install: run `python3 -m ulukalabs` instead, or add
  `~/Library/Python/3.x/bin` to your PATH.
- "macOS has not approved Uluka yet": a downloaded app must be opened once. Open Uluka from Applications; if macOS
  says it was not opened, choose **Open Anyway** in System Settings > Privacy & Security, then run `uluka app` again.
- If Uluka is open when a newer release exists, `uluka app` still opens the terminal with the installed version;
  quit Uluka and run `uluka app` again to update.
