Adopt-and-thin SDLC governance framework
Project description
Emkeel
Adopt-and-thin SDLC governance for AI-assisted teams. Emkeel turns a repo into a
governed project: every change flows ticket → branch → PR → deterministic CI gates →
human-approved merge → the ticket closes itself. "done" is a computed fact, never a
self-attested flag — enforcement lives server-side (CI + branch protection), out of the
agent's reach.
Install (quick reference)
Emkeel is a zero-dependency Python CLI (needs Python 3.11+). New to the command line? Jump to the step-by-step guide below.
| Platform | Install |
|---|---|
| Windows | py -m pip install --user pipx → py -m pipx ensurepath → pipx install emkeel |
| macOS | brew install pipx → pipx install emkeel |
| Linux (with admin/sudo) | sudo apt install pipx → pipx install emkeel |
| Linux/server without sudo | pip install --user --break-system-packages emkeel (safe — zero deps) |
Upgrade: pipx upgrade emkeel · Check version: emkeel version
(Switching from pip to pipx? Run pip uninstall emkeel first to avoid two copies.)
Easiest: the setup wizard
After installing, just run the interactive wizard — it asks a few questions (language first) and does the setup. No AI, deterministic.
emkeel setup # or one-shot, without installing first: pipx run emkeel setup
It asks: language → existing repo or new project → confirms your GitHub/Jira details →
creates the branch + files + commit, and prints your remaining steps. Press c at any
menu to cancel; undo anytime with emkeel eject. (The AI-assisted and fully-manual
paths below still work if you prefer them.)
Getting started — step by step (Linux)
Two ways to set up: AI-assisted (recommended) or manual. Both start by installing Emkeel once.
First: install Emkeel (one time)
- Open a terminal — press Ctrl + Alt + T (or search "Terminal" in your apps).
- Check Python: type
python3 --version. You need 3.11+. - Install (copy-paste the whole line):
sudo apt install -y pipx && pipx ensurepath && pipx install emkeel
sudoasks for your login password (the one you use to sign in). Nothing shows on screen while you type it — that's normal. Then close the terminal and open a new one.No sudo / "not in the sudoers file"? You're not an admin. Use this (no admin, safe — Emkeel has no dependencies):
pip install --user --break-system-packages emkeel - Confirm: type
emkeel version→ should sayemkeel 0.1.x.
⭐ Option A — AI-assisted (recommended)
-
Open your project in your AI editor. Open VS Code (or Cursor) and open your project folder (File → Open Folder). New project? Make an empty folder and open that.
-
Open the AI chat panel — in VS Code with Claude Code, click the Claude icon in the sidebar. (Cursor: open the chat with Ctrl/Cmd+L.)
-
Type this in the chat:
Set up Emkeel in this repo: run
emkeel onboardand follow it.The assistant explains each step in plain language as it goes, and asks whether this is a trial (it cleans everything up afterwards) or a real adoption.
-
It will also ask you three things — answer with your details:
- your GitHub repo — like
acme/web - your Jira address — like
https://acme.atlassian.net - your Jira project key — like
SCRUM
- your GitHub repo — like
-
The assistant scaffolds everything (on a branch + PR) and gives you a few links to finish. 🔒 Security — important: create your Jira token and paste it into GitHub's secret page (the link the assistant gives you) or into a local
.envfile — NEVER paste a token or password into the chat. The assistant never needs to see your secrets. -
Merge the small PR the assistant opens. Done — your repo is governed by Emkeel.
Option B — Manual (no AI)
B1 · Existing repo — add governance to a project you already have
- New branch (use a real Jira key so the gate passes):
git checkout -b chore/SCRUM-123-adopt-emkeel
- Scaffold (your values):
emkeel init . --github-repo OWNER/REPO --jira-url https://you.atlassian.net --jira-project KEY
- Stage only Emkeel's files (not
git add -A) and commit:git add emkeel.toml .env.example .gitattributes AGENTS.md CLAUDE.md \ .github/workflows/emkeel-ci.yml .github/workflows/jira-transition.yml emkeel-governance/ git commit -m "chore(emkeel): adopt governance (SCRUM-123)" git push -u origin HEAD
- Open a Pull Request — the
gatescheck runs on it. Merge it.
B2 · New project — from an empty folder
- Create + initialize:
mkdir my-project && cd my-project && git init
- Scaffold (your values):
emkeel init . --github-repo OWNER/REPO --jira-url https://you.atlassian.net --jira-project KEY
- First commit, then create the GitHub repo and push (
git add -Ais fine here — the folder is empty and yours):git add -A && git commit -m "chore: initial commit with Emkeel governance" gh repo create OWNER/REPO --private --source=. --push
Both: finish the connect steps emkeel init printed — create a Jira token → add it as a
GitHub secret (🔒 never paste it in plain text), and turn on branch protection.
(Changed your mind? emkeel eject reverses it — see Managing Emkeel.)
Managing Emkeel
There are three separate things, so "remove" means different things — pick the one you want:
| You want to… | Command | What it touches |
|---|---|---|
| Upgrade the tool | pipx upgrade emkeel |
the emkeel program on your machine |
| Check the version | emkeel version |
(also flags a newer one on PyPI) |
| Un-govern a repo (remove Emkeel's files) | emkeel eject (alias: emkeel uninstall) |
the repo's wiring: workflows, emkeel.toml, .env.example, AGENTS.md, CLAUDE.md. Keeps emkeel-governance/ (your history) — add --purge to delete that too. |
| Re-govern a repo (undo an eject) | emkeel init (or emkeel onboard) |
re-creates the wiring; your emkeel-governance/ history is kept (unless you had used --purge) |
| Uninstall the tool | pipx uninstall emkeel |
removes the emkeel program from your machine |
emkeel ejectdoes NOT remove the tool — it reversesemkeel initinside one repo. It's a safe dry-run by default; add--yesto apply. It never strips lines you already had in.gitignore/.gitattributes. (Andemkeel onboardinstalls nothing — it only prints the guide.)
To remove Emkeel completely:
emkeel eject --purge --yes # in the repo: wiring + governance folder
pipx uninstall emkeel # the tool, from your machine
Use one install method — don't mix pipx with
pip --user/venv (that creates conflicting copies). Updates are safe: your repo's CI pinsemkeel~=0.MINOR.0, so it auto-takes patches and minors; a breaking major (e.g.0.2.0) is opt-in (you bump the pin).
What you get
- Deterministic CI gates (server-side, can't be skipped): every change links a ticket; features carry a spec with acceptance criteria; the full test suite runs on every PR.
- AI review-assist — a per-criterion verdict against the spec before you merge.
- Auto-close — merging transitions the linked Jira ticket to Done.
- Clean separation — governance artifacts live in one
emkeel-governance/folder, never shipped.
See docs/lifecycle.md for the model.
Licensed under Apache-2.0 — © 2026 EMillion Networking LTD (see LICENSE / NOTICE).
Project details
Release history Release notifications | RSS feed
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 emkeel-0.1.19.tar.gz.
File metadata
- Download URL: emkeel-0.1.19.tar.gz
- Upload date:
- Size: 25.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
841026e8ce495ea96f99bf253e1acf69f72a347f15f456af6c044de511dfe2c5
|
|
| MD5 |
72923933df1d3e42b4784d97ff4b23c9
|
|
| BLAKE2b-256 |
e2e3b9ed36885a05e015a69b91d8b0168f9ae101921891c3f3836a5aaa268c49
|
Provenance
The following attestation bundles were made for emkeel-0.1.19.tar.gz:
Publisher:
release.yml on emillionnetworking-ltd-labs/emkeel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
emkeel-0.1.19.tar.gz -
Subject digest:
841026e8ce495ea96f99bf253e1acf69f72a347f15f456af6c044de511dfe2c5 - Sigstore transparency entry: 1755817566
- Sigstore integration time:
-
Permalink:
emillionnetworking-ltd-labs/emkeel@458ece172ea06c7f7bfe3039e68ac348fb784a41 -
Branch / Tag:
refs/tags/v0.1.19 - Owner: https://github.com/emillionnetworking-ltd-labs
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@458ece172ea06c7f7bfe3039e68ac348fb784a41 -
Trigger Event:
release
-
Statement type:
File details
Details for the file emkeel-0.1.19-py3-none-any.whl.
File metadata
- Download URL: emkeel-0.1.19-py3-none-any.whl
- Upload date:
- Size: 29.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e78e3c2033f8b49024da3b7facfed4b76ea18898abef34d4f2bd5a0fb7ed201
|
|
| MD5 |
d748c8327aa5b6b85ce3ecb95169a4ff
|
|
| BLAKE2b-256 |
2e8a40989d0dbecf5166555684d37235968da54890a80aad50fff47c4985842b
|
Provenance
The following attestation bundles were made for emkeel-0.1.19-py3-none-any.whl:
Publisher:
release.yml on emillionnetworking-ltd-labs/emkeel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
emkeel-0.1.19-py3-none-any.whl -
Subject digest:
2e78e3c2033f8b49024da3b7facfed4b76ea18898abef34d4f2bd5a0fb7ed201 - Sigstore transparency entry: 1755817685
- Sigstore integration time:
-
Permalink:
emillionnetworking-ltd-labs/emkeel@458ece172ea06c7f7bfe3039e68ac348fb784a41 -
Branch / Tag:
refs/tags/v0.1.19 - Owner: https://github.com/emillionnetworking-ltd-labs
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@458ece172ea06c7f7bfe3039e68ac348fb784a41 -
Trigger Event:
release
-
Statement type: