cortex-engine 0.4.0 → 0.4.2

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 CHANGED
@@ -1,18 +1,21 @@
1
1
  # cortex-engine
2
2
 
3
- Cognitive engine for AI agents semantic memory, observations, embeddings, dream consolidation. Cloud Run service + MCP tools.
3
+ Persistent memory for AI agents. Open source, LLM-agnostic, works with any MCP client.
4
4
 
5
5
  ## What It Does
6
6
 
7
- `cortex-engine` is a portable TypeScript service that gives AI agents persistent, structured memory. It handles:
7
+ Most AI agents forget everything when the session ends. `cortex-engine` fixes that — it gives agents a persistent memory layer that survives across sessions, models, and runtimes.
8
8
 
9
- - **Semantic memory graph** — store and retrieve observations as interconnected nodes
10
- - **Embeddings** — vector representations via pluggable providers (OpenAI, Vertex AI, Anthropic)
11
- - **Dream consolidation** — background process that reinforces and connects memories over time
12
- - **FSRS scheduling** — spaced-repetition scheduling for memory retention
13
- - **MCP server** — exposes cognitive tools (`query`, `observe`, `believe`, `wander`, etc.) over the Model Context Protocol
9
+ - **Semantic memory** — store and retrieve observations, beliefs, questions, and hypotheses as interconnected nodes
10
+ - **Belief tracking** — agents hold positions that update when new evidence contradicts them
11
+ - **Dream consolidation** — batches of short-term observations compress into durable long-term memories (like biological sleep consolidation)
12
+ - **Spaced repetition (FSRS)** — memories that aren't accessed fade over time, keeping retrieval relevant
13
+ - **Embeddings** — pluggable providers (built-in, OpenAI, Vertex AI, Ollama) no external service required by default
14
+ - **MCP server** — 17 cognitive tools (`query`, `observe`, `believe`, `wander`, `dream`, etc.) over the Model Context Protocol
14
15
 
15
- Runs as a standalone Cloud Run service or embedded in any Node.js environment.
16
+ The result: personality and expertise emerge from accumulated experience, not system prompts. An agent with 200 observations about distributed systems doesn't need to be told "you care about distributed systems." It just knows.
17
+
18
+ Works with Claude Code, Cursor, Windsurf, or any MCP-compatible client. Runs locally (SQLite) or in the cloud (Firestore + Cloud Run).
16
19
 
17
20
  ## Architecture
18
21
 
@@ -65,49 +68,29 @@ npm run test:watch
65
68
 
66
69
  | Variable | Required | Description |
67
70
  |----------|----------|-------------|
68
- | `CORTEX_API_TOKEN` | Yes | Authentication token for the HTTP API |
71
+ | `CORTEX_API_TOKEN` | Optional | Used by the `cortex-telemetry` hook to send retrieval feedback to the cortex API. Not required to run the MCP server. |
69
72
 
70
73
  Additional variables are required depending on which providers you enable (Firestore, Vertex AI, OpenAI, etc.). See `docs/` for provider-specific configuration.
71
74
 
