runnrr 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.
runnrr-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,120 @@
1
+ Metadata-Version: 2.3
2
+ Name: runnrr
3
+ Version: 0.1.0
4
+ Summary: Deterministic, file-based execution system for autonomous agents
5
+ Author: Viraj Trivedi
6
+ Author-email: Viraj Trivedi <inf3cti0n95@gmail.com>
7
+ Requires-Dist: click>=8.3.3
8
+ Requires-Dist: filelock>=3.29.0
9
+ Requires-Dist: gitpython>=3.1.49
10
+ Requires-Dist: pydantic>=2.13.3
11
+ Requires-Dist: python-frontmatter>=1.1.0
12
+ Requires-Dist: rich>=15.0.0
13
+ Requires-Python: >=3.11
14
+ Description-Content-Type: text/markdown
15
+
16
+ # Runnrr
17
+
18
+ ```
19
+ Git for agent workspaces.
20
+ ```
21
+
22
+ Runnrr is a filesystem-native, markdown-based workspace protocol that gives coding agents (and humans) durable structured state, explicit task boundaries, and lightweight context retrieval.
23
+
24
+ It is **not** an autonomous loop runtime, a checkpoint engine, a multi-agent orchestrator, or a sprawling platform. It is simply the structured workspace that tools like Gemini CLI and Claude Code work inside to understand what to do next.
25
+
26
+ ## The Five Commands That Matter
27
+
28
+ ```bash
29
+ runnrr next # what should I work on?
30
+ runnrr context # what do I need to know?
31
+ runnrr log # what did I just do?
32
+ runnrr done # I finished this
33
+ runnrr adr # I made an architectural decision
34
+ ```
35
+
36
+ Everything else is in service of these five.
37
+
38
+ ## The Stack
39
+
40
+ ```
41
+ .runnrr/ Filesystem. Source of truth. Always.
42
+ ├── tickets/ Markdown files. Folder = state.
43
+ ├── epics/ Markdown files.
44
+ ├── adrs/ Markdown files.
45
+ └── context/ conventions.md, glossary.md. Static. Human-maintained.
46
+
47
+ .runnrr/.db SQLite. Derived only. Gitignored.
48
+ Rebuilt anytime with: runnrr index rebuild
49
+ Used for: search, next-ticket ranking, context scoring
50
+ ```
51
+
52
+ **Rule:** If `.db` is deleted, everything still works. It just gets slow. The markdown files are always the absolute source of truth.
53
+
54
+ ## Core Entities
55
+
56
+ ### Tickets
57
+ The atomic unit of work. Status is determined by which folder the markdown file lives in (`backlog`, `todo`, `in-progress`, `blocked`, `done`).
58
+ - `runnrr create "My first ticket"`
59
+
60
+ ### Epics
61
+ Strategic groupings of tickets. Status is strictly computed from child ticket states. Never stored manually.
62
+ - `runnrr epic create "Auth System"`
63
+
64
+ ### ADRs (Architecture Decision Records)
65
+ Append-only, immutable records of technical decisions. Once `accepted`, they are frozen.
66
+ - `runnrr adr create "Use JWT" --context "..." --decision "..."`
67
+
68
+ ## The Agent Workflow
69
+
70
+ Runnrr shines when used alongside an LLM CLI.
71
+
72
+ ### 1. Initialization and Context
73
+ The agent runs `runnrr exec` at the start of a session. This command automatically:
74
+ - Calls `runnrr next` to find the highest priority unblocked ticket.
75
+ - Calls `runnrr context` to dynamically assemble a token-budgeted, relevance-ranked context payload (including the ticket, blockers, Epics, related ADRs, and project conventions).
76
+ - Calculates the valid state machine actions the agent is allowed to take.
77
+
78
+ ### 2. Execution
79
+ The agent starts the work via the CLI:
80
+ ```bash
81
+ runnrr start TICKET-001
82
+ ```
83
+
84
+ As the agent writes code, it logs progress directly into the ticket via the CLI to maintain a perfect audit trail:
85
+ ```bash
86
+ runnrr log TICKET-001 "Provisioned local Elasticsearch container via Docker Compose."
87
+ ```
88
+
89
+ ### 3. Content Modification (Markdown Direct Editing)
90
+ Runnrr relies on **direct file edits** for human-readable content. To mark a task or an acceptance criterion as complete, the agent opens the `.runnrr/tickets/<status>/<TICKET-001>.md` file in their editor and changes `- [ ]` to `- [x]`.
91
+
92
+ ### 4. Completion
93
+ Once all acceptance criteria are checked off in the markdown file, the agent completes the work via the CLI:
94
+ ```bash
95
+ runnrr done TICKET-001
96
+ ```
97
+ (If any criteria are unchecked, the CLI parses the file and rejects the transition).
98
+
99
+ ## Python SDK
100
+
101
+ ```python
102
+ from runnrr import RunnrrClient
103
+
104
+ client = RunnrrClient(root=".")
105
+ ticket = client.create_ticket("Build auth middleware", tags=["auth"])
106
+ client.link(ticket.id, "EPIC-001")
107
+ client.transition(ticket.id, "in-progress")
108
+ ```
109
+
110
+ ## Development
111
+
112
+ Run tests:
113
+
114
+ ```bash
115
+ uv run pytest
116
+ ```
117
+
118
+ ## License
119
+
120
+ MIT
runnrr-0.1.0/README.md ADDED
@@ -0,0 +1,105 @@
1
+ # Runnrr
2
+
3
+ ```
4
+ Git for agent workspaces.
5
+ ```
6
+
7
+ Runnrr is a filesystem-native, markdown-based workspace protocol that gives coding agents (and humans) durable structured state, explicit task boundaries, and lightweight context retrieval.
8
+
9
+ It is **not** an autonomous loop runtime, a checkpoint engine, a multi-agent orchestrator, or a sprawling platform. It is simply the structured workspace that tools like Gemini CLI and Claude Code work inside to understand what to do next.
10
+
11
+ ## The Five Commands That Matter
12
+
13
+ ```bash
14
+ runnrr next # what should I work on?
15
+ runnrr context # what do I need to know?
16
+ runnrr log # what did I just do?
17
+ runnrr done # I finished this
18
+ runnrr adr # I made an architectural decision
19
+ ```
20
+
21
+ Everything else is in service of these five.
22
+
23
+ ## The Stack
24
+
25
+ ```
26
+ .runnrr/ Filesystem. Source of truth. Always.
27
+ ├── tickets/ Markdown files. Folder = state.
28
+ ├── epics/ Markdown files.
29
+ ├── adrs/ Markdown files.
30
+ └── context/ conventions.md, glossary.md. Static. Human-maintained.
31
+
32
+ .runnrr/.db SQLite. Derived only. Gitignored.
33
+ Rebuilt anytime with: runnrr index rebuild
34
+ Used for: search, next-ticket ranking, context scoring
35
+ ```
36
+
37
+ **Rule:** If `.db` is deleted, everything still works. It just gets slow. The markdown files are always the absolute source of truth.
38
+
39
+ ## Core Entities
40
+
41
+ ### Tickets
42
+ The atomic unit of work. Status is determined by which folder the markdown file lives in (`backlog`, `todo`, `in-progress`, `blocked`, `done`).
43
+ - `runnrr create "My first ticket"`
44
+
45
+ ### Epics
46
+ Strategic groupings of tickets. Status is strictly computed from child ticket states. Never stored manually.
47
+ - `runnrr epic create "Auth System"`
48
+
49
+ ### ADRs (Architecture Decision Records)
50
+ Append-only, immutable records of technical decisions. Once `accepted`, they are frozen.
51
+ - `runnrr adr create "Use JWT" --context "..." --decision "..."`
52
+
53
+ ## The Agent Workflow
54
+
55
+ Runnrr shines when used alongside an LLM CLI.
56
+
57
+ ### 1. Initialization and Context
58
+ The agent runs `runnrr exec` at the start of a session. This command automatically:
59
+ - Calls `runnrr next` to find the highest priority unblocked ticket.
60
+ - Calls `runnrr context` to dynamically assemble a token-budgeted, relevance-ranked context payload (including the ticket, blockers, Epics, related ADRs, and project conventions).
61
+ - Calculates the valid state machine actions the agent is allowed to take.
62
+
63
+ ### 2. Execution
64
+ The agent starts the work via the CLI:
65
+ ```bash
66
+ runnrr start TICKET-001
67
+ ```
68
+
69
+ As the agent writes code, it logs progress directly into the ticket via the CLI to maintain a perfect audit trail:
70
+ ```bash
71
+ runnrr log TICKET-001 "Provisioned local Elasticsearch container via Docker Compose."
72
+ ```
73
+
74
+ ### 3. Content Modification (Markdown Direct Editing)
75
+ Runnrr relies on **direct file edits** for human-readable content. To mark a task or an acceptance criterion as complete, the agent opens the `.runnrr/tickets/<status>/<TICKET-001>.md` file in their editor and changes `- [ ]` to `- [x]`.
76
+
77
+ ### 4. Completion
78
+ Once all acceptance criteria are checked off in the markdown file, the agent completes the work via the CLI:
79
+ ```bash
80
+ runnrr done TICKET-001
81
+ ```
82
+ (If any criteria are unchecked, the CLI parses the file and rejects the transition).
83
+
84
+ ## Python SDK
85
+
86
+ ```python
87
+ from runnrr import RunnrrClient
88
+
89
+ client = RunnrrClient(root=".")
90
+ ticket = client.create_ticket("Build auth middleware", tags=["auth"])
91
+ client.link(ticket.id, "EPIC-001")
92
+ client.transition(ticket.id, "in-progress")
93
+ ```
94
+
95
+ ## Development
96
+
97
+ Run tests:
98
+
99
+ ```bash
100
+ uv run pytest
101
+ ```
102
+
103
+ ## License
104
+
105
+ MIT
@@ -0,0 +1,30 @@
1
+ [build-system]
2
+ requires = ["uv_build>=0.9.25,<0.10.0"]
3
+ build-backend = "uv_build"
4
+
5
+ [project]
6
+ name = "runnrr"
7
+ version = "0.1.0"
8
+ description = "Deterministic, file-based execution system for autonomous agents"
9
+ readme = "README.md"
10
+ authors = [
11
+ { name = "Viraj Trivedi", email = "inf3cti0n95@gmail.com" }
12
+ ]
13
+ requires-python = ">=3.11"
14
+ dependencies = [
15
+ "click>=8.3.3",
16
+ "filelock>=3.29.0",
17
+ "gitpython>=3.1.49",
18
+ "pydantic>=2.13.3",
19
+ "python-frontmatter>=1.1.0",
20
+ "rich>=15.0.0",
21
+ ]
22
+
23
+ [project.scripts]
24
+ runnrr = "runnrr.cli.main:cli"
25
+
26
+ [dependency-groups]
27
+ dev = [
28
+ "pytest>=8.4.2",
29
+ "pytest-cov>=7.1.0",
30
+ ]
@@ -0,0 +1,35 @@
1
+ """Runnrr public package API."""
2
+
3
+ from .core.models import (
4
+ Epic,
5
+ EpicStatus,
6
+ EpicType,
7
+ Priority,
8
+ Ticket,
9
+ TicketStatus,
10
+ TicketType,
11
+ )
12
+ from .exceptions import (
13
+ IncompleteAcceptanceCriteria,
14
+ InvalidTransitionError,
15
+ RunnrrError,
16
+ TicketNotFoundError,
17
+ ValidationError,
18
+ )
19
+ from .sdk.client import RunnrrClient
20
+
21
+ __all__ = [
22
+ "RunnrrClient",
23
+ "Epic",
24
+ "EpicStatus",
25
+ "EpicType",
26
+ "Ticket",
27
+ "TicketStatus",
28
+ "TicketType",
29
+ "Priority",
30
+ "RunnrrError",
31
+ "TicketNotFoundError",
32
+ "InvalidTransitionError",
33
+ "ValidationError",
34
+ "IncompleteAcceptanceCriteria",
35
+ ]
@@ -0,0 +1 @@
1
+ """CLI package for Runnrr."""