Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 12 additions & 3 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,18 @@ this repository.

## What this repo is

**PyAutoPrompt is the starting point of the PyAuto workflow.** Every task that
ends up as a PR in PyAutoConf, PyAutoFit, PyAutoArray, PyAutoGalaxy, PyAutoLens,
or any of the `*_workspace*` repos begins as a markdown file here.
**PyAutoMind is the Mind of the PyAuto organism and the starting point of the
PyAuto workflow.** It holds the organism's ideas, intent, goals, priorities and
workflow state. Every task that ends up as a PR in PyAutoConf, PyAutoFit,
PyAutoArray, PyAutoGalaxy, PyAutoLens, or any of the `*_workspace*` repos begins
as a markdown file here.

This repository was renamed from **PyAutoPrompt** to **PyAutoMind**; the role is
unchanged, but it is now framed as the organism's Mind (intent and direction)
rather than merely a prompt store. The organism's other organs are the Brain
(PyAutoBrain — reasoning and planning), the Hands (PyAutoBuild — execution), the
Heart (PyAutoHeart — health and readiness) and Memory (PyAutoMemory — accumulated
knowledge). See [README.md](README.md) for the full picture.

For the full workflow narrative, conventions, and registry schemas, read
[README.md](README.md). The summary below is just enough to operate.
Expand Down
89 changes: 78 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,65 @@
# PyAutoPrompt
# PyAutoMind

**The starting point of the PyAuto workflow.**
**The Mind of the PyAuto organism — its ideas, intent, goals and priorities.**

Every piece of work in the PyAuto ecosystem starts as a markdown file
describing a task in **plain English**. You write what you want — that's it.
An AI agent (or a human) picks it up and turns it into a tracked GitHub issue,
a feature branch, and a merged pull request.
The PyAuto ecosystem is evolving into a software organism, and this repository
is its **Mind**: the place where the organism's *ideas, intentions, goals,
priorities and future direction* are captured. Although it began life as a
prompt repository, it has grown into the home of everything the organism *wants
to become* — ideas, prompts, active and completed work, planning, priorities,
workflow state and project direction.

It is still the **starting point of the PyAuto workflow**. Every piece of work
in the ecosystem starts here as a markdown file describing an intent in **plain
English**. You write what you want — that's it. An AI agent (or a human) picks
it up and turns it into a tracked GitHub issue, a feature branch, and a merged
pull request.

No template to fill in, no special syntax. **If you can describe the change
in a GitHub issue, you can drive the workflow.**

