romyq 0.1.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.
romyq-0.1.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Adarsh
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.
romyq-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,261 @@
1
+ Metadata-Version: 2.4
2
+ Name: romyq
3
+ Version: 0.1.0
4
+ Summary: Autonomous AI software project manager
5
+ Author-email: Adarsh <great.adarsh@gmail.com>
6
+ License: MIT
7
+ Project-URL: Repository, https://github.com/adarsh/romyq
8
+ Project-URL: Issues, https://github.com/adarsh/romyq/issues
9
+ Keywords: ai,automation,cli,developer-tools,llm
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Environment :: Console
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Operating System :: OS Independent
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Topic :: Software Development
20
+ Classifier: Topic :: Software Development :: Build Tools
21
+ Classifier: Topic :: Utilities
22
+ Requires-Python: >=3.11
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ Requires-Dist: openai>=2.0
26
+ Requires-Dist: python-dotenv>=1.0
27
+ Dynamic: license-file
28
+
29
+ # Romyq
30
+
31
+ Autonomous AI software project manager.
32
+
33
+ Write a mission. Romyq builds it.
34
+
35
+ ```
36
+ cd myproject
37
+ romyq attach
38
+ romyq run
39
+ ```
40
+
41
+ ## How it works
42
+
43
+ 1. You write a free-form mission in `mission.md`
44
+ 2. Romyq reads the mission and generates the next coding task (via DeepSeek)
45
+ 3. Claude Code implements the task and commits the result
46
+ 4. Romyq validates the commit, records the result, and repeats
47
+ 5. The loop continues until the mission is complete
48
+
49
+ The repository is the source of truth. Every completed task produces a git commit.
50
+
51
+ ## Requirements
52
+
53
+ - Python 3.11+
54
+ - [Claude Code](https://claude.ai/code) CLI installed and authenticated (`claude`)
55
+ - [DeepSeek](https://platform.deepseek.com/) API key
56
+ - git
57
+
58
+ ## Installation
59
+
60
+ ```bash
61
+ pip install romyq
62
+ ```
63
+
64
+ ## Quick start
65
+
66
+ ### Existing repository
67
+
68
+ ```bash
69
+ cd myproject
70
+ echo "DEEPSEEK_API_KEY=your-key-here" > .env
71
+ romyq attach # set up .romyq/ and create mission.md
72
+ echo "Add a REST API for user management." > mission.md
73
+ romyq run # start the loop
74
+ ```
75
+
76
+ ### New project from scratch
77
+
78
+ ```bash
79
+ mkdir myproject && cd myproject
80
+ echo "DEEPSEEK_API_KEY=your-key-here" > .env
81
+ romyq init # creates workspace/ subdirectory
82
+ echo "Build a CLI tool that converts Markdown to HTML." > mission.md
83
+ romyq run workspace # run on the workspace/ subdirectory
84
+ ```
85
+
86
+ > **Safety:** Romyq will not restore (reset) the working tree if you have
87
+ > uncommitted changes when a task starts. Commit or stash any in-progress
88
+ > work before running for full safety guarantees.
89
+
90
+ ## Commands
91
+
92
+ ### `romyq attach [path]`
93
+
94
+ Attaches Romyq to an **existing** repository. Safe to run on any project —
95
+ never modifies application code, never creates commits, never initializes git.
96
+
97
+ ```bash
98
+ cd myproject
99
+ romyq attach # attaches to current directory
100
+ romyq attach /path/to/repo
101
+ ```
102
+
103
+ What it does:
104
+ - Creates `{repo}/.romyq/` for state storage
105
+ - Adds `.romyq/` to the repo's `.gitignore`
106
+ - Creates `mission.md` in the current directory if absent
107
+
108
+ ### `romyq info [path]`
109
+
110
+ Shows what Romyq detects about a repository before starting a run.
111
+
112
+ ```bash
113
+ romyq info # inspect current directory
114
+ romyq info /path/to/repo
115
+ ```
116
+
117
+ Example output:
118
+ ```
119
+ Language: python
120
+ Frameworks: FastAPI, SQLAlchemy
121
+ Test suite: pytest (dirs: tests/ | config: pytest.ini)
122
+ Build: make dev
123
+ make test
124
+ pytest
125
+ Branch: main
126
+
127
+ Mission: ✓ found
128
+ Tasks: 0 completed (status: running)
129
+ State dir: ✓ /path/to/repo/.romyq/
130
+ ```
131
+
132
+ ### `romyq note "message" [workspace]`
133
+
134
+ Appends a steering note for the AI manager. Notes are injected into every
135
+ task generation call as highest-priority guidance, so they take effect
136
+ immediately on the next task without restarting.
137
+
138
+ ```bash
139
+ romyq note "Focus on admin UX."
140
+ romyq note "Ignore mobile support."
141
+ romyq note "Prioritize scanner stability."
142
+ ```
143
+
144
+ Notes accumulate in `{workspace}/.romyq/notes.md` and persist across runs.
145
+ They do not overwrite `mission.md`. View current notes with `romyq info`.
146
+
147
+ ### `romyq init [workspace]`
148
+
149
+ Initializes a **new** project. Creates `mission.md` if it does not exist and
150
+ bootstraps the workspace as a git repository.
151
+
152
+ ```bash
153
+ romyq init # uses workspace/ subdirectory
154
+ romyq init /path/to/repo # uses an existing directory
155
+ ```
156
+
157
+ ### `romyq run [workspace]`
158
+
159
+ Starts the autonomous development loop. Reads `mission.md` from the current
160
+ directory. Defaults to the current directory; override with a path or
161
+ `$ROMYQ_WORKSPACE`.
162
+
163
+ By default Romyq runs indefinitely. When the mission is considered complete it
164
+ logs the result and continues generating improvements (tests, docs, performance,
165
+ reliability, UX). Pass `--until-complete` to stop instead.
166
+
167
+ ```bash
168
+ romyq run # current directory, continuous
169
+ romyq run --until-complete # stop when mission is complete
170
+ romyq run /path/to/repo # explicit path
171
+ romyq run workspace # workspace/ subdirectory (romyq init default)
172
+ ROMYQ_WORKSPACE=/path/to/repo romyq run
173
+ ```
174
+
175
+ ### `romyq status [workspace]`
176
+
177
+ Shows the current run state: tasks completed, last commit, heartbeat.
178
+
179
+ ```bash
180
+ romyq status
181
+ romyq status /path/to/repo
182
+ ```
183
+
184
+ ### `romyq logs [workspace] [--last N]`
185
+
186
+ Shows recent task history. Defaults to the last 10 entries.
187
+
188
+ ```bash
189
+ romyq logs
190
+ romyq logs --last 25
191
+ romyq logs /path/to/repo --last 20
192
+ ```
193
+
194
+ ### `romyq doctor [workspace]`
195
+
196
+ Checks that all prerequisites are in place before running.
197
+
198
+ ```bash
199
+ romyq doctor
200
+ romyq doctor /path/to/repo
201
+ ```
202
+
203
+ Example output:
204
+
205
+ ```
206
+ romyq doctor
207
+
208
+ ✓ DEEPSEEK_API_KEY (set)
209
+ ✓ claude CLI (/usr/local/bin/claude)
210
+ ✓ git (/usr/bin/git)
211
+ ✓ mission.md (found)
212
+ ✓ workspace (workspace/) (exists)
213
+ ✓ workspace is a git repo (yes)
214
+
215
+ All checks passed. Ready to run: romyq run
216
+ ```
217
+
218
+ ## Configuration
219
+
220
+ | Variable | Default | Description |
221
+ |---|---|---|
222
+ | `DEEPSEEK_API_KEY` | — | Required. DeepSeek API key. |
223
+ | `ROMYQ_WORKSPACE` | current directory | Workspace directory path override. |
224
+ | `ROMYQ_CLAUDE_TIMEOUT` | `1800` | Claude subprocess timeout in seconds (default: 30 minutes). |
225
+
226
+ Place these in a `.env` file in the directory where you run `romyq`.
227
+
228
+ ## State files
229
+
230
+ Romyq writes `mission.md` to the current directory and stores all runtime
231
+ state inside the managed repository under `.romyq/`:
232
+
233
+ | Location | Purpose |
234
+ |---|---|
235
+ | `mission.md` | Your mission — you write this, lives where you run romyq |
236
+ | `<workspace>/.romyq/state.json` | Current run state |
237
+ | `<workspace>/.romyq/state.md` | Human-readable summary of the last task |
238
+ | `<workspace>/.romyq/history.json` | Full task history |
239
+ | `<workspace>/.romyq/findings.json` | Audit findings |
240
+
241
+ `.romyq/` is automatically added to the workspace's `.gitignore` so it does
242
+ not pollute the repository's commit history.
243
+
244
+ Each managed repository has its own independent `.romyq/` directory, so
245
+ multiple repositories can be managed simultaneously with separate state.
246
+
247
+ ### Working with state from any directory
248
+
249
+ `romyq status` and `romyq logs` accept a workspace argument (or read
250
+ `$ROMYQ_WORKSPACE`) so you can inspect state without being in the romyq
251
+ launch directory:
252
+
253
+ ```bash
254
+ romyq status /path/to/repo
255
+ romyq logs /path/to/repo --last 20
256
+ ROMYQ_WORKSPACE=/path/to/repo romyq status
257
+ ```
258
+
259
+ ## License
260
+
261
+ MIT
romyq-0.1.0/README.md ADDED
@@ -0,0 +1,233 @@
1
+ # Romyq
2
+
3
+ Autonomous AI software project manager.
4
+
5
+ Write a mission. Romyq builds it.
6
+
7
+ ```
8
+ cd myproject
9
+ romyq attach
10
+ romyq run
11
+ ```
12
+
13
+ ## How it works
14
+
15
+ 1. You write a free-form mission in `mission.md`
16
+ 2. Romyq reads the mission and generates the next coding task (via DeepSeek)
17
+ 3. Claude Code implements the task and commits the result
18
+ 4. Romyq validates the commit, records the result, and repeats
19
+ 5. The loop continues until the mission is complete
20
+
21
+ The repository is the source of truth. Every completed task produces a git commit.
22
+
23
+ ## Requirements
24
+
25
+ - Python 3.11+
26
+ - [Claude Code](https://claude.ai/code) CLI installed and authenticated (`claude`)
27
+ - [DeepSeek](https://platform.deepseek.com/) API key
28
+ - git
29
+
30
+ ## Installation
31
+
32
+ ```bash
33
+ pip install romyq
34
+ ```
35
+
36
+ ## Quick start
37
+
38
+ ### Existing repository
39
+
40
+ ```bash
41
+ cd myproject
42
+ echo "DEEPSEEK_API_KEY=your-key-here" > .env
43
+ romyq attach # set up .romyq/ and create mission.md
44
+ echo "Add a REST API for user management." > mission.md
45
+ romyq run # start the loop
46
+ ```
47
+
48
+ ### New project from scratch
49
+
50
+ ```bash
51
+ mkdir myproject && cd myproject
52
+ echo "DEEPSEEK_API_KEY=your-key-here" > .env
53
+ romyq init # creates workspace/ subdirectory
54
+ echo "Build a CLI tool that converts Markdown to HTML." > mission.md
55
+ romyq run workspace # run on the workspace/ subdirectory
56
+ ```
57
+
58
+ > **Safety:** Romyq will not restore (reset) the working tree if you have
59
+ > uncommitted changes when a task starts. Commit or stash any in-progress
60
+ > work before running for full safety guarantees.
61
+
62
+ ## Commands
63
+
64
+ ### `romyq attach [path]`
65
+
66
+ Attaches Romyq to an **existing** repository. Safe to run on any project —
67
+ never modifies application code, never creates commits, never initializes git.
68
+
69
+ ```bash
70
+ cd myproject
71
+ romyq attach # attaches to current directory
72
+ romyq attach /path/to/repo
73
+ ```
74
+
75
+ What it does:
76
+ - Creates `{repo}/.romyq/` for state storage
77
+ - Adds `.romyq/` to the repo's `.gitignore`
78
+ - Creates `mission.md` in the current directory if absent
79
+
80
+ ### `romyq info [path]`
81
+
82
+ Shows what Romyq detects about a repository before starting a run.
83
+
84
+ ```bash
85
+ romyq info # inspect current directory
86
+ romyq info /path/to/repo
87
+ ```
88
+
89
+ Example output:
90
+ ```
91
+ Language: python
92
+ Frameworks: FastAPI, SQLAlchemy
93
+ Test suite: pytest (dirs: tests/ | config: pytest.ini)
94
+ Build: make dev
95
+ make test
96
+ pytest
97
+ Branch: main
98
+
99
+ Mission: ✓ found
100
+ Tasks: 0 completed (status: running)
101
+ State dir: ✓ /path/to/repo/.romyq/
102
+ ```
103
+
104
+ ### `romyq note "message" [workspace]`
105
+
106
+ Appends a steering note for the AI manager. Notes are injected into every
107
+ task generation call as highest-priority guidance, so they take effect
108
+ immediately on the next task without restarting.
109
+
110
+ ```bash
111
+ romyq note "Focus on admin UX."
112
+ romyq note "Ignore mobile support."
113
+ romyq note "Prioritize scanner stability."
114
+ ```
115
+
116
+ Notes accumulate in `{workspace}/.romyq/notes.md` and persist across runs.
117
+ They do not overwrite `mission.md`. View current notes with `romyq info`.
118
+
119
+ ### `romyq init [workspace]`
120
+
121
+ Initializes a **new** project. Creates `mission.md` if it does not exist and
122
+ bootstraps the workspace as a git repository.
123
+
124
+ ```bash
125
+ romyq init # uses workspace/ subdirectory
126
+ romyq init /path/to/repo # uses an existing directory
127
+ ```
128
+
129
+ ### `romyq run [workspace]`
130
+
131
+ Starts the autonomous development loop. Reads `mission.md` from the current
132
+ directory. Defaults to the current directory; override with a path or
133
+ `$ROMYQ_WORKSPACE`.
134
+
135
+ By default Romyq runs indefinitely. When the mission is considered complete it
136
+ logs the result and continues generating improvements (tests, docs, performance,
137
+ reliability, UX). Pass `--until-complete` to stop instead.
138
+
139
+ ```bash
140
+ romyq run # current directory, continuous
141
+ romyq run --until-complete # stop when mission is complete
142
+ romyq run /path/to/repo # explicit path
143
+ romyq run workspace # workspace/ subdirectory (romyq init default)
144
+ ROMYQ_WORKSPACE=/path/to/repo romyq run
145
+ ```
146
+
147
+ ### `romyq status [workspace]`
148
+
149
+ Shows the current run state: tasks completed, last commit, heartbeat.
150
+
151
+ ```bash
152
+ romyq status
153
+ romyq status /path/to/repo
154
+ ```
155
+
156
+ ### `romyq logs [workspace] [--last N]`
157
+
158
+ Shows recent task history. Defaults to the last 10 entries.
159
+
160
+ ```bash
161
+ romyq logs
162
+ romyq logs --last 25
163
+ romyq logs /path/to/repo --last 20
164
+ ```
165
+
166
+ ### `romyq doctor [workspace]`
167
+
168
+ Checks that all prerequisites are in place before running.
169
+
170
+ ```bash
171
+ romyq doctor
172
+ romyq doctor /path/to/repo
173
+ ```
174
+
175
+ Example output:
176
+
177
+ ```
178
+ romyq doctor
179
+
180
+ ✓ DEEPSEEK_API_KEY (set)
181
+ ✓ claude CLI (/usr/local/bin/claude)
182
+ ✓ git (/usr/bin/git)
183
+ ✓ mission.md (found)
184
+ ✓ workspace (workspace/) (exists)
185
+ ✓ workspace is a git repo (yes)
186
+
187
+ All checks passed. Ready to run: romyq run
188
+ ```
189
+
190
+ ## Configuration
191
+
192
+ | Variable | Default | Description |
193
+ |---|---|---|
194
+ | `DEEPSEEK_API_KEY` | — | Required. DeepSeek API key. |
195
+ | `ROMYQ_WORKSPACE` | current directory | Workspace directory path override. |
196
+ | `ROMYQ_CLAUDE_TIMEOUT` | `1800` | Claude subprocess timeout in seconds (default: 30 minutes). |
197
+
198
+ Place these in a `.env` file in the directory where you run `romyq`.
199
+
200
+ ## State files
201
+
202
+ Romyq writes `mission.md` to the current directory and stores all runtime
203
+ state inside the managed repository under `.romyq/`:
204
+
205
+ | Location | Purpose |
206
+ |---|---|
207
+ | `mission.md` | Your mission — you write this, lives where you run romyq |
208
+ | `<workspace>/.romyq/state.json` | Current run state |
209
+ | `<workspace>/.romyq/state.md` | Human-readable summary of the last task |
210
+ | `<workspace>/.romyq/history.json` | Full task history |
211
+ | `<workspace>/.romyq/findings.json` | Audit findings |
212
+
213
+ `.romyq/` is automatically added to the workspace's `.gitignore` so it does
214
+ not pollute the repository's commit history.
215
+
216
+ Each managed repository has its own independent `.romyq/` directory, so
217
+ multiple repositories can be managed simultaneously with separate state.
218
+
219
+ ### Working with state from any directory
220
+
221
+ `romyq status` and `romyq logs` accept a workspace argument (or read
222
+ `$ROMYQ_WORKSPACE`) so you can inspect state without being in the romyq
223
+ launch directory:
224
+
225
+ ```bash
226
+ romyq status /path/to/repo
227
+ romyq logs /path/to/repo --last 20
228
+ ROMYQ_WORKSPACE=/path/to/repo romyq status
229
+ ```
230
+
231
+ ## License
232
+
233
+ MIT
@@ -0,0 +1,44 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "romyq"
7
+ version = "0.1.0"
8
+ description = "Autonomous AI software project manager"
9
+ readme = "README.md"
10
+ license = {text = "MIT"}
11
+ authors = [
12
+ {name = "Adarsh", email = "great.adarsh@gmail.com"},
13
+ ]
14
+ requires-python = ">=3.11"
15
+ keywords = ["ai", "automation", "cli", "developer-tools", "llm"]
16
+ classifiers = [
17
+ "Development Status :: 3 - Alpha",
18
+ "Environment :: Console",
19
+ "Intended Audience :: Developers",
20
+ "License :: OSI Approved :: MIT License",
21
+ "Operating System :: OS Independent",
22
+ "Programming Language :: Python :: 3",
23
+ "Programming Language :: Python :: 3.11",
24
+ "Programming Language :: Python :: 3.12",
25
+ "Programming Language :: Python :: 3.13",
26
+ "Topic :: Software Development",
27
+ "Topic :: Software Development :: Build Tools",
28
+ "Topic :: Utilities",
29
+ ]
30
+ dependencies = [
31
+ "openai>=2.0",
32
+ "python-dotenv>=1.0",
33
+ ]
34
+
35
+ [project.urls]
36
+ Repository = "https://github.com/adarsh/romyq"
37
+ Issues = "https://github.com/adarsh/romyq/issues"
38
+
39
+ [project.scripts]
40
+ romyq = "romyq.cli:main"
41
+
42
+ [tool.setuptools.packages.find]
43
+ where = ["."]
44
+ include = ["romyq*"]
@@ -0,0 +1,6 @@
1
+ from importlib.metadata import PackageNotFoundError, version
2
+
3
+ try:
4
+ __version__ = version("romyq")
5
+ except PackageNotFoundError:
6
+ __version__ = "0.1.0"
@@ -0,0 +1,4 @@
1
+ from romyq.cli import main
2
+
3
+ if __name__ == "__main__":
4
+ main()
@@ -0,0 +1,6 @@
1
+ import datetime
2
+
3
+
4
+ def log(msg: str) -> None:
5
+ ts = datetime.datetime.now().strftime("%H:%M:%S")
6
+ print(f"[{ts}] {msg}", flush=True)