Skip to content

Commit 46c85c6

Browse files
Rename continuous-learning plugin to continual-learning
Apply a full path and identifier rename for the plugin (folder, hooks, skill path, marketplace source, and docs) so installation and references consistently use continual-learning. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 2cf89ae commit 46c85c6

9 files changed

Lines changed: 46 additions & 32 deletions

File tree

.cursor-plugin/marketplace.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
"description": "Skill mapping, practice plans, and learning retrospectives."
1515
},
1616
{
17-
"name": "continuous-learning",
18-
"source": "continuous-learning",
17+
"name": "continual-learning",
18+
"source": "continual-learning",
1919
"description": "Incremental transcript-driven memory updates for AGENTS.md using high-signal bullet points only."
2020
},
2121
{

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Official Cursor plugins for popular developer tools, frameworks, and SaaS produc
77
| Plugin | Category | Description |
88
|:-------|:---------|:------------|
99
| [Teaching](teaching/) | Utilities | Skill maps, practice plans, and feedback loops |
10-
| [Continuous Learning](continuous-learning/) | Developer Tools | Incremental transcript-driven AGENTS.md memory updates with high-signal bullet points |
10+
| [Continual Learning](continual-learning/) | Developer Tools | Incremental transcript-driven AGENTS.md memory updates with high-signal bullet points |
1111
| [Cursor Team Kit](cursor-team-kit/) | Developer Tools | Internal-style workflows for CI, code review, shipping, and testing |
1212
| [Create Plugin](create-plugin/) | Developer Tools | Meta workflows for creating Cursor plugins with scaffolding and submission checks |
1313
| [Ralph Loop](ralph-loop/) | Developer Tools | Iterative self-referential AI loops using the Ralph Wiggum technique |

continuous-learning/.cursor-plugin/plugin.json renamed to continual-learning/.cursor-plugin/plugin.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"name": "continuous-learning",
3-
"displayName": "Continuous Learning",
2+
"name": "continual-learning",
3+
"displayName": "Continual Learning",
44
"version": "1.0.0",
55
"description": "Incrementally learns durable user preferences and workspace facts from transcript changes and keeps AGENTS.md up to date with plain bullet points.",
66
"author": {
@@ -12,7 +12,7 @@
1212
"license": "MIT",
1313
"logo": "assets/avatar.png",
1414
"keywords": [
15-
"continuous-learning",
15+
"continual-learning",
1616
"agent-memory",
1717
"transcripts",
1818
"hooks",
Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
# Continuous Learning
1+
# Continual Learning
22

33
Automatically and incrementally keeps `AGENTS.md` up to date from transcript changes.
44

55
The plugin combines:
66

77
- A `stop` hook that decides when to trigger learning.
8-
- A `continuous-learning` skill that mines only high-signal transcript deltas.
8+
- A `continual-learning` skill that mines only high-signal transcript deltas.
99

1010
It is designed to avoid noisy rewrites by:
1111

@@ -16,20 +16,20 @@ It is designed to avoid noisy rewrites by:
1616
## Installation
1717

1818
```bash
19-
/add-plugin continuous-learning
19+
/add-plugin continual-learning
2020
```
2121

2222
## How it works
2323

24-
On eligible `stop` events, the hook may emit a `followup_message` that asks the agent to run the `continuous-learning` skill.
24+
On eligible `stop` events, the hook may emit a `followup_message` that asks the agent to run the `continual-learning` skill.
2525

2626
The hook keeps local runtime state in:
2727

28-
- `.cursor/hooks/state/continuous-learning.json` (cadence state)
28+
- `.cursor/hooks/state/continual-learning.json` (cadence state)
2929

3030
The skill uses an incremental transcript index at:
3131

32-
- `.cursor/hooks/state/continuous-learning-index.json`
32+
- `.cursor/hooks/state/continual-learning-index.json`
3333

3434
## Trigger cadence
3535

@@ -47,12 +47,12 @@ Trial mode defaults (enabled in this plugin hook config):
4747

4848
## Optional env overrides
4949

50-
- `CONTINUOUS_LEARNING_MIN_TURNS`
51-
- `CONTINUOUS_LEARNING_MIN_MINUTES`
52-
- `CONTINUOUS_LEARNING_TRIAL_MODE`
53-
- `CONTINUOUS_LEARNING_TRIAL_MIN_TURNS`
54-
- `CONTINUOUS_LEARNING_TRIAL_MIN_MINUTES`
55-
- `CONTINUOUS_LEARNING_TRIAL_DURATION_MINUTES`
50+
- `CONTINUAL_LEARNING_MIN_TURNS` (or legacy `CONTINUOUS_LEARNING_MIN_TURNS`)
51+
- `CONTINUAL_LEARNING_MIN_MINUTES` (or legacy `CONTINUOUS_LEARNING_MIN_MINUTES`)
52+
- `CONTINUAL_LEARNING_TRIAL_MODE` (or legacy `CONTINUOUS_LEARNING_TRIAL_MODE`)
53+
- `CONTINUAL_LEARNING_TRIAL_MIN_TURNS` (or legacy `CONTINUOUS_LEARNING_TRIAL_MIN_TURNS`)
54+
- `CONTINUAL_LEARNING_TRIAL_MIN_MINUTES` (or legacy `CONTINUOUS_LEARNING_TRIAL_MIN_MINUTES`)
55+
- `CONTINUAL_LEARNING_TRIAL_DURATION_MINUTES` (or legacy `CONTINUOUS_LEARNING_TRIAL_DURATION_MINUTES`)
5656

5757
## Output format in AGENTS.md
5858

continuous-learning/hooks/continuous-learning-stop.ts renamed to continual-learning/hooks/continual-learning-stop.ts

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import { existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from "no
44
import { dirname, resolve } from "node:path";
55
import { stdin } from "bun";
66

7-
const STATE_PATH = resolve(".cursor/hooks/state/continuous-learning.json");
7+
const STATE_PATH = resolve(".cursor/hooks/state/continual-learning.json");
88
const INCREMENTAL_INDEX_PATH = resolve(
9-
".cursor/hooks/state/continuous-learning-index.json"
9+
".cursor/hooks/state/continual-learning-index.json"
1010
);
1111
const DEFAULT_MIN_TURNS = 10;
1212
const DEFAULT_MIN_MINUTES = 120;
@@ -15,7 +15,7 @@ const TRIAL_DEFAULT_MIN_MINUTES = 15;
1515
const TRIAL_DEFAULT_DURATION_MINUTES = 24 * 60;
1616

1717
const FOLLOWUP_MESSAGE =
18-
`Run the \`continuous-learning\` skill now. First read existing \`AGENTS.md\` and update existing entries in place (do not only append). Use incremental transcript processing with index file \`${INCREMENTAL_INDEX_PATH}\`: only read transcripts not in the index or transcripts whose mtime is newer than indexed mtime (re-read changed transcripts). After processing, write back the updated index mtimes and remove entries for deleted transcripts. Update \`AGENTS.md\` only for high-signal, repeated user-correction patterns or durable workspace facts. Exclude one-off/transient details and secrets. Keep each learned section to at most 12 bullets. Write plain bullet points only, with no evidence/confidence tags or other metadata annotations. If no meaningful updates exist, respond exactly: No high-signal memory updates.`;
18+
`Run the \`continual-learning\` skill now. First read existing \`AGENTS.md\` and update existing entries in place (do not only append). Use incremental transcript processing with index file \`${INCREMENTAL_INDEX_PATH}\`: only read transcripts not in the index or transcripts whose mtime is newer than indexed mtime (re-read changed transcripts). After processing, write back the updated index mtimes and remove entries for deleted transcripts. Update \`AGENTS.md\` only for high-signal, repeated user-correction patterns or durable workspace facts. Exclude one-off/transient details and secrets. Keep each learned section to at most 12 bullets. Write plain bullet points only, with no evidence/confidence tags or other metadata annotations. If no meaningful updates exist, respond exactly: No high-signal memory updates.`;
1919

2020
interface StopHookInput {
2121
conversation_id: string;
@@ -58,6 +58,10 @@ function parseBoolean(value: string | undefined): boolean {
5858
);
5959
}
6060

61+
function readEnvValue(primary: string, legacy: string): string | undefined {
62+
return process.env[primary] ?? process.env[legacy];
63+
}
64+
6165
function loadState(): ContinuousLearningState {
6266
const fallback: ContinuousLearningState = {
6367
version: 1,
@@ -156,21 +160,31 @@ async function main(args: string[]): Promise<number> {
156160
const now = Date.now();
157161

158162
const trialEnabled =
159-
args.includes("--trial") || parseBoolean(process.env.CONTINUOUS_LEARNING_TRIAL_MODE);
163+
args.includes("--trial") ||
164+
parseBoolean(readEnvValue("CONTINUAL_LEARNING_TRIAL_MODE", "CONTINUOUS_LEARNING_TRIAL_MODE"));
160165
if (trialEnabled && countedTurn && state.trialStartedAtMs === null) {
161166
state.trialStartedAtMs = now;
162167
}
163168

164169
const trialDurationMinutes = parsePositiveInt(
165-
process.env.CONTINUOUS_LEARNING_TRIAL_DURATION_MINUTES,
170+
readEnvValue(
171+
"CONTINUAL_LEARNING_TRIAL_DURATION_MINUTES",
172+
"CONTINUOUS_LEARNING_TRIAL_DURATION_MINUTES"
173+
),
166174
TRIAL_DEFAULT_DURATION_MINUTES
167175
);
168176
const trialMinTurns = parsePositiveInt(
169-
process.env.CONTINUOUS_LEARNING_TRIAL_MIN_TURNS,
177+
readEnvValue(
178+
"CONTINUAL_LEARNING_TRIAL_MIN_TURNS",
179+
"CONTINUOUS_LEARNING_TRIAL_MIN_TURNS"
180+
),
170181
TRIAL_DEFAULT_MIN_TURNS
171182
);
172183
const trialMinMinutes = parsePositiveInt(
173-
process.env.CONTINUOUS_LEARNING_TRIAL_MIN_MINUTES,
184+
readEnvValue(
185+
"CONTINUAL_LEARNING_TRIAL_MIN_MINUTES",
186+
"CONTINUOUS_LEARNING_TRIAL_MIN_MINUTES"
187+
),
174188
TRIAL_DEFAULT_MIN_MINUTES
175189
);
176190
const inTrialWindow =
@@ -179,11 +193,11 @@ async function main(args: string[]): Promise<number> {
179193
now - state.trialStartedAtMs < trialDurationMinutes * 60_000;
180194

181195
const minTurns = parsePositiveInt(
182-
process.env.CONTINUOUS_LEARNING_MIN_TURNS,
196+
readEnvValue("CONTINUAL_LEARNING_MIN_TURNS", "CONTINUOUS_LEARNING_MIN_TURNS"),
183197
DEFAULT_MIN_TURNS
184198
);
185199
const minMinutes = parsePositiveInt(
186-
process.env.CONTINUOUS_LEARNING_MIN_MINUTES,
200+
readEnvValue("CONTINUAL_LEARNING_MIN_MINUTES", "CONTINUOUS_LEARNING_MIN_MINUTES"),
187201
DEFAULT_MIN_MINUTES
188202
);
189203

@@ -223,7 +237,7 @@ async function main(args: string[]): Promise<number> {
223237
console.log(JSON.stringify({}));
224238
return 0;
225239
} catch (error) {
226-
console.error("[continuous-learning-stop] failed", error);
240+
console.error("[continual-learning-stop] failed", error);
227241
console.log(JSON.stringify({}));
228242
return 0;
229243
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"hooks": {
44
"stop": [
55
{
6-
"command": "bun run ./hooks/continuous-learning-stop.ts --trial"
6+
"command": "bun run ./hooks/continual-learning-stop.ts --trial"
77
}
88
]
99
}

continuous-learning/skills/continuous-learning/SKILL.md renamed to continual-learning/skills/continual-learning/SKILL.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
---
2-
name: continuous-learning
2+
name: continual-learning
33
description: Incrementally extract recurring user corrections and durable workspace facts from transcript changes, then update AGENTS.md with plain bullet points only. Use when the user asks to mine previous chats, maintain AGENTS.md memory, or build a self-learning preference loop.
44
---
55

6-
# Continuous Learning
6+
# Continual Learning
77

88
Keep `AGENTS.md` current using transcript deltas instead of full rescans.
99

1010
## Inputs
1111

1212
- Transcript root: `~/.cursor/projects/<workspace-slug>/agent-transcripts/`
1313
- Existing memory file: `AGENTS.md`
14-
- Incremental index: `.cursor/hooks/state/continuous-learning-index.json`
14+
- Incremental index: `.cursor/hooks/state/continual-learning-index.json`
1515

1616
## Workflow
1717

0 commit comments

Comments
 (0)