gator-command 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- gator_command-1.0.0/LICENSE +21 -0
- gator_command-1.0.0/PKG-INFO +122 -0
- gator_command-1.0.0/README.md +98 -0
- gator_command-1.0.0/pyproject.toml +44 -0
- gator_command-1.0.0/setup.cfg +4 -0
- gator_command-1.0.0/src/gator_command/__init__.py +2 -0
- gator_command-1.0.0/src/gator_command/cli.py +137 -0
- gator_command-1.0.0/src/gator_command/scripts/crawler.py +633 -0
- gator_command-1.0.0/src/gator_command/scripts/dashboard/dashboard.css +982 -0
- gator_command-1.0.0/src/gator_command/scripts/dashboard/dashboard.html +84 -0
- gator_command-1.0.0/src/gator_command/scripts/dashboard/dashboard.js +419 -0
- gator_command-1.0.0/src/gator_command/scripts/dashboard/views/audit.js +270 -0
- gator_command-1.0.0/src/gator_command/scripts/dashboard/views/fleet.js +307 -0
- gator_command-1.0.0/src/gator_command/scripts/dashboard/views/repo.js +599 -0
- gator_command-1.0.0/src/gator_command/scripts/dashboard/views/settings.js +173 -0
- gator_command-1.0.0/src/gator_command/scripts/dashboard/views/updates.js +308 -0
- gator_command-1.0.0/src/gator_command/scripts/enforcer-prompt.md +22 -0
- gator_command-1.0.0/src/gator_command/scripts/extract-claude-sessions.py +489 -0
- gator_command-1.0.0/src/gator_command/scripts/extract-codex-sessions.py +477 -0
- gator_command-1.0.0/src/gator_command/scripts/extract-gemini-sessions.py +410 -0
- gator_command-1.0.0/src/gator_command/scripts/gator-audit.py +956 -0
- gator_command-1.0.0/src/gator_command/scripts/gator-charter-draft.py +919 -0
- gator_command-1.0.0/src/gator_command/scripts/gator-charter-lint.py +427 -0
- gator_command-1.0.0/src/gator_command/scripts/gator-charter-verify.py +606 -0
- gator_command-1.0.0/src/gator_command/scripts/gator-dashboard.py +1271 -0
- gator_command-1.0.0/src/gator_command/scripts/gator-deploy.py +916 -0
- gator_command-1.0.0/src/gator_command/scripts/gator-drift.py +569 -0
- gator_command-1.0.0/src/gator_command/scripts/gator-enforce.py +82 -0
- gator_command-1.0.0/src/gator_command/scripts/gator-fleet-intel.py +460 -0
- gator_command-1.0.0/src/gator_command/scripts/gator-fleet-report.py +615 -0
- gator_command-1.0.0/src/gator_command/scripts/gator-init-command-post.py +315 -0
- gator_command-1.0.0/src/gator_command/scripts/gator-init.py +434 -0
- gator_command-1.0.0/src/gator_command/scripts/gator-machine-id.py +153 -0
- gator_command-1.0.0/src/gator_command/scripts/gator-policy-status.py +631 -0
- gator_command-1.0.0/src/gator_command/scripts/gator-pulse.py +459 -0
- gator_command-1.0.0/src/gator_command/scripts/gator-repo-status.py +649 -0
- gator_command-1.0.0/src/gator_command/scripts/gator-session-common.py +372 -0
- gator_command-1.0.0/src/gator_command/scripts/gator-session-sink.py +831 -0
- gator_command-1.0.0/src/gator_command/scripts/gator-sessions.py +1244 -0
- gator_command-1.0.0/src/gator_command/scripts/gator-update.py +615 -0
- gator_command-1.0.0/src/gator_command/scripts/gator-version.py +38 -0
- gator_command-1.0.0/src/gator_command/scripts/gator_core.py +489 -0
- gator_command-1.0.0/src/gator_command/scripts/gator_remote.py +381 -0
- gator_command-1.0.0/src/gator_command/scripts/gator_runtime.py +142 -0
- gator_command-1.0.0/src/gator_command/scripts/gatorize-actions.sh +989 -0
- gator_command-1.0.0/src/gator_command/scripts/gatorize-lib.sh +166 -0
- gator_command-1.0.0/src/gator_command/scripts/gatorize-post.sh +394 -0
- gator_command-1.0.0/src/gator_command/scripts/gatorize.py +1163 -0
- gator_command-1.0.0/src/gator_command/scripts/gatorize.sh +185 -0
- gator_command-1.0.0/src/gator_command/scripts/generate_markdown.py +212 -0
- gator_command-1.0.0/src/gator_command/scripts/generate_wiki.py +424 -0
- gator_command-1.0.0/src/gator_command/scripts/graph_health.py +780 -0
- gator_command-1.0.0/src/gator_command/scripts/memex-lint.py +286 -0
- gator_command-1.0.0/src/gator_command/scripts/memex-lint.sh +205 -0
- gator_command-1.0.0/src/gator_command/scripts/memex.py +1472 -0
- gator_command-1.0.0/src/gator_command/scripts/memex_formatters.py +191 -0
- gator_command-1.0.0/src/gator_command/scripts/memex_state.py +236 -0
- gator_command-1.0.0/src/gator_command/scripts/spawn.py +650 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/blueprints/README.md +32 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/charterignore +53 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/charters/README.md +178 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/charters/_template.md +31 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/commands/commit.md +33 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/commands/init.md +11 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/commands/update.md +5 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/constitution.md +165 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/field-guides/README.md +25 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/gator-start-up.md +119 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/procedures/charter-alignment.md +83 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/procedures/enforcer-review.md +317 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/procedures/field-guide-generation.md +176 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/procedures/knowledge-capture.md +57 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/procedures/significance-check.md +69 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/reference-notes/concierge-responses.md +535 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/reference-notes/dangerous-patterns.md +91 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/reference-notes/dashboard-operations.md +22 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/reference-notes/enforcer-configuration.md +232 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/reference-notes/example-project.md +289 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/reference-notes/failure-modes-and-self-correction.md +72 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/reference-notes/git-workflow.md +60 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/reference-notes/identity-and-ownership.md +37 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/reference-notes/refactor-approach.md +155 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/reference-notes/what-gator-requires-from-a-model.md +108 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/reference-notes/why-navigation-coding-feels-different.md +99 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/reference-notes/workflow-profiles.md +155 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/scripts/__pycache__/enforcer-review.cpython-313.pyc +0 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/scripts/__pycache__/gator-approve.cpython-313.pyc +0 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/scripts/__pycache__/gator-init.cpython-313.pyc +0 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/scripts/__pycache__/gator-pre-commit.cpython-313.pyc +0 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/scripts/__pycache__/gator-update.cpython-313.pyc +0 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/scripts/enforcer-prompt.md +55 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/scripts/enforcer-review.py +1551 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/scripts/gator-approve.py +139 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/scripts/gator-enforce.py +82 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/scripts/gator-init.py +434 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/scripts/gator-pre-commit.py +2670 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/scripts/gator-pulse.py +459 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/scripts/gator-update.py +615 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/scripts/gator-version.py +38 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/scripts/gator_core.py +487 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/scripts/hooks/__pycache__/commit-msgcpython-313.pyc +0 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/scripts/hooks/__pycache__/post-commitcpython-313.pyc +0 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/scripts/hooks/__pycache__/pre-commitcpython-313.pyc +0 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/scripts/hooks/commit-msg +5 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/scripts/hooks/post-commit +7 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/scripts/hooks/pre-commit +5 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/sessions/.gitignore +7 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/vault/.gitkeep +0 -0
- gator_command-1.0.0/src/gator_command/templates/gator-starter/whiteboard.md +5 -0
- gator_command-1.0.0/src/gator_command.egg-info/PKG-INFO +122 -0
- gator_command-1.0.0/src/gator_command.egg-info/SOURCES.txt +129 -0
- gator_command-1.0.0/src/gator_command.egg-info/dependency_links.txt +1 -0
- gator_command-1.0.0/src/gator_command.egg-info/entry_points.txt +2 -0
- gator_command-1.0.0/src/gator_command.egg-info/top_level.txt +1 -0
- gator_command-1.0.0/tests/test_audit.py +116 -0
- gator_command-1.0.0/tests/test_audit_integration.py +171 -0
- gator_command-1.0.0/tests/test_charter_lint.py +333 -0
- gator_command-1.0.0/tests/test_deploy.py +99 -0
- gator_command-1.0.0/tests/test_drift.py +90 -0
- gator_command-1.0.0/tests/test_fleet_intel.py +189 -0
- gator_command-1.0.0/tests/test_fleet_report.py +84 -0
- gator_command-1.0.0/tests/test_gator_core.py +108 -0
- gator_command-1.0.0/tests/test_gatorize.py +131 -0
- gator_command-1.0.0/tests/test_hooks.py +222 -0
- gator_command-1.0.0/tests/test_init.py +129 -0
- gator_command-1.0.0/tests/test_memex_state.py +52 -0
- gator_command-1.0.0/tests/test_packaging.py +186 -0
- gator_command-1.0.0/tests/test_pre_commit.py +1469 -0
- gator_command-1.0.0/tests/test_remote.py +395 -0
- gator_command-1.0.0/tests/test_session_sink.py +431 -0
- gator_command-1.0.0/tests/test_sessions.py +540 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Cumberland Laboratories, Inc.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: gator-command
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Git-native governance for AI-assisted engineering
|
|
5
|
+
Author-email: Cumberland Laboratories <support@cumberlandlaboratories.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/cumberland-laboratories/gator
|
|
8
|
+
Project-URL: Repository, https://github.com/cumberland-laboratories/gator
|
|
9
|
+
Keywords: governance,ai,git,charters,audit,compliance
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
19
|
+
Classifier: Topic :: Software Development :: Version Control :: Git
|
|
20
|
+
Requires-Python: >=3.9
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
License-File: LICENSE
|
|
23
|
+
Dynamic: license-file
|
|
24
|
+
|
|
25
|
+
# Gator Command
|
|
26
|
+
|
|
27
|
+
The command post for [Gator](https://github.com/cumberland-laboratories/gator) — AI-assisted engineering governance.
|
|
28
|
+
|
|
29
|
+
## How to Use This Repo
|
|
30
|
+
|
|
31
|
+
**Open it in an AI coding assistant.** Claude Code, Codex, Gemini CLI, Cursor — whichever you use. The agent reads the constitution and acts as your concierge: it knows the architecture, the configuration options, the procedures, and the fleet state. Ask it what you need.
|
|
32
|
+
|
|
33
|
+
Gator is designed to be operated *with* an AI agent, not studied as documentation. The governance layer is markdown that agents read natively. The concierge layer routes your questions to the right procedures and reference material. The agent is the interface.
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
You: "gator init"
|
|
37
|
+
You: "Gatorize my project at ~/code/my-app"
|
|
38
|
+
You: "Set up an enforcer using GPT as the reviewer"
|
|
39
|
+
You: "Check if the charters still match the code"
|
|
40
|
+
You: "What's the status of the fleet?"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## What Gator Does
|
|
44
|
+
|
|
45
|
+
Gator governs AI-assisted coding. It keeps human comprehension synchronized with AI-generated code through constitutions, module charters, deterministic commit gates, and cross-model enforcement.
|
|
46
|
+
|
|
47
|
+
### Use Cases
|
|
48
|
+
|
|
49
|
+
**Solo developer with one repo** — You want the AI agent to maintain a map of your codebase (charters), enforce that the map stays current (commit gate), and preserve session context across conversations (knowledge layer). Install Gator, bootstrap charters, and the loop runs from there.
|
|
50
|
+
|
|
51
|
+
**Solo developer with multiple repos** — Same as above, plus: this command post becomes your cross-repo control plane. One org policy propagated to every repo. Fleet status, drift detection, and audit dashboards from one place.
|
|
52
|
+
|
|
53
|
+
**Team with shared repos** — Gator's knowledge layer travels with the repo via git. When a teammate (human or AI) opens the repo, they get the full architectural context — mission, charters, threads, decisions. The enforcer provides independent review from a different model than the one writing code.
|
|
54
|
+
|
|
55
|
+
**Compliance and audit** — Every commit carries `Gator-*` trailers (change type, significance, charter status, agent identity). Session summaries provide durable evidence of what was decided and who was supervising. Fleet-wide audit reports aggregate governance health across repos.
|
|
56
|
+
|
|
57
|
+
### Configurations
|
|
58
|
+
|
|
59
|
+
Gator is model-neutral and modular. The PI chooses the configuration that fits their stack:
|
|
60
|
+
|
|
61
|
+
| Decision | Options |
|
|
62
|
+
|----------|---------|
|
|
63
|
+
| **Primary agent** | Claude Code, Codex CLI, Gemini CLI, Cursor, any markdown-aware AI tool |
|
|
64
|
+
| **Enforcer model** | Anthropic Sonnet, OpenAI GPT, Google Gemini, local via Ollama, or none |
|
|
65
|
+
| **Review cadence** | Light (lint only), Standard (lint + model review on significant changes), Rigorous (pre-code + post-code review) |
|
|
66
|
+
| **Fleet scope** | Single repo (no command post needed), multi-repo (this command post), remote repos (bare cache scanning) |
|
|
67
|
+
| **Session archaeology** | Off, local spool, committed summaries (git-tracked audit trail) |
|
|
68
|
+
|
|
69
|
+
The concierge agent walks you through these choices. You don't need to read configuration docs — tell the agent what you want and it configures the system.
|
|
70
|
+
|
|
71
|
+
## Quick Start
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
# Gatorize an existing project repo
|
|
75
|
+
bash gator-command/scripts/gatorize.sh /path/to/your/project
|
|
76
|
+
|
|
77
|
+
# Then open that project in your AI assistant — the concierge bootstrap begins
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
For fleet operations (from within this command post):
|
|
81
|
+
```bash
|
|
82
|
+
# Fleet status
|
|
83
|
+
python gator-command/scripts/gator-fleet-report.py
|
|
84
|
+
|
|
85
|
+
# Policy drift across all governed repos
|
|
86
|
+
python gator-command/scripts/gator-drift.py
|
|
87
|
+
|
|
88
|
+
# Audit dashboard
|
|
89
|
+
python gator-command/scripts/gator-audit.py
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Architecture at a Glance
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
This repo (command post):
|
|
96
|
+
constitution.md Governance rules for this command post
|
|
97
|
+
gator-command/ Knowledge graph + machinery + fleet tooling
|
|
98
|
+
scripts/ CLI tooling (gatorize, fleet-report, drift, audit)
|
|
99
|
+
templates/ Starter kit deployed to project repos
|
|
100
|
+
procedures/ Standards and workflows
|
|
101
|
+
reference-notes/ Concierge knowledge (the agent reads these)
|
|
102
|
+
|
|
103
|
+
Each governed repo:
|
|
104
|
+
.gator/
|
|
105
|
+
constitution.md Per-repo governance rules
|
|
106
|
+
charters/ Module maps (the intelligent codebase layer)
|
|
107
|
+
scripts/ Hooks + enforcer
|
|
108
|
+
field-guides/ Language pattern references (optional)
|
|
109
|
+
command-post.md Thin link back to this command post
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Multi-Model Architecture
|
|
113
|
+
|
|
114
|
+
The constitutions are the interface contract. Any model that reads markdown and follows instructions can operate the system.
|
|
115
|
+
|
|
116
|
+
- **Primary agent**: Reads charters, writes code, updates the knowledge layer
|
|
117
|
+
- **Enforcer**: Different model, read-only, audits the agent's work against charters
|
|
118
|
+
- **The architecture outlives any individual model** — switch tools mid-project without losing context
|
|
119
|
+
|
|
120
|
+
## License
|
|
121
|
+
|
|
122
|
+
MIT — [Cumberland Laboratories](https://github.com/cumberland-laboratories)
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Gator Command
|
|
2
|
+
|
|
3
|
+
The command post for [Gator](https://github.com/cumberland-laboratories/gator) — AI-assisted engineering governance.
|
|
4
|
+
|
|
5
|
+
## How to Use This Repo
|
|
6
|
+
|
|
7
|
+
**Open it in an AI coding assistant.** Claude Code, Codex, Gemini CLI, Cursor — whichever you use. The agent reads the constitution and acts as your concierge: it knows the architecture, the configuration options, the procedures, and the fleet state. Ask it what you need.
|
|
8
|
+
|
|
9
|
+
Gator is designed to be operated *with* an AI agent, not studied as documentation. The governance layer is markdown that agents read natively. The concierge layer routes your questions to the right procedures and reference material. The agent is the interface.
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
You: "gator init"
|
|
13
|
+
You: "Gatorize my project at ~/code/my-app"
|
|
14
|
+
You: "Set up an enforcer using GPT as the reviewer"
|
|
15
|
+
You: "Check if the charters still match the code"
|
|
16
|
+
You: "What's the status of the fleet?"
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## What Gator Does
|
|
20
|
+
|
|
21
|
+
Gator governs AI-assisted coding. It keeps human comprehension synchronized with AI-generated code through constitutions, module charters, deterministic commit gates, and cross-model enforcement.
|
|
22
|
+
|
|
23
|
+
### Use Cases
|
|
24
|
+
|
|
25
|
+
**Solo developer with one repo** — You want the AI agent to maintain a map of your codebase (charters), enforce that the map stays current (commit gate), and preserve session context across conversations (knowledge layer). Install Gator, bootstrap charters, and the loop runs from there.
|
|
26
|
+
|
|
27
|
+
**Solo developer with multiple repos** — Same as above, plus: this command post becomes your cross-repo control plane. One org policy propagated to every repo. Fleet status, drift detection, and audit dashboards from one place.
|
|
28
|
+
|
|
29
|
+
**Team with shared repos** — Gator's knowledge layer travels with the repo via git. When a teammate (human or AI) opens the repo, they get the full architectural context — mission, charters, threads, decisions. The enforcer provides independent review from a different model than the one writing code.
|
|
30
|
+
|
|
31
|
+
**Compliance and audit** — Every commit carries `Gator-*` trailers (change type, significance, charter status, agent identity). Session summaries provide durable evidence of what was decided and who was supervising. Fleet-wide audit reports aggregate governance health across repos.
|
|
32
|
+
|
|
33
|
+
### Configurations
|
|
34
|
+
|
|
35
|
+
Gator is model-neutral and modular. The PI chooses the configuration that fits their stack:
|
|
36
|
+
|
|
37
|
+
| Decision | Options |
|
|
38
|
+
|----------|---------|
|
|
39
|
+
| **Primary agent** | Claude Code, Codex CLI, Gemini CLI, Cursor, any markdown-aware AI tool |
|
|
40
|
+
| **Enforcer model** | Anthropic Sonnet, OpenAI GPT, Google Gemini, local via Ollama, or none |
|
|
41
|
+
| **Review cadence** | Light (lint only), Standard (lint + model review on significant changes), Rigorous (pre-code + post-code review) |
|
|
42
|
+
| **Fleet scope** | Single repo (no command post needed), multi-repo (this command post), remote repos (bare cache scanning) |
|
|
43
|
+
| **Session archaeology** | Off, local spool, committed summaries (git-tracked audit trail) |
|
|
44
|
+
|
|
45
|
+
The concierge agent walks you through these choices. You don't need to read configuration docs — tell the agent what you want and it configures the system.
|
|
46
|
+
|
|
47
|
+
## Quick Start
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
# Gatorize an existing project repo
|
|
51
|
+
bash gator-command/scripts/gatorize.sh /path/to/your/project
|
|
52
|
+
|
|
53
|
+
# Then open that project in your AI assistant — the concierge bootstrap begins
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
For fleet operations (from within this command post):
|
|
57
|
+
```bash
|
|
58
|
+
# Fleet status
|
|
59
|
+
python gator-command/scripts/gator-fleet-report.py
|
|
60
|
+
|
|
61
|
+
# Policy drift across all governed repos
|
|
62
|
+
python gator-command/scripts/gator-drift.py
|
|
63
|
+
|
|
64
|
+
# Audit dashboard
|
|
65
|
+
python gator-command/scripts/gator-audit.py
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Architecture at a Glance
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
This repo (command post):
|
|
72
|
+
constitution.md Governance rules for this command post
|
|
73
|
+
gator-command/ Knowledge graph + machinery + fleet tooling
|
|
74
|
+
scripts/ CLI tooling (gatorize, fleet-report, drift, audit)
|
|
75
|
+
templates/ Starter kit deployed to project repos
|
|
76
|
+
procedures/ Standards and workflows
|
|
77
|
+
reference-notes/ Concierge knowledge (the agent reads these)
|
|
78
|
+
|
|
79
|
+
Each governed repo:
|
|
80
|
+
.gator/
|
|
81
|
+
constitution.md Per-repo governance rules
|
|
82
|
+
charters/ Module maps (the intelligent codebase layer)
|
|
83
|
+
scripts/ Hooks + enforcer
|
|
84
|
+
field-guides/ Language pattern references (optional)
|
|
85
|
+
command-post.md Thin link back to this command post
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Multi-Model Architecture
|
|
89
|
+
|
|
90
|
+
The constitutions are the interface contract. Any model that reads markdown and follows instructions can operate the system.
|
|
91
|
+
|
|
92
|
+
- **Primary agent**: Reads charters, writes code, updates the knowledge layer
|
|
93
|
+
- **Enforcer**: Different model, read-only, audits the agent's work against charters
|
|
94
|
+
- **The architecture outlives any individual model** — switch tools mid-project without losing context
|
|
95
|
+
|
|
96
|
+
## License
|
|
97
|
+
|
|
98
|
+
MIT — [Cumberland Laboratories](https://github.com/cumberland-laboratories)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=64", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "gator-command"
|
|
7
|
+
version = "1.0.0"
|
|
8
|
+
description = "Git-native governance for AI-assisted engineering"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
license = {text = "MIT"}
|
|
11
|
+
requires-python = ">=3.9"
|
|
12
|
+
authors = [
|
|
13
|
+
{name = "Cumberland Laboratories", email = "support@cumberlandlaboratories.com"},
|
|
14
|
+
]
|
|
15
|
+
urls = {Homepage = "https://github.com/cumberland-laboratories/gator", Repository = "https://github.com/cumberland-laboratories/gator"}
|
|
16
|
+
keywords = ["governance", "ai", "git", "charters", "audit", "compliance"]
|
|
17
|
+
classifiers = [
|
|
18
|
+
"Development Status :: 4 - Beta",
|
|
19
|
+
"License :: OSI Approved :: MIT License",
|
|
20
|
+
"Programming Language :: Python :: 3",
|
|
21
|
+
"Programming Language :: Python :: 3.9",
|
|
22
|
+
"Programming Language :: Python :: 3.10",
|
|
23
|
+
"Programming Language :: Python :: 3.11",
|
|
24
|
+
"Programming Language :: Python :: 3.12",
|
|
25
|
+
"Programming Language :: Python :: 3.13",
|
|
26
|
+
"Topic :: Software Development :: Quality Assurance",
|
|
27
|
+
"Topic :: Software Development :: Version Control :: Git",
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
[project.scripts]
|
|
31
|
+
gator = "gator_command.cli:main"
|
|
32
|
+
|
|
33
|
+
[tool.setuptools.packages.find]
|
|
34
|
+
where = ["src"]
|
|
35
|
+
|
|
36
|
+
[tool.setuptools.package-data]
|
|
37
|
+
gator_command = [
|
|
38
|
+
"scripts/*.py",
|
|
39
|
+
"scripts/*.sh",
|
|
40
|
+
"scripts/*.md",
|
|
41
|
+
"scripts/dashboard/**/*",
|
|
42
|
+
"templates/**/*",
|
|
43
|
+
"templates/**/.*",
|
|
44
|
+
]
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"""
|
|
2
|
+
gator — unified CLI for Gator Command.
|
|
3
|
+
|
|
4
|
+
Dispatches to existing Gator scripts. This is the thin wrapper that makes
|
|
5
|
+
`pipx install gator-command` → `gator <command>` work.
|
|
6
|
+
|
|
7
|
+
For source-checkout and public-clone modes, scripts are resolved from the
|
|
8
|
+
filesystem relative to gator_runtime.py. For installed-package mode,
|
|
9
|
+
scripts are resolved from the package installation.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import argparse
|
|
13
|
+
import subprocess
|
|
14
|
+
import sys
|
|
15
|
+
from pathlib import Path
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
# ---------------------------------------------------------------------------
|
|
19
|
+
# Script resolution
|
|
20
|
+
# ---------------------------------------------------------------------------
|
|
21
|
+
|
|
22
|
+
def _find_scripts_dir():
|
|
23
|
+
"""Find the Gator scripts directory.
|
|
24
|
+
|
|
25
|
+
Resolution order:
|
|
26
|
+
1. Package-bundled scripts (works for pip install and pipx install)
|
|
27
|
+
2. Source checkout: gator-command/scripts/ relative to repo root
|
|
28
|
+
3. Public clone: gator-engine/scripts/ relative to repo root
|
|
29
|
+
"""
|
|
30
|
+
cli_dir = Path(__file__).resolve().parent
|
|
31
|
+
|
|
32
|
+
# Installed package: scripts bundled as package data
|
|
33
|
+
candidate = cli_dir / "scripts"
|
|
34
|
+
if candidate.is_dir() and (candidate / "gator_core.py").exists():
|
|
35
|
+
return candidate
|
|
36
|
+
|
|
37
|
+
# Source checkout: cli.py is at src/gator_command/cli.py → repo root is ../../
|
|
38
|
+
repo_root = cli_dir.parent.parent
|
|
39
|
+
candidate = repo_root / "gator-command" / "scripts"
|
|
40
|
+
if candidate.is_dir() and (candidate / "gator_core.py").exists():
|
|
41
|
+
return candidate
|
|
42
|
+
|
|
43
|
+
# Public clone: gator-engine/scripts/
|
|
44
|
+
candidate = repo_root / "gator-engine" / "scripts"
|
|
45
|
+
if candidate.is_dir() and (candidate / "gator_core.py").exists():
|
|
46
|
+
return candidate
|
|
47
|
+
|
|
48
|
+
return None
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def _run_script(scripts_dir, script_name, args):
|
|
52
|
+
"""Run a Gator script by name, forwarding arguments."""
|
|
53
|
+
script_path = scripts_dir / script_name
|
|
54
|
+
if not script_path.exists():
|
|
55
|
+
print(f" Error: script not found: {script_name}", file=sys.stderr)
|
|
56
|
+
print(f" Looked in: {scripts_dir}", file=sys.stderr)
|
|
57
|
+
sys.exit(1)
|
|
58
|
+
result = subprocess.run(
|
|
59
|
+
[sys.executable, str(script_path)] + args,
|
|
60
|
+
)
|
|
61
|
+
sys.exit(result.returncode)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
# ---------------------------------------------------------------------------
|
|
65
|
+
# Command definitions
|
|
66
|
+
# ---------------------------------------------------------------------------
|
|
67
|
+
|
|
68
|
+
COMMANDS = {
|
|
69
|
+
"version": ("gator-version.py", "Show Gator version"),
|
|
70
|
+
"init": ("gator-init.py", "Run session-opening procedure"),
|
|
71
|
+
"pulse": ("gator-pulse.py", "Generate strategic operations brief"),
|
|
72
|
+
"dashboard": ("gator-dashboard.py", "Start the governance dashboard"),
|
|
73
|
+
"audit": ("gator-audit.py", "Run governance audit"),
|
|
74
|
+
"drift": ("gator-drift.py", "Check fleet for governance drift"),
|
|
75
|
+
"fleet": ("gator-fleet-report.py", "Fleet status report"),
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
# ---------------------------------------------------------------------------
|
|
80
|
+
# Entry point
|
|
81
|
+
# ---------------------------------------------------------------------------
|
|
82
|
+
|
|
83
|
+
def main():
|
|
84
|
+
parser = argparse.ArgumentParser(
|
|
85
|
+
prog="gator",
|
|
86
|
+
description="Gator — Git-native governance for AI-assisted engineering",
|
|
87
|
+
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
88
|
+
epilog=(
|
|
89
|
+
"examples:\n"
|
|
90
|
+
" gator version Show installed version\n"
|
|
91
|
+
" gator init Start a governed session\n"
|
|
92
|
+
" gator dashboard Launch the governance dashboard\n"
|
|
93
|
+
" gator pulse Generate the strategic operations brief\n"
|
|
94
|
+
),
|
|
95
|
+
)
|
|
96
|
+
parser.add_argument(
|
|
97
|
+
"--version", "-V",
|
|
98
|
+
action="version",
|
|
99
|
+
version=f"%(prog)s {_get_version()}",
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
sub = parser.add_subparsers(dest="command")
|
|
103
|
+
for cmd_name, (_, help_text) in COMMANDS.items():
|
|
104
|
+
sub.add_parser(cmd_name, help=help_text, add_help=False)
|
|
105
|
+
|
|
106
|
+
args, remaining = parser.parse_known_args()
|
|
107
|
+
|
|
108
|
+
if not args.command:
|
|
109
|
+
parser.print_help()
|
|
110
|
+
sys.exit(0)
|
|
111
|
+
|
|
112
|
+
scripts_dir = _find_scripts_dir()
|
|
113
|
+
if not scripts_dir:
|
|
114
|
+
print(" Error: Gator scripts directory not found.", file=sys.stderr)
|
|
115
|
+
print(" Run from a Gator checkout, or install with: pipx install gator-command", file=sys.stderr)
|
|
116
|
+
sys.exit(1)
|
|
117
|
+
|
|
118
|
+
script_name, _ = COMMANDS[args.command]
|
|
119
|
+
_run_script(scripts_dir, script_name, remaining)
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def _get_version():
|
|
123
|
+
"""Get version from package metadata or VERSION file."""
|
|
124
|
+
try:
|
|
125
|
+
from gator_command import __version__
|
|
126
|
+
return __version__
|
|
127
|
+
except ImportError:
|
|
128
|
+
pass
|
|
129
|
+
# Fallback: read VERSION file
|
|
130
|
+
version_file = Path(__file__).resolve().parent.parent.parent / "VERSION"
|
|
131
|
+
if version_file.exists():
|
|
132
|
+
return version_file.read_text(encoding="utf-8").strip()
|
|
133
|
+
return "unknown"
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
if __name__ == "__main__":
|
|
137
|
+
main()
|