72
- ## Hooks, Skills & Agents
73
-
74
- `fozikio init` automatically installs hooks, skills, and agent definitions from the `fozikio.json` manifest into the target workspace. These live in `.claude/hooks/` and `.claude/skills/` after init.
75
-
76
- ### Hooks
77
-
78
- Hooks are shell scripts that integrate into Claude Code's event system. They fire automatically no agent action required.
79
-
80
- | Hook | Event | What It Does | Requires |
81
- |------|-------|-------------|----------|
82
- | `cognitive-grounding.sh` | `UserPromptSubmit` | Nudges the agent to call `query()` before evaluation, design, review, or creation work | — |
83
- | `observe-first.sh` | `PreToolUse` (Write/Edit) | Warns if writing to Mind/, Journal/, or memory/ without calling `observe()` or `query()` first | — |
84
- | `cortex-telemetry.sh` | `PostToolUse` | Tracks cortex retrieval calls and detects retries (2 calls within 60s), sends feedback to the cortex API | `CORTEX_API_URL`, `CORTEX_API_TOKEN` (optional) |
85
- | `session-lifecycle.sh` | `SessionStart` | Resets session-scoped state files (telemetry log, push-gate state) | — |
86
- | `project-board-gate.sh` | `PreToolUse` (Bash) | Blocks `git push` to tracked repos until board updates and/or ops logging are done | `.claude/state/project-boards.json` config |
87
-
88
- **To disable a hook:** Delete the `.sh` file from `.claude/hooks/`. No other config changes needed.
89
-
90
- **To customize project-board-gate:** Create `.claude/state/project-boards.json` with your repos and requirements:
91
-
92
- ```json
93
- {
94
- "enabled": true,
95
- "strength": "block",
96
- "on_push": {
97
- "require_board_update": true,
98
- "require_ops_log": false
99
- },
100
- "repos": {
101
- "my-repo": {
102
- "board_number": 5,
103
- "board_owner": "my-org",
104
- "description": "My project"
105
- }
106
- }
107
- }
108
- ```
75
+ ## Rules, Skills & Agents
76
+
77
+ `fozikio init` automatically installs safety rules, skills, and agent definitions from the `fozikio.json` manifest into the target workspace.
78
+
79
+ ### Safety Rules (Reflex)
80
+
81
+ cortex-engine ships with [Reflex](https://github.com/Fozikio/reflex) rules portable YAML-based guardrails that work across any agent runtime, not just Claude Code.
109
82
 
110
- Set `"strength": "off"` to disable the gate without removing the hook.
83
+ | Rule | Event | What It Does |
84
+ |------|-------|-------------|
85
+ | `cognitive-grounding` | `prompt_submit` | Nudges the agent to call `query()` before evaluation, design, review, or creation work |
86
+ | `observe-first` | `file_write` / `file_edit` | Warns if writing to memory directories without calling `observe()` or `query()` first |
87
+ | `note-about-doing` | `prompt_submit` | Suggests capturing new threads of thought with `thread_create()` |
88
+
89
+ Rules live in `reflex-rules/` as standard Reflex YAML. They're portable — use them with Claude Code, Cursor, Codex, or any runtime with a Reflex adapter. See [@fozikio/reflex](https://github.com/Fozikio/reflex) for the full rule format and tier enforcement.
90
+
91
+ **Claude Code users** also get platform-specific hooks (in `hooks/`) for telemetry, session lifecycle, and project board gating. These are runtime adapters, not rules — they handle side effects that the declarative rule format doesn't cover.
92
+
93
+ **To customize:** Edit the YAML rule files directly, or set `allow_disable: true` and disable them via Reflex config.
111
94
 
112
95
  ### Skills
113
96
 
@@ -127,19 +110,32 @@ Skills are invocable workflows that agents can use via `/skill-name`.
127
110
  ### How Auto-Install Works
128
111
 
129
112
  1. `fozikio init` reads `fozikio.json` from the package root
130
- 2. For each hook in `contents.hooks`: copies `hooks/{name}.sh` into `{workspace}/.claude/hooks/`
131
- 3. For each skill in `contents.skills`: copies `skills/{name}/` directory into `{workspace}/.claude/skills/`
132
- 4. Missing source files are skipped with a warning — init never fails due to missing assets
113
+ 2. Copies hooks, skills, and Reflex rules into the target workspace
114
+ 3. Missing source files are skipped with a warning init never fails due to missing assets
115
+
116
+ ## Plugin Ecosystem
117
+
118
+ cortex-engine ships with 17 cognitive tools out of the box. Plugins add more:
133
119
 
134
- ### Overriding Cortex Hooks
120
+ | Plugin | What It Adds |
121
+ |--------|-------------|
122
+ | [@fozikio/tools-threads](https://github.com/Fozikio/tools-threads) | Thought threads — create, update, resolve ongoing lines of thinking |
123
+ | [@fozikio/tools-journal](https://github.com/Fozikio/tools-journal) | Session journaling — structured reflections that persist |
124
+ | [@fozikio/tools-content](https://github.com/Fozikio/tools-content) | Content pipeline — draft, review, publish workflow |
125
+ | [@fozikio/tools-evolution](https://github.com/Fozikio/tools-evolution) | Identity evolution — track how the agent's personality changes over time |
126
+ | [@fozikio/tools-social](https://github.com/Fozikio/tools-social) | Social cognition — interaction patterns, engagement tracking |
127
+ | [@fozikio/tools-graph](https://github.com/Fozikio/tools-graph) | Graph analysis — memory connections, clustering, visualization data |
128
+ | [@fozikio/tools-maintenance](https://github.com/Fozikio/tools-maintenance) | Memory maintenance — cleanup, deduplication, health checks |
129
+ | [@fozikio/tools-vitals](https://github.com/Fozikio/tools-vitals) | Vitals tracking — agent health metrics and operational signals |
130
+ | [@fozikio/tools-reasoning](https://github.com/Fozikio/tools-reasoning) | Cognitive reasoning — abstraction, contradiction detection, surfacing |
135
131
 
136
- To override a hook's behavior without removing it:
137
- 1. Edit the `.sh` file in your workspace's `.claude/hooks/` directly — it's a plain copy, not a symlink
138
- 2. Re-running `fozikio init --here` will overwrite your changes (it copies fresh from the package)
139
- 3. To preserve customizations across re-init, rename the hook file (hooks are matched by filename in Claude Code settings, not by the fozikio manifest)
132
+ Install any plugin: `npm install @fozikio/tools-threads` cortex-engine auto-discovers and loads installed plugins.
140
133
 
141
134
  ## Related Projects
142
135
 
136
+ - [@fozikio/reflex](https://github.com/Fozikio/reflex) — Portable safety guardrails for agents. Rules as data, not code.
137
+ - [sigil](https://github.com/Fozikio/sigil) — Agent control surface. Signals and gestures, not conversations.
138
+ - [fozikio.com](https://www.fozikio.com) — Documentation and guides.
143
139
 
144
140
  ## License
145
141
 
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/bin/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAiBH,KAAK,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAC1C,KAAK,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC/D,KAAK,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE9D,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,SAAS,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB;AAID,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,GAAG,IAAI,CAiEhE;AAuQD,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAuI5C"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/bin/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAkBH,KAAK,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAC1C,KAAK,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC/D,KAAK,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE9D,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,SAAS,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB;AAID,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,GAAG,IAAI,CAiEhE;AAuQD,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAwI5C"}
package/dist/bin/init.js CHANGED
@@ -386,7 +386,7 @@ export function runInit(args) {
386
386
  const manifest = loadManifest(packageRoot);
387
387
  const installedHooks = [];
388
388
  const installedSkills = [];
389
- let hasHookifyRules = false;
389
+ let hasReflexRules = false;
390
390
  if (manifest?.contents) {
391
391
  if (manifest.contents.hooks && manifest.contents.hooks.length > 0) {
392
392
  installedHooks.push(...installHooks(packageRoot, targetDir, manifest.contents.hooks));
@@ -394,7 +394,7 @@ export function runInit(args) {
394
394
  if (manifest.contents.skills && manifest.contents.skills.length > 0) {
395
395
  installedSkills.push(...installSkills(packageRoot, targetDir, manifest.contents.skills));
396
396
  }
397
- hasHookifyRules = (manifest.contents.hookify_rules ?? []).length > 0;
397
+ hasReflexRules = (manifest.contents.reflex_rules ?? manifest.contents.hookify_rules ?? []).length > 0;
398
398
  }
399
399
  // Success message
400
400
  const relativePath = opts.here ? '.' : opts.name;
@@ -430,9 +430,10 @@ export function runInit(args) {
430
430
  console.error(` ${relativePath}/.claude/skills/${skill}/`);
431
431
  }
432
432
  }
433
- if (hasHookifyRules) {
433
+ if (hasReflexRules) {
434
434
  console.error('');
435
- console.error('Recommended hookify rules available. Run `fozikio install-rules` to install.');
435
+ console.error('Reflex safety rules available. Run `fozikio install-rules` to install.');
436
+ console.error(' See: https://github.com/Fozikio/reflex');
436
437
  }
437
438
  console.error('');
438
439
  console.error('Next steps:');
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/bin/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/bin/init.ts"],"names":[],"mappings":"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"}
package/fozikio.json ADDED
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "cortex-engine",
3
+ "version": "0.4.1",
4
+ "description": "Portable cognitive engine for AI agents — semantic memory, embeddings, dream consolidation, MCP server",
5
+ "requires": {
6
+ "cortex_api": ">=0.3.0"
7
+ },
8
+ "contents": {
9
+ "hooks": ["cognitive-grounding", "observe-first", "cortex-telemetry", "session-lifecycle", "project-board-gate"],
10
+ "reflex_rules": ["cognitive-grounding", "observe-first", "note-about-doing"],
11
+ "skills": ["cortex-query", "cortex-review"],
12
+ "agents": ["cortex-researcher"]
13
+ }
14
+ }
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env bash
2
+ # ============================================================================
3
+ # cognitive-grounding.sh — Claude Code Hook
4
+ # ============================================================================
5
+ # Event: UserPromptSubmit
6
+ # Purpose: Reminds agents to call cortex query() before substantive work
7
+ # (evaluation, design, review, architecture, etc.)
8
+ # How: Pattern-matches the user prompt for cognitive-work keywords.
9
+ # If matched, injects a system message nudging the agent to query().
10
+ # Disable: Delete this file from .claude/hooks/ — no other config needed.
11
+ # Part of: fozikio — portable, no project-specific paths.
12
+ # ============================================================================
13
+
14
+ INPUT=$(cat)
15
+ PROMPT=$(echo "$INPUT" | jq -r '.user_prompt // ""' 2>/dev/null)
16
+
17
+ # Check if prompt involves evaluation/design/review work
18
+ if echo "$PROMPT" | grep -qiE '(evaluat|review|design|assess|analyz|creat|build|architect|plan|propos|critique|audit|diagnos)'; then
19
+ cat <<'EOF'
20
+ {
21
+ "systemMessage": "**[fozikio: cognitive-grounding]**\nThis prompt involves substantive cognitive work. Before responding, call `query()` on the topic to ground your work in accumulated experience.\n\n```\nmcp__cortex__query({ text: \"[the topic]\" })\n```"
22
+ }
23
+ EOF
24
+ else
25
+ echo '{}'
26
+ fi
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env bash
2
+ # ============================================================================
3
+ # cortex-telemetry.sh — Claude Code Hook
4
+ # ============================================================================
5
+ # Event: PostToolUse
6
+ # Purpose: Tracks cortex retrieval tool usage and detects retries (repeat
7
+ # retrieval calls within 60s), sending feedback to the cortex API
8
+ # for retrieval quality improvement.
9
+ # How: Logs each cortex retrieval call (query, recall, wander, etc.) to
10
+ # .claude/state/cortex-calls.log. If two calls happen within 60s,
11
+ # POSTs a "retry" signal to CORTEX_API_URL/api/v2/retrieval-feedback.
12
+ # Env: CORTEX_API_URL, CORTEX_API_TOKEN (optional — skips API call if unset)
13
+ # Disable: Delete this file from .claude/hooks/ — no other config needed.
14
+ # Part of: fozikio — portable, fire-and-forget HTTP calls.
15
+ # ============================================================================
16
+
17
+ INPUT=$(cat)
18
+ TOOL_NAME=$(echo "$INPUT" | jq -r '.tool_name // ""' 2>/dev/null)
19
+ TIMESTAMP=$(date +%s)
20
+ STATE_DIR="${CLAUDE_PROJECT_DIR:-.}/.claude/state"
21
+ LOG_FILE="$STATE_DIR/cortex-calls.log"
22
+
23
+ # Only track cortex retrieval tools
24
+ case "$TOOL_NAME" in
25
+ mcp__cortex__query|mcp__cortex__recall|mcp__cortex__wander|mcp__cortex__neighbors|mcp__cortex__surface|mcp__cortex__retrieve)
26
+ mkdir -p "$STATE_DIR"
27
+
28
+ # Read previous entry BEFORE appending current
29
+ PREV=$(tail -1 "$LOG_FILE" 2>/dev/null || echo "")
30
+ PREV_TS=$(echo "$PREV" | cut -d' ' -f1)
31
+ PREV_TOOL=$(echo "$PREV" | cut -d' ' -f2-)
32
+
33
+ # Log current call
34
+ echo "$TIMESTAMP $TOOL_NAME" >> "$LOG_FILE"
35
+
36
+ # Check if this is a retry (another cortex call within 60s)
37
+ if [ -n "$PREV_TS" ] && [ "$((TIMESTAMP - PREV_TS))" -lt 60 ] 2>/dev/null; then
38
+ # Post feedback to cortex API (fire and forget)
39
+ CORTEX_API_URL="${CORTEX_API_URL:-}"
40
+ CORTEX_API_TOKEN="${CORTEX_API_TOKEN:-}"
41
+ if [ -n "$CORTEX_API_URL" ] && [ -n "$CORTEX_API_TOKEN" ]; then
42
+ curl -s --max-time 3 "$CORTEX_API_URL/api/v2/retrieval-feedback" \
43
+ -H "x-cortex-token: $CORTEX_API_TOKEN" \
44
+ -H "Content-Type: application/json" \
45
+ -d "{\"original_tool\":\"$PREV_TOOL\",\"retry_tool\":\"$TOOL_NAME\",\"signal\":\"retry\",\"timestamp\":$TIMESTAMP}" \
46
+ > /dev/null 2>&1 &
47
+ fi
48
+ fi
49
+ ;;
50
+ esac
51
+
52
+ # Always output empty JSON (non-blocking hook)
53
+ echo '{}'
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env bash
2
+ # ============================================================================
3
+ # observe-first.sh — Claude Code Hook
4
+ # ============================================================================
5
+ # Event: PreToolUse (Write, Edit)
6
+ # Purpose: Reminds agents to call observe() or query() before writing to
7
+ # memory directories (Mind/, Journal/, memory/).
8
+ # How: Checks the file path of Write/Edit operations. If targeting a
9
+ # memory directory, injects a system message reminder.
10
+ # Disable: Delete this file from .claude/hooks/ — no other config needed.
11
+ # Part of: fozikio — portable, no project-specific paths.
12
+ # ============================================================================
13
+
14
+ INPUT=$(cat)
15
+ FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // ""' 2>/dev/null)
16
+
17
+ if echo "$FILE_PATH" | grep -qiE '(Mind|Journal|memory)'; then
18
+ cat <<'EOF'
19
+ {
20
+ "systemMessage": "**[fozikio: observe-first]**\nWriting to a memory directory. Have you called observe() or query() first? Memory writes should be grounded in cortex context."
21
+ }
22
+ EOF
23
+ else
24
+ echo '{}'
25
+ fi
@@ -0,0 +1,195 @@
1
+ #!/usr/bin/env bash
2
+ # ============================================================================
3
+ # project-board-gate.sh — PreToolUse hook (Bash + MCP tools)
4
+ # ============================================================================
5
+ # Production gate for tracked repos. Configurable requirements before push:
6
+ # - Board update (gh issue/project commands)
7
+ # - Ops logging (ops_append via cortex MCP)
8
+ #
9
+ # Config: .claude/state/project-boards.json
10
+ # State: .claude/state/push-gate-state.txt (session-scoped)
11
+ #
12
+ # The hook does two things depending on what's happening:
13
+ # 1. On board/ops actions → records them in state file
14
+ # 2. On git push → checks state file, blocks if requirements unmet
15
+ # ============================================================================
16
+
17
+ set -euo pipefail
18
+
19
+ PROJECT_DIR="${CLAUDE_PROJECT_DIR:-.}"
20
+ CONFIG_FILE="$PROJECT_DIR/.claude/state/project-boards.json"
21
+ STATE_FILE="$PROJECT_DIR/.claude/state/push-gate-state.txt"
22
+
23
+ # No config = no gate
24
+ if [[ ! -f "$CONFIG_FILE" ]]; then
25
+ echo '{}'
26
+ exit 0
27
+ fi
28
+
29
+ # Read config
30
+ CONFIG=$(python3 -c "
31
+ import json, sys
32
+ c = json.load(open('$CONFIG_FILE'))
33
+ print(json.dumps({
34
+ 'enabled': c.get('enabled', True),
35
+ 'strength': c.get('strength', 'block'),
36
+ 'require_board': c.get('on_push', {}).get('require_board_update', True),
37
+ 'require_ops': c.get('on_push', {}).get('require_ops_log', False),
38
+ 'ops_message': c.get('on_push', {}).get('require_ops_log_message', ''),
39
+ 'repos': {k: v for k, v in c.get('repos', {}).items()}
40
+ }))
41
+ " 2>/dev/null || echo '{"enabled":true,"strength":"block","require_board":true,"require_ops":false,"repos":{}}')
42
+
43
+ ENABLED=$(echo "$CONFIG" | python3 -c "import json,sys; print(json.load(sys.stdin)['enabled'])" 2>/dev/null || echo "True")
44
+ STRENGTH=$(echo "$CONFIG" | python3 -c "import json,sys; print(json.load(sys.stdin)['strength'])" 2>/dev/null || echo "block")
45
+ REQUIRE_BOARD=$(echo "$CONFIG" | python3 -c "import json,sys; print(json.load(sys.stdin)['require_board'])" 2>/dev/null || echo "True")
46
+ REQUIRE_OPS=$(echo "$CONFIG" | python3 -c "import json,sys; print(json.load(sys.stdin)['require_ops'])" 2>/dev/null || echo "False")
47
+ OPS_MESSAGE=$(echo "$CONFIG" | python3 -c "import json,sys; print(json.load(sys.stdin)['ops_message'])" 2>/dev/null || echo "")
48
+
49
+ if [[ "$ENABLED" == "False" || "$STRENGTH" == "off" ]]; then
50
+ echo '{}'
51
+ exit 0
52
+ fi
53
+
54
+ # Read input
55
+ INPUT=$(cat)
56
+
57
+ # Detect tool context
58
+ TOOL_NAME=$(echo "$INPUT" | python3 -c "import json,sys; print(json.load(sys.stdin).get('tool_name',''))" 2>/dev/null || echo "")
59
+
60
+ # ═══════════════════════════════════════════════════════════════════════════
61
+ # TRACK: MCP ops_append calls → mark ops logged
62
+ # ═══════════════════════════════════════════════════════════════════════════
63
+ if [[ "$TOOL_NAME" == "mcp__cortex__ops_append" ]]; then
64
+ mkdir -p "$(dirname "$STATE_FILE")"
65
+ echo "ops_logged" >> "$STATE_FILE" 2>/dev/null
66
+ echo '{}'
67
+ exit 0
68
+ fi
69
+
70
+ # Only process Bash commands from here
71
+ if [[ "$TOOL_NAME" != "Bash" && -n "$TOOL_NAME" ]]; then
72
+ echo '{}'
73
+ exit 0
74
+ fi
75
+
76
+ COMMAND=$(echo "$INPUT" | python3 -c "import json,sys; print(json.load(sys.stdin).get('tool_input',{}).get('command',''))" 2>/dev/null || echo "")
77
+
78
+ # ═══════════════════════════════════════════════════════════════════════════
79
+ # TRACK: gh board/issue commands → mark board updated for detected repo
80
+ # ═══════════════════════════════════════════════════════════════════════════
81
+ if echo "$COMMAND" | grep -qE 'gh\s+(project\s+item|issue\s+(create|comment|close|edit)|pr\s+create)'; then
82
+ REPOS=$(echo "$CONFIG" | python3 -c "import json,sys; [print(r) for r in json.load(sys.stdin)['repos']]" 2>/dev/null || echo "")
83
+
84
+ mkdir -p "$(dirname "$STATE_FILE")"
85
+ for repo in $REPOS; do
86
+ if echo "$COMMAND" | grep -qi "$repo"; then
87
+ echo "board:$repo" >> "$STATE_FILE" 2>/dev/null
88
+ fi
89
+ done
90
+
91
+ # Fallback: cwd-based detection
92
+ CWD_REPO=$(basename "$(pwd)" 2>/dev/null || echo "")
93
+ if echo "$CONFIG" | python3 -c "import json,sys; c=json.load(sys.stdin); exit(0 if '$CWD_REPO' in c['repos'] else 1)" 2>/dev/null; then
94
+ echo "board:$CWD_REPO" >> "$STATE_FILE" 2>/dev/null
95
+ fi
96
+
97
+ echo '{}'
98
+ exit 0
99
+ fi
100
+
101
+ # ═══════════════════════════════════════════════════════════════════════════
102
+ # GATE: git push/merge → check requirements
103
+ # ═══════════════════════════════════════════════════════════════════════════
104
+ IS_GIT_PUSH=false
105
+ if echo "$COMMAND" | grep -qE 'git\s+push'; then
106
+ IS_GIT_PUSH=true
107
+ fi
108
+
109
+ if [[ "$IS_GIT_PUSH" == "false" ]]; then
110
+ echo '{}'
111
+ exit 0
112
+ fi
113
+
114
+ # Detect which tracked repo
115
+ DETECTED_REPO=""
116
+ REPOS=$(echo "$CONFIG" | python3 -c "import json,sys; [print(r) for r in json.load(sys.stdin)['repos']]" 2>/dev/null || echo "")
117
+
118
+ for repo in $REPOS; do
119
+ if echo "$COMMAND" | grep -qi "$repo"; then
120
+ DETECTED_REPO="$repo"
121
+ break
122
+ fi
123
+ done
124
+
125
+ if [[ -z "$DETECTED_REPO" ]]; then
126
+ CMD_DIR=$(echo "$COMMAND" | sed -n 's/.*cd[[:space:]]\+\([^[:space:];&]*\).*/\1/p' | head -1 2>/dev/null || echo "")
127
+ DIR_BASE=$(basename "${CMD_DIR:-$(pwd)}" 2>/dev/null || echo "")
128
+
129
+ for repo in $REPOS; do
130
+ if [[ "$DIR_BASE" == "$repo" ]]; then
131
+ DETECTED_REPO="$repo"
132
+ break
133
+ fi
134
+ done
135
+ fi
136
+
137
+ # Not a tracked repo — allow
138
+ if [[ -z "$DETECTED_REPO" ]]; then
139
+ echo '{}'
140
+ exit 0
141
+ fi
142
+
143
+ # === Check requirements ===
144
+ MISSING=""
145
+
146
+ if [[ "$REQUIRE_BOARD" == "True" ]]; then
147
+ if ! grep -q "^board:${DETECTED_REPO}$" "$STATE_FILE" 2>/dev/null; then
148
+ BOARD_NUM=$(echo "$CONFIG" | python3 -c "import json,sys; print(json.load(sys.stdin)['repos']['$DETECTED_REPO']['board_number'])" 2>/dev/null || echo "?")
149
+ BOARD_OWNER=$(echo "$CONFIG" | python3 -c "import json,sys; print(json.load(sys.stdin)['repos']['$DETECTED_REPO']['board_owner'])" 2>/dev/null || echo "?")
150
+ MISSING="${MISSING}\\n**Board update required:**\\n"
151
+ MISSING="${MISSING}1. Check board: \`gh project item-list $BOARD_NUM --owner $BOARD_OWNER\`\\n"
152
+ MISSING="${MISSING}2. Update issue: \`gh issue create/comment -R $BOARD_OWNER/$DETECTED_REPO\`\\n"
153
+ MISSING="${MISSING}3. Move items to reflect current status\\n"
154
+ fi
155
+ fi
156
+
157
+ if [[ "$REQUIRE_OPS" == "True" ]]; then
158
+ if ! grep -q "^ops_logged$" "$STATE_FILE" 2>/dev/null; then
159
+ MISSING="${MISSING}\\n**Ops log required:**\\n"
160
+ if [[ -n "$OPS_MESSAGE" ]]; then
161
+ MISSING="${MISSING}${OPS_MESSAGE}\\n"
162
+ else
163
+ MISSING="${MISSING}Call \`ops_append()\` to log what you're pushing and why.\\n"
164
+ fi
165
+ MISSING="${MISSING}\`mcp__cortex__ops_append({ content: \"Pushing: [what changed]\", project: \"$DETECTED_REPO\" })\`\\n"
166
+ fi
167
+ fi
168
+
169
+ # All requirements met — allow
170
+ if [[ -z "$MISSING" ]]; then
171
+ echo '{}'
172
+ exit 0
173
+ fi
174
+
175
+ REPO_DESC=$(echo "$CONFIG" | python3 -c "import json,sys; print(json.load(sys.stdin)['repos']['$DETECTED_REPO'].get('description',''))" 2>/dev/null || echo "")
176
+ MESSAGE="**[PUSH GATE]** Pushing to \`$DETECTED_REPO\` ($REPO_DESC) — requirements not met:\\n${MISSING}\\nComplete the above, then retry your push.\\n\\n*Config: \`.claude/state/project-boards.json\` — set \`strength\` to \`off\` to disable.*"
177
+
178
+ if [[ "$STRENGTH" == "block" ]]; then
179
+ HOOK_EVENT=$(echo "$INPUT" | python3 -c "import json,sys; print(json.load(sys.stdin).get('hook_event_name','PreToolUse'))" 2>/dev/null || echo "PreToolUse")
180
+ cat <<EOF
181
+ {
182
+ "hookSpecificOutput": {
183
+ "hookEventName": "$HOOK_EVENT",
184
+ "permissionDecision": "deny"
185
+ },
186
+ "systemMessage": "$MESSAGE"
187
+ }
188
+ EOF
189
+ else
190
+ cat <<EOF
191
+ {
192
+ "systemMessage": "$MESSAGE"
193
+ }
194
+ EOF
195
+ fi
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env bash
2
+ # ============================================================================
3
+ # session-lifecycle.sh — Claude Code Hook
4
+ # ============================================================================
5
+ # Event: SessionStart
6
+ # Purpose: Resets session-scoped state files at the start of each session.
7
+ # Clears cortex telemetry logs and push-gate state so hooks start
8
+ # fresh without stale data from previous sessions.
9
+ # How: Truncates .claude/state/cortex-calls.log and push-gate-state.txt.
10
+ # Disable: Delete this file from .claude/hooks/ — no other config needed.
11
+ # Part of: fozikio — supports cortex-telemetry.sh and project-board-gate.sh.
12
+ # ============================================================================
13
+
14
+ STATE_DIR="${CLAUDE_PROJECT_DIR:-.}/.claude/state"
15
+ mkdir -p "$STATE_DIR"
16
+
17
+ # Clear session-scoped state from previous session
18
+ > "$STATE_DIR/cortex-calls.log" 2>/dev/null
19
+ > "$STATE_DIR/push-gate-state.txt" 2>/dev/null
20
+
21
+ echo '{}'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cortex-engine",
3
- "version": "0.4.0",
3
+ "version": "0.4.2",
4
4
  "description": "Portable cognitive engine for AI agents — storage, embeddings, memory, FSRS, and MCP server",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -80,9 +80,17 @@
80
80
  "type": "git",
81
81
  "url": "https://github.com/Fozikio/cortex-engine.git"
82
82
  },
83
- "homepage": "https://github.com/Fozikio/cortex-engine#readme",
83
+ "homepage": "https://fozikio.com",
84
+ "funding": {
85
+ "type": "github",
86
+ "url": "https://github.com/sponsors/Fozikio"
87
+ },
84
88
  "files": [
85
89
  "dist",
90
+ "hooks",
91
+ "skills",
92
+ "reflex-rules",
93
+ "fozikio.json",
86
94
  "LICENSE",
87
95
  "README.md"
88
96
  ],
@@ -0,0 +1,17 @@
1
+ name: cognitive-grounding
2
+ version: 1
3
+ tier: recommended
4
+ category: cognitive
5
+ description: Nudge agent to query cortex before substantive cognitive work
6
+ events: [prompt_submit]
7
+ conditions:
8
+ - field: user_prompt
9
+ op: regex
10
+ pattern: '(?i)(evaluat|review|design|assess|analyz|creat|build|architect|plan|propos|critique|audit|diagnos)'
11
+ action: warn
12
+ severity: medium
13
+ message: |
14
+ This prompt involves substantive cognitive work. Before responding, call query() on the topic to ground your work in accumulated experience.
15
+ override:
16
+ allow_disable: true
17
+ allow_downgrade: true
@@ -0,0 +1,17 @@
1
+ name: note-about-doing
2
+ version: 1
3
+ tier: custom
4
+ category: cognitive
5
+ description: Suggest capturing new threads of thought with thread_create()
6
+ events: [prompt_submit]
7
+ conditions:
8
+ - field: user_prompt
9
+ op: regex
10
+ pattern: '(?i)(I should|I need to|I want to|let me|I''ll)'
11
+ action: log
12
+ severity: info
13
+ message: |
14
+ If this is a new thread of thought, consider capturing it with thread_create() rather than just noting it and moving on.
15
+ override:
16
+ allow_disable: true
17
+ allow_downgrade: true
@@ -0,0 +1,17 @@
1
+ name: observe-first
2
+ version: 1
3
+ tier: recommended
4
+ category: cognitive
5
+ description: Warn when writing to memory directories without querying cortex first
6
+ events: [file_write, file_edit]
7
+ conditions:
8
+ - field: file_path
9
+ op: regex
10
+ pattern: '(Mind|Journal|memory)'
11
+ action: warn
12
+ severity: medium
13
+ message: |
14
+ Writing to a memory directory. Have you called observe() or query() first? Memory writes should be grounded in cortex context.
15
+ override:
16
+ allow_disable: true
17
+ allow_downgrade: true
@@ -0,0 +1,86 @@
1
+ ---
2
+ name: cortex-query
3
+ description: Persistent memory for AI agents — search, record, and build knowledge across sessions using cortex-engine MCP tools
4
+ ---
5
+
6
+ # Cortex Memory — Query & Record
7
+
8
+ Your agent has persistent memory via cortex-engine. Knowledge survives across sessions — you can recall what you learned last week, track evolving beliefs, and build a knowledge graph over time.
9
+
10
+ ## Core Loop
11
+
12
+ **Read before you write.** Always check what you already know before adding more.
13
+
14
+ ### Search for knowledge
15
+
16
+ ```
17
+ query("authentication architecture decisions")
18
+ ```
19
+
20
+ Be specific. `query("JWT token expiry policy")` beats `query("auth")`. Results include relevance scores and connected concepts.
21
+
22
+ After finding a relevant memory, explore around it:
23
+ ```
24
+ neighbors(memory_id)
25
+ ```
26
+
27
+ ### Record what you learn
28
+
29
+ **Facts** — things you confirmed or noticed to be true:
30
+ ```
31
+ observe("The API rate limits at 1000 req/min per API key, not per user")
32
+ ```
33
+
34
+ **Questions** — things you want to explore but haven't resolved:
35
+ ```
36
+ wonder("Why does the sync daemon stall after 300k seconds?")
37
+ ```
38
+
39
+ **Hypotheses** — ideas that might be true but aren't confirmed:
40
+ ```
41
+ speculate("Switching to connection pooling might fix the timeout issues")
42
+ ```
43
+
44
+ These are stored separately so questions don't pollute your knowledge base.
45
+
46
+ ### Update beliefs
47
+
48
+ When your understanding changes:
49
+ ```
50
+ believe(concept_id, "Revised understanding based on new evidence", "reason for change")
51
+ ```
52
+
53
+ ### Track work across sessions
54
+
55
+ ```
56
+ ops_append("Finished auth refactor, tests passing", project="api-v2")
57
+ ```
58
+
59
+ Next session, pick up where you left off:
60
+ ```
61
+ ops_query(project="api-v2")
62
+ ```
63
+
64
+ ## Session Pattern
65
+
66
+ 1. **Start:** `query()` the topic you're working on
67
+ 2. **During:** `observe()` facts, `wonder()` questions as they come up
68
+ 3. **End:** `ops_append()` what you did and what's unfinished
69
+ 4. **Periodically:** `dream()` to consolidate observations into long-term memories
70
+
71
+ ## Available Tools
72
+
73
+ **Write:** observe, wonder, speculate, believe, reflect, digest
74
+ **Read:** query, recall, predict, validate, neighbors, wander
75
+ **Ops:** ops_append, ops_query, ops_update
76
+ **System:** stats, dream
77
+
78
+ ## Setup
79
+
80
+ ```bash
81
+ npm install cortex-engine
82
+ npx fozikio init my-agent
83
+ npx cortex-engine # starts MCP server
84
+ ```
85
+
86
+ Defaults to local SQLite + Ollama. No cloud accounts needed.
@@ -0,0 +1,67 @@
1
+ ---
2
+ name: cortex-review
3
+ description: Code and design review grounded in persistent memory — compares new work against accumulated knowledge and patterns
4
+ ---
5
+
6
+ # Cortex Review
7
+
8
+ Review code, designs, or proposals by comparing them against your accumulated knowledge in cortex.
9
+
10
+ ## Workflow
11
+
12
+ ### 1. Ground in memory
13
+
14
+ Before reading the work under review, query cortex for the topic:
15
+
16
+ ```
17
+ query("the domain or system being reviewed")
18
+ ```
19
+
20
+ Read the results. They contain past decisions, patterns, and lessons learned that inform your review.
21
+
22
+ ### 2. Review against context
23
+
24
+ As you read the work, compare it against what cortex returned:
25
+
26
+ - **Does it align** with established patterns and past decisions?
27
+ - **Does it diverge** from known approaches — intentionally or accidentally?
28
+ - **Does it introduce** novel patterns worth capturing?
29
+
30
+ ### 3. Record what you find
31
+
32
+ **New patterns:** If the work introduces something worth remembering:
33
+ ```
34
+ observe("The new caching layer uses write-through with 5min TTL — effective for this read-heavy workload")
35
+ ```
36
+
37
+ **Open questions:** If something isn't clear:
38
+ ```
39
+ wonder("Why did they bypass the rate limiter for internal services?")
40
+ ```
41
+
42
+ **Belief updates:** If the work changes your understanding:
43
+ ```
44
+ believe(concept_id, "Updated understanding", "Evidence from this review")
45
+ ```
46
+
47
+ ### 4. Output format
48
+
49
+ ```markdown
50
+ ## Review — Grounded in Memory
51
+
52
+ ### Aligned with known patterns
53
+ - [what matches cortex context]
54
+
55
+ ### Divergences
56
+ - [what differs, with reasoning about whether intentional]
57
+
58
+ ### New patterns to capture
59
+ - [novel approaches worth an observe() call]
60
+
61
+ ### Open questions
62
+ - [things to wonder() about]
63
+ ```
64
+
65
+ ## Why This Matters
66
+
67
+ Without memory grounding, every review starts from zero. You'll miss that "we tried this approach 3 weeks ago and it caused latency spikes" or "this pattern was explicitly chosen over the alternative for compliance reasons." Cortex holds that context.