evolve-lite:publish
Publish a private guideline to a configured write-scope repo.
Best use case
evolve-lite:publish is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Publish a private guideline to a configured write-scope repo.
Teams using evolve-lite:publish should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/evolve-lite-publish/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How evolve-lite:publish Compares
| Feature / Agent | evolve-lite:publish | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Publish a private guideline to a configured write-scope repo.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Publish a Guideline
## Overview
Publish one or more private guidelines from `.evolve/entities/guideline/`
into a configured **write-scope** repo. The entity is stamped with
`visibility: public`, `owner`, `published_at`, and `source`, moved into
the local clone of the write repo, and committed / pushed to the remote.
The same local clone is also what `evolve-lite:sync` pulls from — so you
and anyone else publishing to the same repo stay in sync.
## Workflow
### Step 1: Require a write-scope repo
Read `evolve.config.yaml`. If no entry has `scope: write`, tell the user:
> "You need at least one write-scope repo to publish to. Run evolve-lite:subscribe with --scope write to set one up, then come back."
Then stop.
If `identity.user` is missing, ask for it and add it to the config.
### Step 2: First-time setup
Ensure `.evolve/` is gitignored at the project root:
```bash
grep -qxF '.evolve/' .gitignore 2>/dev/null || echo '.evolve/' >> .gitignore
```
### Step 3: Pick the target write-scope repo
Filter `repos:` to entries with `scope: write` (Step 1 already aborted if
there were zero, so at least one exists here).
- Exactly one entry → use it as default.
- Multiple entries → show a numbered list with `notes` and ask which to publish to.
Let `{repo}` be the chosen repo name and `{branch}` its configured branch (default `main`).
### Step 4: List and select entities
List files in `.evolve/entities/guideline/` and ask the user which to publish.
### Step 5: Run publish script
For each selected file, run:
```bash
python3 .bob/skills/evolve-lite-publish/scripts/publish.py --entity "{filename}" --repo "{repo}" --user "{identity.user}"
```
### Step 6: Commit and push
Build `{names}` as a comma-joined list of selected filenames, and
`{guideline_paths}` as a space-joined list of the corresponding
`guideline/{filename}` paths inside the clone (the files the publish
script just wrote).
```bash
git -C ".evolve/entities/subscribed/{repo}" add -- {guideline_paths}
git -C ".evolve/entities/subscribed/{repo}" commit -m "[evolve] publish: {names}"
git -C ".evolve/entities/subscribed/{repo}" push origin "{branch}"
```
On push success, continue to Step 7.
### Step 6a: Recover from non-fast-forward rejection
If the push fails and stderr mentions `rejected` / `non-fast-forward`
/ `fetch first`, another writer pushed to `{branch}` in between.
Rebase the local commit and push once more:
```bash
git -C ".evolve/entities/subscribed/{repo}" fetch origin "{branch}"
git -C ".evolve/entities/subscribed/{repo}" rebase "origin/{branch}"
```
- Rebase clean → retry `git push origin "{branch}"` once, then Step 7.
- Rebase conflicted → attempt to resolve, then hand off for user
review. Do not `git rebase --continue` or `git push` without an
explicit user confirmation.
1. `git -C ".evolve/entities/subscribed/{repo}" status --porcelain`
lists the conflicted paths. If any are `UD`, `DU`, or binary,
skip to the abort step — those aren't safe to auto-resolve.
2. For each `UU`/`AA` file, read the conflict markers. During a
rebase, `<<<<<<< HEAD` is the **remote's** version and the
section under the commit sha is the **publish change** being
replayed (opposite of a regular merge). Write an
intent-preserving resolution; don't `git add` yet.
3. Show the user the diff (`git -C ".evolve/entities/subscribed/{repo}" diff HEAD -- {file}`) per
resolved file with a one-line strategy summary, and ask whether
to **continue** (stage + `rebase --continue` + push) or **abort**
(roll back for manual resolution).
4. On **continue**:
```bash
git -C ".evolve/entities/subscribed/{repo}" add {resolved-files}
git -C ".evolve/entities/subscribed/{repo}" rebase --continue
git -C ".evolve/entities/subscribed/{repo}" push origin "{branch}"
```
Then Step 7. If `rebase --continue` surfaces a new conflict, loop
from step 1.
5. On **abort** — user declined, conflict isn't safely resolvable,
or the proposed merge feels unsafe:
```bash
git -C ".evolve/entities/subscribed/{repo}" rebase --abort
```
The local publish commit is preserved at
`.evolve/entities/subscribed/{repo}` but not on the remote. Tell
the user to either (a) resolve manually in that directory
(`git fetch origin {branch} && git rebase origin/{branch}`, fix
conflicts, `git add` + `git rebase --continue`, `git push origin
{branch}`) or (b) re-run `evolve-lite:publish` with a different
filename if the conflict is a shared name.
If the push fails for any other reason (auth, network, missing remote
ref), surface git's error and stop — rebase will not help.
### Step 7: Confirm
Tell the user what was published and to which repo.
## Notes
- Published entities are **moved** from `.evolve/entities/guideline/` into
the write-scope clone at `.evolve/entities/subscribed/{repo}/guideline/`,
with `visibility: public`, `owner: {user}`, `published_at`, and `source`
stamped in frontmatter
- The original private entity is deleted after successful publication
- All publish actions are logged to `.evolve/audit.log`Related Skills
publish
Publish a private guideline to a configured write-scope repo.
evolve-lite:unsubscribe
Remove a repo from the unified repos list and delete its local clone.
evolve-lite:sync
Pull the latest guidelines from every configured repo (read- and write-scope).
evolve-lite:subscribe
Add a shared guidelines repo (read-scope subscription or write-scope publish target) to the unified repos list.
evolve-lite:save
Captures the current session's successful workflow and saves it as a reusable skill with SKILL.md and helper scripts
evolve-lite:save-trajectory
Save the current conversation as a trajectory JSON file in OpenAI chat completion format for analysis and fine-tuning
evolve-lite:recall
Must be used at the start of any non-trivial task involving code changes, debugging, repo exploration, file inspection, or environment/tooling investigation to surface stored guidance before analysis or tool use.
evolve-lite:provenance
Analyze saved trajectories and recall audit events offline to record whether recalled guidelines influenced completed sessions.
evolve-lite:learn
Must be used near the end of any non-trivial turn that produced potentially reusable tools, guidance, errors, workarounds, or workflows, so those lessons are saved for future turns.
unsubscribe
Remove a repo from the unified repos list and delete its local clone.
sync
Pull the latest guidelines from every configured repo (read- and write-scope).
subscribe
Add a shared guidelines repo (read-scope subscription or write-scope publish target) to the unified repos list.