The Mind decides *what* the organism wants to become; the Brain
([PyAutoBrain, currently the PyAutoAgent repo](https://github.com/PyAutoLabs/PyAutoAgent))
decides *how* to achieve it. See [The PyAuto organism](#the-pyauto-organism) below.

## The PyAuto organism

The PyAuto ecosystem is organised as a software **organism**, with each
repository playing the role of an organ:

```
Mind → Brain → Hands → Heart
ideas reasoning execution health
intent & planning & delivery & readiness
goals
priorities ↘ ↙
Memory
accumulated knowledge
```

| Organ | Repository | Role |
|-------|------------|------|
| **Mind** | **PyAutoMind** (this repo) | What the organism *wants to become*: ideas, intent, goals, priorities, future work. |
| **Brain** | [PyAutoBrain](https://github.com/PyAutoLabs/PyAutoAgent) *(repo currently named PyAutoAgent)* | *How* to achieve those goals: reasoning, planning, routing work. |
| **Hands** | [PyAutoBuild](https://github.com/PyAutoLabs/PyAutoBuild) *(the "Hands")* | Execution and delivery: building, testing, releasing. |
| **Heart** | [PyAutoHeart](https://github.com/PyAutoLabs/PyAutoHeart) | Health and release-readiness: monitoring, checks, the "is it safe to ship?" gate. |
| **Memory** | [PyAutoMemory](https://github.com/PyAutoLabs/PyAutoPaper) *(repo currently named PyAutoPaper)* | Accumulated knowledge: papers, wikis, reference material. |

> The organism names (PyAutoBrain, PyAutoMemory) are the target identities; some
> repos are mid-rename, so the links point at the current repository names noted
> in italics. PyAutoBuild ("Hands") and PyAutoHeart keep their repository names.

**Why this repository is the Mind.** Work in PyAuto begins as *intent* — an
idea, a goal, a priority — long before it becomes code. This repository is where
that intent lives and is shaped: raw ideas in `ideas.md`, scoped intentions as
prompt files, the priorities that order them, and the workflow state that tracks
what the organism is currently pursuing. It does not reason about *how* to build
something (that is the Brain) or carry the work out (that is the Hands); it holds
the organism's **wants and direction**. Everything downstream — planning,
execution, health checks — flows from the intent captured here.

---

## What a prompt looks like

Here's a real prompt — the contents of `autoarray/psf_oversampling.md` — that
Expand Down Expand Up @@ -130,7 +180,7 @@ Two slash commands operate over the prompt registry without starting work:
## Repository layout

```
PyAutoPrompt/
PyAutoMind/
├── README.md ← this file
├── .gitignore
Expand Down Expand Up @@ -315,15 +365,15 @@ The PyAuto workflow has three repos with distinct roles:

| Repo | Purpose |
|------|---------|
| **PyAutoPrompt** (this repo) | Prompts, registry, prompt-coupled skills. The starting point. |
| **PyAutoMind** (this repo) | The Mind: ideas, intent, goals, priorities, the prompt registry and prompt-coupled skills. The starting point. |
| **admin_jammy** | Personal admin notes (`euclid.md`, `grants.md`, …) and general PyAuto tooling (`software/worktree.sh`, `software/admin_sync.sh`, generic skills like `audit_docs`, `dep_audit`, `repo_cleanup`). |
| **PyAutoPaper** | Personal paper-management repo: source PDFs (gitignored) plus topical LLM wikis (`lensing_wiki/`, `smbh_wiki/`, `cti_wiki/`, `methods_wiki/`, `galaxies_wiki/`) and a reading queue (`reading-queue.md`, moved from `admin_jammy/papers.md`). |
| **`PyAuto*` libraries and `*_workspace*` repos** | Where the actual code work happens. Each task gets a feature branch + worktree under `~/Code/PyAutoLabs-wt/<task-name>/`. |

Helper scripts that this repo's skills source:

- `admin_jammy/software/worktree.sh` — task worktree management (create, remove, conflict check).
- `admin_jammy/software/admin_sync.sh` — admin_jammy/PyAutoPrompt sync helpers.
- `admin_jammy/software/admin_sync.sh` — admin_jammy/PyAutoMind sync helpers.

These intentionally live in `admin_jammy/software/` because they're general
multi-repo tooling, not prompt-specific. The skills that need them source by
Expand All @@ -335,11 +385,28 @@ absolute path.

```bash
cd ~/Code/PyAutoLabs
git clone git@github.com:PyAutoLabs/PyAutoPrompt.git
# Until the GitHub-side rename (PyAutoPrompt -> PyAutoMind) lands, clone the old
# URL into a PyAutoMind/ directory: the old URL works now and redirects after the
# rename, and the documented commands all assume a `PyAutoMind/` checkout. Once
# the rename lands, `git clone git@github.com:PyAutoLabs/PyAutoMind.git` works too.
git clone git@github.com:PyAutoLabs/PyAutoPrompt.git PyAutoMind
git clone git@github.com:Jammy2211/admin_jammy.git # if not already present
bash admin_jammy/skills/install.sh # symlinks skills + commands
```

> **Note on the rename.** This repository is being renamed from **PyAutoPrompt**
> to **PyAutoMind**. The GitHub-side rename is a separate admin action; once it
> lands, GitHub redirects the old `PyAutoLabs/PyAutoPrompt` URL to the new one, so
> existing clones keep working — update your remote with
> `git remote set-url origin git@github.com:PyAutoLabs/PyAutoMind.git`.
>
> **The local checkout directory must be named `PyAutoMind`** (or symlinked with
> `ln -s PyAutoPrompt PyAutoMind`). The skill and script docs reference
> `PyAutoMind/...` paths directly — e.g. `source PyAutoMind/scripts/prompt_sync.sh`
> and `git -C PyAutoMind …` — so a directory still named `PyAutoPrompt` will break
> those commands. (The `prompt_sync.sh` fallback only covers automatic
> `PROMPT_REPO` resolution, not these literal documented paths.)

`install.sh` auto-discovers skills from both `admin_jammy/skills/` and
`PyAutoPrompt/skills/` and creates symlinks under `~/.claude/skills/` and
`PyAutoMind/skills/` and creates symlinks under `~/.claude/skills/` and
`~/.claude/commands/`. Re-run any time after pulling new skills from either repo.
48 changes: 48 additions & 0 deletions autoprompt/update_renamed_repo_abouts.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Update GitHub "About" descriptions for renamed organism repos

As part of the PyAuto **organism** renames, several repositories have been (or
are being) renamed, but their GitHub **About** descriptions still describe the
old identity. Do a single pass — on the **laptop**, where `gh` and a desktop
browser are available — to bring every renamed repo's description in line with
its new organism role, then apply them.
Comment on lines +1 to +7

The repo "About" description is **not** part of the git tree, so it cannot be
changed by a normal commit/push. Set each one with the GitHub CLI from the
laptop:

```bash
gh repo edit PyAutoLabs/<repo> --description "<new description>"
```

(or via the repo's main page → the ⚙ gear next to "About" → Description).

## Repos to update

Organism mapping: Mind → Brain → Hands → Heart (+ Memory).

- **PyAutoMind** (renamed from PyAutoPrompt) —
"The Mind of the PyAuto organism: ideas, intent, goals, priorities, and the
prompt registry that starts every PyAuto task."
- **PyAutoHeart** (renamed from PyAutoPulse) —
"The Heart of the PyAuto organism: health and release-readiness checking for
the PyAuto ecosystem." (confirm it already reads this way; update if not.)
- **PyAutoBrain** (to be renamed from PyAutoAgent) —
"The Brain of the PyAuto organism: reasoning, planning and routing of PyAuto
development work."
- **PyAutoMemory** (to be renamed from PyAutoPaper) —
"The Memory of the PyAuto organism: accumulated knowledge — papers, wikis and
reference material."
- **PyAutoBuild** (the "Hands"; repo name unchanged) — confirm the description
reflects its executor/build-and-release role; update only if it still reads as
an older description.

## Notes

- **Skip any repo whose GitHub-side rename has not yet happened.** Set its
About in the same pass that performs the rename, so the description never
points at a name that doesn't exist yet (PyAutoBrain/PyAutoMemory are pending
at the time of writing).
- Keep each description to one sentence, matching the tone of the other org
repos.
- This is a **metadata-only chore**: no code changes, no PR. Run the `gh repo
edit` commands (or use the About gear) and confirm each on the repo page.
4 changes: 2 additions & 2 deletions parked.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,11 +84,11 @@ unindexed worktrees or stashes. Move an entry back to `active.md` (or to

## pyauto-update-digest
- parked: 2026-05-17 (worktree last touched)
- classification: workflow (PyAutoPrompt)
- classification: workflow (PyAutoMind)
- location: orphan worktree at ~/Code/PyAutoLabs-wt/pyauto-update-digest/
- branch: feature/pyauto-update-digest (clean, no changes)
- notes: |
Orphan worktree containing only a clean PyAutoPrompt checkout on the
Orphan worktree containing only a clean PyAutoMind checkout on the
branch. No staged or unstaged changes. Action: `worktree_remove
pyauto-update-digest`.

Expand Down
6 changes: 3 additions & 3 deletions planned.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
## jax-point-source-point-smoke-sentinel
- prompt: PyAutoPrompt/issued/jax_point_source_point_smoke_sentinel.md
- prompt: PyAutoMind/issued/jax_point_source_point_smoke_sentinel.md
- status: planned
- filed: 2026-05-21
- classification: library (triage; routing TBD by bisect)
Expand All @@ -24,7 +24,7 @@
source_plane.py in the same dir — they share the seed dataset.

## nfw-truncated-potential-accuracy
- prompt: PyAutoPrompt/autogalaxy/nfw_truncated_potential_accuracy.md
- prompt: PyAutoMind/autogalaxy/nfw_truncated_potential_accuracy.md
- status: planned
- filed: 2026-06-05
- classification: library (accuracy bug)
Expand All @@ -40,7 +40,7 @@
- PyAutoGalaxy

## piemass-potential
- prompt: PyAutoPrompt/autogalaxy/piemass_potential.md
- prompt: PyAutoMind/autogalaxy/piemass_potential.md
- status: planned
- filed: 2026-06-05
- classification: library (missing feature)
Expand Down
39 changes: 33 additions & 6 deletions scripts/prompt_sync.sh
Original file line number Diff line number Diff line change
@@ -1,28 +1,54 @@
#!/usr/bin/env bash
# prompt_sync.sh — keep PyAutoPrompt in sync with origin during task lifecycle.
# prompt_sync.sh — keep PyAutoMind in sync with origin during task lifecycle.
#
# Sourced by skills that mutate PyAutoPrompt registry files (active.md,
# Sourced by skills that mutate PyAutoMind registry files (active.md,
# complete.md, planned.md, queue.md, ...) so we never accumulate local-only
# changes that drift from origin.
#
# source PyAutoPrompt/scripts/prompt_sync.sh
# source PyAutoMind/scripts/prompt_sync.sh
# prompt_sync_new_prompts # scan + commit + push new prompts
# prompt_sync_push "prompt: <subject>" # commit + push current state
#
# Both functions are no-ops when there is nothing to do, and safe to call
# multiple times in the same session.
#
# Replaces the previous admin_jammy/software/admin_sync.sh which operated on
# admin_jammy/prompt/. PyAutoPrompt is now the home of prompts and registry.
# admin_jammy/prompt/. PyAutoMind is now the home of prompts and registry.

PROMPT_REPO="${PROMPT_REPO:-$HOME/Code/PyAutoLabs/PyAutoPrompt}"
# An explicitly set PROMPT_REPO is always honoured as-is (a missing path then
# surfaces as a normal error rather than being silently redirected). Only when
# PROMPT_REPO is unset do we apply the default and the rename fallback below.
if [ -z "${PROMPT_REPO:-}" ]; then
PROMPT_REPO="$HOME/Code/PyAutoLabs/PyAutoMind"

# Backwards compatibility: before the PyAutoPrompt -> PyAutoMind rename the
# repo lived at PyAutoLabs/PyAutoPrompt. If the new default path is absent but
# the old one is present (a checkout not yet renamed), fall back to it so
# sourcing still works.
if [ ! -d "$PROMPT_REPO" ] && [ -d "$HOME/Code/PyAutoLabs/PyAutoPrompt" ]; then
PROMPT_REPO="$HOME/Code/PyAutoLabs/PyAutoPrompt"
fi
fi

# Fail loudly if PROMPT_REPO is not an actual git checkout. Without this the
# sync functions below silently no-op (git -C <missing> errors are swallowed and
# they return 0), so a missing or mis-set path would look like "nothing to sync"
# instead of a misconfiguration. Returns non-zero (we are sourced, never exit).
_prompt_sync_require_repo() {
if ! git -C "$PROMPT_REPO" rev-parse --is-inside-work-tree >/dev/null 2>&1; then
echo "prompt_sync: PROMPT_REPO is not a git checkout: $PROMPT_REPO" >&2
echo " set PROMPT_REPO to your PyAutoMind checkout, or clone it first." >&2
return 1
fi
}

# Commit and push any new untracked .md files at the repo root or under
# category dirs as one "sync new task ideas" commit. Each new file is listed
# individually in the commit body so the history shows which prompts arrived.
# Excludes issued/ (handled by prompt_sync_push when skills move files there)
# and tmp/ (scratch).
prompt_sync_new_prompts() {
_prompt_sync_require_repo || return 1
local untracked
untracked=$(git -C "$PROMPT_REPO" ls-files --others --exclude-standard \
-- '*.md' '*/*.md' \
Expand All @@ -46,7 +72,8 @@ prompt_sync_new_prompts() {
# and push. Used by skills at task milestones (issue filed, repos
# registered, task shipped, etc.). No-op if nothing is staged.
prompt_sync_push() {
local subject="${1:-prompt: sync PyAutoPrompt}"
_prompt_sync_require_repo || return 1
local subject="${1:-prompt: sync PyAutoMind}"
( cd "$PROMPT_REPO" && \
git add -A && \
if git diff --cached --quiet; then return 0; fi && \
Expand Down
2 changes: 1 addition & 1 deletion scripts/pyauto_audit.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
# Run on demand. Always exits 0 — informational, the user reads + decides.
#
# Usage:
# source ~/Code/PyAutoLabs/PyAutoPrompt/scripts/pyauto_audit.sh
# source ~/Code/PyAutoLabs/PyAutoMind/scripts/pyauto_audit.sh
# pyauto-audit
#
# Override via env vars:
Expand Down
4 changes: 2 additions & 2 deletions scripts/pyauto_status.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
# under 10 seconds — fetches are parallelised one background job per repo.
#
# Usage:
# source ~/Code/PyAutoLabs/PyAutoPrompt/scripts/pyauto_status.sh
# source ~/Code/PyAutoLabs/PyAutoMind/scripts/pyauto_status.sh
# pyauto-status
#
# Override the repo root (e.g. for testing) via PYAUTO_STATUS_ROOT.
Expand Down Expand Up @@ -35,7 +35,7 @@
# Suppressed when no JSONs exist.
#
# Note: this shell function shares its name with the /pyauto-status slash
# command (PyAutoPrompt/skills/pyauto-status/) but lives in a different
# command (PyAutoMind/skills/pyauto-status/) but lives in a different
# namespace. The slash command shows workflow registry status (planned /
# active / complete tasks); this function shows git sync state.

Expand Down
4 changes: 2 additions & 2 deletions scripts/pyauto_status_full.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,15 @@
# - Pointer to triage.md if present (free-form analytical clustering)
#
# Usage:
# source ~/Code/PyAutoLabs/PyAutoPrompt/scripts/pyauto_status_full.sh
# source ~/Code/PyAutoLabs/PyAutoMind/scripts/pyauto_status_full.sh
# pyauto-status-full
#
# Override the run path (e.g. to inspect a specific historical run)
# by passing it as the first argument:
# pyauto-status-full ~/Code/PyAutoLabs/PyAutoBuild/test_results/runs/2026-04-29T14-48-47Z
#
# Note: this shell function shares its name with the /pyauto-status-full
# slash command (PyAutoPrompt/skills/pyauto-status-full/) but lives in a
# slash command (PyAutoMind/skills/pyauto-status-full/) but lives in a
# different namespace. The slash command is the conversational layer; this
# function is the same data, printed straight to stdout, no Claude needed.

Expand Down
4 changes: 2 additions & 2 deletions scripts/status.sh
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
#!/usr/bin/env bash
# PyAutoPrompt registry status.
# PyAutoMind registry status.
#
# Prints prompt inventory grouped by category, plus the current state of
# active.md / planned.md / complete.md.
#
# Usage:
# bash PyAutoPrompt/scripts/status.sh [--full | --repos]
# bash PyAutoMind/scripts/status.sh [--full | --repos]
#
# Without args: counts + active task list + last 5 completed.
# With --full: also lists every prompt under every category.
Expand Down
Loading