ranni-cli 0.0.0-stage → 0.2.3
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.
- package/README.md +70 -2
- package/bin/ranni.js +2 -0
- package/package.json +29 -4
- package/src/cli.ts +71 -0
- package/src/derive.ts +90 -0
- package/src/errors.ts +2 -0
- package/src/git.ts +173 -0
- package/src/host.ts +144 -0
- package/src/index.ts +7 -0
- package/src/init.ts +184 -0
- package/src/project.ts +32 -0
- package/src/relic.ts +89 -0
- package/src/render.ts +81 -0
- package/src/runner.ts +39 -0
- package/src/status.ts +182 -0
- package/src/types.ts +83 -0
- package/templates/ranni/SKILL.md +83 -0
- package/templates/ranni/references/closing.md +37 -0
- package/templates/ranni/references/work-items.md +60 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ranni
|
|
3
|
+
description: Use Ranni's work frontier to pick up, continue, hand off, and close in-flight work that outlives one session or one agent. Use when the repository's relic.yaml declares a work record kind, the developer names a work item such as WORK-042, the current branch name contains a work identity, or the developer asks to track, split, hand off, or check ongoing work.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Ranni
|
|
7
|
+
|
|
8
|
+
Ranni keeps the living state of in-flight work as ordinary Relic records, so any agent,
|
|
9
|
+
harness, or human can continue it. It never runs agents and has no runtime. You execute
|
|
10
|
+
with whatever this harness offers, and you leave traces the next executor can follow.
|
|
11
|
+
|
|
12
|
+
Ranni requires Relic. Use the Relic skill for knowledge work: roasts, specifications,
|
|
13
|
+
records, and persistence. This skill covers work items only.
|
|
14
|
+
|
|
15
|
+
## Find the Work
|
|
16
|
+
|
|
17
|
+
1. Read the `relic.yaml` that Relic selects. The work kind is `work` unless the
|
|
18
|
+
developer names another declared kind. If no work kind is declared, say so and
|
|
19
|
+
continue without Ranni.
|
|
20
|
+
2. Locate the item. Use the one the developer names, then the identity in the current
|
|
21
|
+
branch name, then a search by subject, using native tools or `relic search --kind work`.
|
|
22
|
+
3. Read its intent, its current frontier, and the links that matter before acting.
|
|
23
|
+
|
|
24
|
+
A small task needs no work item. Using Ranni creates no obligation.
|
|
25
|
+
|
|
26
|
+
## Leave Traces
|
|
27
|
+
|
|
28
|
+
Every executor follows the same contract, including you:
|
|
29
|
+
|
|
30
|
+
- the branch name contains the identity, for example `work/WORK-042-push`;
|
|
31
|
+
- every commit carries the trailer `Work: WORK-042`;
|
|
32
|
+
- the pull request title mentions the identity, or its body carries `Work: WORK-042`.
|
|
33
|
+
Mentioning another item in the body ("depends on WORK-041") does not tie the PR to it.
|
|
34
|
+
|
|
35
|
+
To parallelize, use what this harness offers: subagents, sessions, worktrees. Hand each
|
|
36
|
+
executor the identity and these rules, and ask it to rewrite the frontier when it stops.
|
|
37
|
+
Never spawn, schedule, or poll on Ranni's behalf.
|
|
38
|
+
|
|
39
|
+
## Keep the Frontier Current
|
|
40
|
+
|
|
41
|
+
Rewrite the current frontier, never append to it. Rewrite it when:
|
|
42
|
+
|
|
43
|
+
- the plan changes;
|
|
44
|
+
- you learn something the next agent needs;
|
|
45
|
+
- you are blocked;
|
|
46
|
+
- you are about to end a turn that changed something.
|
|
47
|
+
|
|
48
|
+
Say where the work stopped, what was learned, what changed, and the next step. Write it
|
|
49
|
+
for an agent reading it cold. Git keeps the history.
|
|
50
|
+
|
|
51
|
+
You may, without asking:
|
|
52
|
+
|
|
53
|
+
- rewrite the frontier;
|
|
54
|
+
- create sub-items that refine the parent's intent;
|
|
55
|
+
- set or clear `waiting`.
|
|
56
|
+
|
|
57
|
+
Ask the developer before you change or cut intent, drop scope, or close a work item.
|
|
58
|
+
|
|
59
|
+
## Escalate Without Blocking
|
|
60
|
+
|
|
61
|
+
When a decision belongs to the developer:
|
|
62
|
+
|
|
63
|
+
1. set the frontmatter key `waiting` to a one-line question;
|
|
64
|
+
2. explain the options in the frontier and recommend one;
|
|
65
|
+
3. keep working on unblocked parts, and stop mutating the blocked boundary.
|
|
66
|
+
|
|
67
|
+
If the developer is present, also ask in the conversation. Remove `waiting` once the
|
|
68
|
+
decision is made.
|
|
69
|
+
|
|
70
|
+
## Route References Deliberately
|
|
71
|
+
|
|
72
|
+
Read a reference only when its trigger fires.
|
|
73
|
+
|
|
74
|
+
**Creating a work item or a sub-item** → [work-items.md](references/work-items.md)
|
|
75
|
+
**The work landed, or the developer asks to close it** → [closing.md](references/closing.md)
|
|
76
|
+
|
|
77
|
+
## Boundaries
|
|
78
|
+
|
|
79
|
+
- Do not write a status field, queue, lock, or counter. State comes from Git and the Git
|
|
80
|
+
host at read time.
|
|
81
|
+
- Do not treat harness-specific session state as evidence.
|
|
82
|
+
- Do not dispatch follow-up work automatically or require a polling loop.
|
|
83
|
+
- Do not add a Ranni configuration file or reserve topology inside Relic.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Closing
|
|
2
|
+
|
|
3
|
+
Read this reference only when a work item's work has landed, or when the developer asks
|
|
4
|
+
to close one.
|
|
5
|
+
|
|
6
|
+
## Contents
|
|
7
|
+
|
|
8
|
+
- Confirm It Landed — evidence before proposing
|
|
9
|
+
- Harvest — what outlives the work item
|
|
10
|
+
- Remove It — closing without a closed status
|
|
11
|
+
|
|
12
|
+
## Confirm It Landed
|
|
13
|
+
|
|
14
|
+
Check the evidence, not the frontier's claims:
|
|
15
|
+
|
|
16
|
+
- pull requests tied to the identity (title, branch, or a `Work:` line) are merged;
|
|
17
|
+
- branches carrying it are merged or gone;
|
|
18
|
+
- sub-items are closed, or are explicitly moving on without their parent;
|
|
19
|
+
- the intent is met.
|
|
20
|
+
|
|
21
|
+
If something is missing, update the frontier and stop.
|
|
22
|
+
|
|
23
|
+
## Harvest
|
|
24
|
+
|
|
25
|
+
Before closing, list the durable knowledge that the work produced: decisions, business
|
|
26
|
+
rules, changed contracts, things a spec now gets wrong. Propose each one as a Relic
|
|
27
|
+
update and let the Relic skill handle it, including the developer's approval. Work
|
|
28
|
+
details and discarded paths are not knowledge; Git keeps them.
|
|
29
|
+
|
|
30
|
+
## Remove It
|
|
31
|
+
|
|
32
|
+
Ask the developer to close, together with the harvest proposal. After approval:
|
|
33
|
+
|
|
34
|
+
1. delete the work item file; there is no closed status, archive, or tombstone;
|
|
35
|
+
2. find relative links that pointed at it and repair them, usually by rewording them as
|
|
36
|
+
plain text or linking to the knowledge it was harvested into;
|
|
37
|
+
3. run `relic verify` and fix any broken links you introduced.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Work Items
|
|
2
|
+
|
|
3
|
+
Read this reference only when you are creating a work item or a sub-item.
|
|
4
|
+
|
|
5
|
+
## Contents
|
|
6
|
+
|
|
7
|
+
- Decide Whether It Deserves One — when a work item pays for itself
|
|
8
|
+
- Write It — destination, identity, and shape
|
|
9
|
+
- Refine Into Sub-items — splitting without asking
|
|
10
|
+
|
|
11
|
+
## Decide Whether It Deserves One
|
|
12
|
+
|
|
13
|
+
Create a work item when the work will likely outlive one session, pass between agents,
|
|
14
|
+
or land in separate parts. Otherwise, do the work and leave no record.
|
|
15
|
+
|
|
16
|
+
## Write It
|
|
17
|
+
|
|
18
|
+
Write it in the work kind's root, taken from `relic.yaml`. Allocate the identity the way
|
|
19
|
+
the Relic skill does, from the greatest current identity in that root, with no counter or
|
|
20
|
+
reservation. Name the file after the identity and a readable slug, for example
|
|
21
|
+
`WORK-042-push-notifications.md`.
|
|
22
|
+
|
|
23
|
+
```markdown
|
|
24
|
+
---
|
|
25
|
+
id: WORK-042
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
# Push notifications
|
|
29
|
+
|
|
30
|
+
## Intent
|
|
31
|
+
|
|
32
|
+
The outcome the developer wants, and why. Write it in their words; a rough intent is fine.
|
|
33
|
+
|
|
34
|
+
## Current frontier
|
|
35
|
+
|
|
36
|
+
Not started.
|
|
37
|
+
|
|
38
|
+
## Relationships
|
|
39
|
+
|
|
40
|
+
- [Notifications spec](../../specs/007-notifications/index.html)
|
|
41
|
+
- Depends on [WORK-041](./WORK-041-notification-api.md)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
- Only `id` is required. `waiting` is Ranni's one convention; any other key is the
|
|
45
|
+
project's.
|
|
46
|
+
- Express relationships as ordinary relative links in the body, never as frontmatter
|
|
47
|
+
values, so they become edges in Relic's graph.
|
|
48
|
+
- Ask only the questions that block a first step. Do not specify the work completely
|
|
49
|
+
upfront; the frontier refines it as it moves.
|
|
50
|
+
|
|
51
|
+
## Refine Into Sub-items
|
|
52
|
+
|
|
53
|
+
When the work splits into parts that can land, or be worked, separately, create one
|
|
54
|
+
sub-item per part, without asking:
|
|
55
|
+
|
|
56
|
+
- each sub-item's intent narrows its parent's intent and never changes it;
|
|
57
|
+
- link the sub-item to its parent, and list it under the parent's relationships;
|
|
58
|
+
- the parent's frontier says how the parts fit together.
|
|
59
|
+
|
|
60
|
+
A split that drops or changes scope is a change of intent. Set `waiting` instead.
|