Luigit
repositories / pi-ext

pi-ext

bugabingas pi extensions

owned by admin

extensions/good-job/README.md

Raw
Rendered preview

good-job

Turns explicit gj praise and wtf complaints into durable, evidence-backed learnings.

Install / load

Pi loads this extension through the root pi-ext package.

Commands / tools / settings

  • gj [details] and good job [details] record praise and continue to the active agent unchanged.
  • wtf [complaint] records a problem and continues to the active agent unchanged.
  • /gj or /gj list opens the searchable learning list and selected detail.
  • /gj status reports queue state.
  • /gj open opens the persistence directory.
  • /gj learn sends the active agent the records-directory path and asks for cited Pi change proposals.

There are no user-facing tools. Background analysis exposes only an internal schema-constrained submit_learning tool to its child session. By default, analysis uses the current session model and platform app-data directory. Set optional overrides in user ~/.pi/agent/settings.json or project .pi/settings.json:

{
	"good-job": {
		"directory": "~/shared/gj",
		"model": "provider/model-id",
		"thinkingLevel": "xhigh"
	}
}
  • good-job.directory: non-empty path; ~ expands to home; relative paths resolve from Pi's current working directory.
  • good-job.model: provider/model-id; unset uses the current session model.
  • good-job.thinkingLevel: minimal, low, medium, high, xhigh, or max; unset uses the provider default.

The old goodJob key is no longer read. There are no flags or environment variables for these settings. Precedence per key: trusted project settings, user settings, unset. Project settings apply only when Pi trusts the project; untrusted project settings are ignored. An invalid value never falls back to a lower source. It fails startup, capture, or /gj with an error such as Invalid good-job.thinkingLevel from project settings: must be minimal, low, medium, high, xhigh, or max. /gj learn leaves the active model, thinking level, and tools unchanged.

Behavior

Each record stores feedback kind, memorable slug, short ID, raw feedback, evidence, behaviors, candidate rule, provenance, model, usage, and timestamps. Praise IDs use gj-xxxxxxxxxx; problem IDs use wtf-xxxxxxxxxx. Queue state moves atomically through pending, processing, records, or failed directories. When old data exists in the platform default directory, startup converts version-1 records and moves them into the configured directory. Identical migrated IDs deduplicate; conflicting contents stop migration without overwrite.

Debug

Opt in through debug contract. Safe events: session.start, session.shutdown, runtime.start.start, runtime.start.finish, runtime.start.error, runtime.stop.start, runtime.stop.finish, runtime.stop.error.

# good-job

Turns explicit `gj` praise and `wtf` complaints into durable, evidence-backed learnings.

## Install / load

Pi loads this extension through the [root pi-ext package](../../README.md).

## Commands / tools / settings

- `gj [details]` and `good job [details]` record praise and continue to the active agent unchanged.
- `wtf [complaint]` records a problem and continues to the active agent unchanged.
- `/gj` or `/gj list` opens the searchable learning list and selected detail.
- `/gj status` reports queue state.
- `/gj open` opens the persistence directory.
- `/gj learn` sends the active agent the records-directory path and asks for cited Pi change proposals.

There are no user-facing tools.
Background analysis exposes only an internal schema-constrained `submit_learning` tool to its child session.
By default, analysis uses the current session model and platform app-data directory.
Set optional overrides in user `~/.pi/agent/settings.json` or project `.pi/settings.json`:

```json
{
	"good-job": {
		"directory": "~/shared/gj",
		"model": "provider/model-id",
		"thinkingLevel": "xhigh"
	}
}
```

- `good-job.directory`: non-empty path; `~` expands to home; relative paths resolve from Pi's current working directory.
- `good-job.model`: `provider/model-id`; unset uses the current session model.
- `good-job.thinkingLevel`: `minimal`, `low`, `medium`, `high`, `xhigh`, or `max`; unset uses the provider default.

The old `goodJob` key is no longer read.
There are no flags or environment variables for these settings.
Precedence per key: trusted project settings, user settings, unset.
Project settings apply only when Pi trusts the project; untrusted project settings are ignored.
An invalid value never falls back to a lower source.
It fails startup, capture, or `/gj` with an error such as `Invalid good-job.thinkingLevel from project settings: must be minimal, low, medium, high, xhigh, or max`.
`/gj learn` leaves the active model, thinking level, and tools unchanged.

## Behavior

Each record stores feedback kind, memorable slug, short ID, raw feedback, evidence, behaviors, candidate rule, provenance, model, usage, and timestamps.
Praise IDs use `gj-xxxxxxxxxx`; problem IDs use `wtf-xxxxxxxxxx`.
Queue state moves atomically through `pending`, `processing`, `records`, or `failed` directories.
When old data exists in the platform default directory, startup converts version-1 records and moves them into the configured directory.
Identical migrated IDs deduplicate; conflicting contents stop migration without overwrite.

## Debug

Opt in through [debug contract](../DEBUG.md).
Safe events: `session.start`, `session.shutdown`, `runtime.start.start`, `runtime.start.finish`, `runtime.start.error`, `runtime.stop.start`, `runtime.stop.finish`, `runtime.stop.error`.