Local-first agentic browser automation factory
Project description
nga
Local-first agentic browser automation factory. This repository bootstraps the installed Factory: a pip-installable Python package that starts a local Control Room on a random loopback address and reports application and database health.
This is the first milestone of the Dark Factory MVP (spec: issue #1, ticket:
issue #2). Per-user state lives in SQLite under %USERPROFILE%\.nga and never
inside Git.
Requirements
- A supported Python installation (3.11 or newer) on Windows.
- An internet connection for the initial
pip installof dependencies.
Install
After the package is published to PyPI, install it on a clean Windows user account:
py -3.11 -m pip install nga
nga install-skills
This installs the nga command and its Python dependencies into the active
environment. The second command installs the nga skill in
%USERPROFILE%\.agents\skills for all compatible agents on that user account.
For a local checkout, use:
py -3.11 -m pip install .
nga install-skills
Playwright's Python package is installed as a dependency. If the customer PC does not have Chrome or Edge, install the managed Chromium browser once:
py -3.11 -m playwright install chromium
Start the Factory
nga serve
The Factory:
- starts the Control Room and reports a random loopback address, for
example
Control Room: http://127.0.0.1:52341/ (loopback only); - never binds to a LAN address;
- opens the reported address in the default browser (pass
--no-opento suppress this); - creates the per-user SQLite database at
%USERPROFILE%\.nga\state.dbon first start and keeps it valid across restarts.
Set NGA_HOME to redirect per-user state to another directory:
$env:NGA_HOME = "C:\path\to\state"; nga serve
The health view at http://127.0.0.1:<port>/ shows the running application
version and the local database health.
Start an automation project
Put the approved analysis in a Markdown file, open Codex in the project folder, and invoke the installed skill:
$nga C:\path\to\analysis.md
The skill builds, tests, releases, trials, and hands over the automation. It
continues until it needs credentials, access, a business decision, or protected
approval. Internal delivery state stays in SQLite. nga status reports durable
progress.
Release the package
Build and validate a wheel from the repository root:
py -3.11 -m pip install build twine
py -3.11 -m build
py -3.11 -m twine check dist\*
For the normal release path, create a GitHub Release. The repository's
publish.yml workflow then builds and publishes the distributions with PyPI
Trusted Publishing.
For a manual upload, run this only after the package has passed the checks:
py -3.11 -m twine upload dist\*
Focused tests
Fast startup and health behavior (no network required):
py -m pytest tests/test_state.py tests/test_control_room.py -v
Clean pip-install proof on an isolated venv (requires network to download dependencies, takes a few minutes):
py -m pytest tests/test_pip_install.py -m pip_install -v
Development environment (optional):
uv venv --python 3.11
uv pip install -p .venv -e ".[dev]"
.venv\Scripts\python -m pytest
Project details
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 nga-0.4.0.tar.gz.
File metadata
- Download URL: nga-0.4.0.tar.gz
- Upload date:
- Size: 247.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
219f2b56fbda6eb923c18b834fda1272edade1efaea9c8982aca7f1ede7e10de
|
|
| MD5 |
cff15cfcf73a7690776fd38823be754a
|
|
| BLAKE2b-256 |
f48bf989205df7cc5cabaecdb3981ec2b4a1d08e3c374613897d7f2e518a9598
|
Provenance
The following attestation bundles were made for nga-0.4.0.tar.gz:
Publisher:
publish.yml on omerlefaruk/nga
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
nga-0.4.0.tar.gz -
Subject digest:
219f2b56fbda6eb923c18b834fda1272edade1efaea9c8982aca7f1ede7e10de - Sigstore transparency entry: 2339951378
- Sigstore integration time:
-
Permalink:
omerlefaruk/nga@569db65be7428e37de98fe6a5d52390723640934 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/omerlefaruk
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@569db65be7428e37de98fe6a5d52390723640934 -
Trigger Event:
release
-
Statement type:
File details
Details for the file nga-0.4.0-py3-none-any.whl.
File metadata
- Download URL: nga-0.4.0-py3-none-any.whl
- Upload date:
- Size: 200.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d295bc09171f94dfe9fd4c99131a299c3a7c8e80031cd85215a8270eeb0c114
|
|
| MD5 |
4228e3b168a56336af8344ec8246e45b
|
|
| BLAKE2b-256 |
e28f160d34fc05ee6c2b9e1f749f9d658503621cc99ab11024e2b8453e4f38b4
|
Provenance
The following attestation bundles were made for nga-0.4.0-py3-none-any.whl:
Publisher:
publish.yml on omerlefaruk/nga
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
nga-0.4.0-py3-none-any.whl -
Subject digest:
8d295bc09171f94dfe9fd4c99131a299c3a7c8e80031cd85215a8270eeb0c114 - Sigstore transparency entry: 2339951389
- Sigstore integration time:
-
Permalink:
omerlefaruk/nga@569db65be7428e37de98fe6a5d52390723640934 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/omerlefaruk
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@569db65be7428e37de98fe6a5d52390723640934 -
Trigger Event:
release
-
Statement type: