get-noesisgen-light 0.1.1
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/LICENSE +21 -0
- package/README.md +153 -0
- package/assets/banner.txt +9 -0
- package/assets/bonjour.cast +17 -0
- package/assets/bonjour.gif +0 -0
- package/assets/demo-output.sh +257 -0
- package/assets/install.cast +27 -0
- package/assets/install.gif +0 -0
- package/assets/setup-deep.cast +39 -0
- package/assets/setup-deep.gif +0 -0
- package/assets/setup-express.cast +24 -0
- package/assets/setup-express.gif +0 -0
- package/assets/tapes/bonjour.tape +27 -0
- package/assets/tapes/demo-wrapper.sh +13 -0
- package/assets/tapes/install.tape +26 -0
- package/bin/index.js +375 -0
- package/package.json +35 -0
- package/template/.claude/settings.local.json +16 -0
- package/template/.claude/skills/bonjour/SKILL.md +79 -0
- package/template/.claude/skills/deepwork/SKILL.md +96 -0
- package/template/.claude/skills/profile-deep/SKILL.md +74 -0
- package/template/.claude/skills/recap/SKILL.md +80 -0
- package/template/.claude/skills/status/SKILL.md +71 -0
- package/template/.claude/skills/sync/SKILL.md +58 -0
- package/template/.claude/skills/task/SKILL.md +44 -0
- package/template/CLAUDE-final.md.template +158 -0
- package/template/CLAUDE.md +262 -0
- package/template/launchagents/com.noesis.daily-digest.plist.template +31 -0
- package/template/launchagents/com.noesis.inbox-watcher.plist.template +28 -0
- package/template/launchagents/com.noesis.maintenance.plist.template +33 -0
- package/template/launchagents/com.noesis.session-auto.plist.template +31 -0
- package/template/scripts/noesis-daily-digest.sh +107 -0
- package/template/scripts/noesis-inbox-watcher.sh +64 -0
- package/template/scripts/noesis-maintenance.sh +62 -0
- package/template/scripts/noesis-notify.sh +15 -0
- package/template/scripts/noesis-session-auto.sh +68 -0
- package/template/subagents/analyzer-CLAUDE.md +45 -0
- package/template/subagents/voice-analyzer-CLAUDE.md +34 -0
- package/template/vault/SHARED.ENV/daily-notes/template-daily.md +39 -0
- package/template/vault/SHARED.ENV/gamification/config.md +87 -0
- package/template/vault/SHARED.ENV/gamification/xp-tracker.md +23 -0
- package/template/vault/SHARED.ENV/queue/pending.md +18 -0
- package/template/vault/SHARED.ENV/registres/momentum.md +41 -0
- package/template/vault/SHARED.ENV/registres/patterns-recurrents.md +43 -0
- package/template/vault/SHARED.ENV/registres/projets-actifs.md +35 -0
- package/template/vault/USER.ENV/objectifs/annuel.md +47 -0
- package/template/vault/USER.ENV/objectifs/trimestriel.md +33 -0
- package/template/vault/USER.ENV/portrait.md +55 -0
- package/template/vault/USER.ENV/profil.md +54 -0
- package/template/vault/USER.ENV/voice-dna.md +73 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>Label</key>
|
|
6
|
+
<string>com.noesis.daily-digest</string>
|
|
7
|
+
<key>ProgramArguments</key>
|
|
8
|
+
<array>
|
|
9
|
+
<string>/bin/bash</string>
|
|
10
|
+
<string>{{VAULT_PATH}}/scripts/noesis-daily-digest.sh</string>
|
|
11
|
+
</array>
|
|
12
|
+
<key>StartCalendarInterval</key>
|
|
13
|
+
<dict>
|
|
14
|
+
<key>Hour</key>
|
|
15
|
+
<integer>{{DIGEST_HOUR}}</integer>
|
|
16
|
+
<key>Minute</key>
|
|
17
|
+
<integer>{{DIGEST_MINUTE}}</integer>
|
|
18
|
+
</dict>
|
|
19
|
+
<key>StandardOutPath</key>
|
|
20
|
+
<string>{{VAULT_PATH}}/vault/AI.ENV/logs/digest-launchd-stdout.log</string>
|
|
21
|
+
<key>StandardErrorPath</key>
|
|
22
|
+
<string>{{VAULT_PATH}}/vault/AI.ENV/logs/digest-launchd-stderr.log</string>
|
|
23
|
+
<key>EnvironmentVariables</key>
|
|
24
|
+
<dict>
|
|
25
|
+
<key>PATH</key>
|
|
26
|
+
<string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:{{HOME}}/.local/bin</string>
|
|
27
|
+
<key>HOME</key>
|
|
28
|
+
<string>{{HOME}}</string>
|
|
29
|
+
</dict>
|
|
30
|
+
</dict>
|
|
31
|
+
</plist>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>Label</key>
|
|
6
|
+
<string>com.noesis.inbox-watcher</string>
|
|
7
|
+
<key>ProgramArguments</key>
|
|
8
|
+
<array>
|
|
9
|
+
<string>/bin/bash</string>
|
|
10
|
+
<string>{{VAULT_PATH}}/scripts/noesis-inbox-watcher.sh</string>
|
|
11
|
+
</array>
|
|
12
|
+
<key>WatchPaths</key>
|
|
13
|
+
<array>
|
|
14
|
+
<string>{{VAULT_PATH}}/vault/SHARED.ENV/captures</string>
|
|
15
|
+
</array>
|
|
16
|
+
<key>StandardOutPath</key>
|
|
17
|
+
<string>{{VAULT_PATH}}/vault/AI.ENV/logs/inbox-watcher-launchd-stdout.log</string>
|
|
18
|
+
<key>StandardErrorPath</key>
|
|
19
|
+
<string>{{VAULT_PATH}}/vault/AI.ENV/logs/inbox-watcher-launchd-stderr.log</string>
|
|
20
|
+
<key>EnvironmentVariables</key>
|
|
21
|
+
<dict>
|
|
22
|
+
<key>PATH</key>
|
|
23
|
+
<string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:{{HOME}}/.local/bin</string>
|
|
24
|
+
<key>HOME</key>
|
|
25
|
+
<string>{{HOME}}</string>
|
|
26
|
+
</dict>
|
|
27
|
+
</dict>
|
|
28
|
+
</plist>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>Label</key>
|
|
6
|
+
<string>com.noesis.maintenance</string>
|
|
7
|
+
<key>ProgramArguments</key>
|
|
8
|
+
<array>
|
|
9
|
+
<string>/bin/bash</string>
|
|
10
|
+
<string>{{VAULT_PATH}}/scripts/noesis-maintenance.sh</string>
|
|
11
|
+
</array>
|
|
12
|
+
<key>StartCalendarInterval</key>
|
|
13
|
+
<dict>
|
|
14
|
+
<key>Day</key>
|
|
15
|
+
<integer>1</integer>
|
|
16
|
+
<key>Hour</key>
|
|
17
|
+
<integer>6</integer>
|
|
18
|
+
<key>Minute</key>
|
|
19
|
+
<integer>0</integer>
|
|
20
|
+
</dict>
|
|
21
|
+
<key>StandardOutPath</key>
|
|
22
|
+
<string>{{VAULT_PATH}}/vault/AI.ENV/logs/maintenance-launchd-stdout.log</string>
|
|
23
|
+
<key>StandardErrorPath</key>
|
|
24
|
+
<string>{{VAULT_PATH}}/vault/AI.ENV/logs/maintenance-launchd-stderr.log</string>
|
|
25
|
+
<key>EnvironmentVariables</key>
|
|
26
|
+
<dict>
|
|
27
|
+
<key>PATH</key>
|
|
28
|
+
<string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:{{HOME}}/.local/bin</string>
|
|
29
|
+
<key>HOME</key>
|
|
30
|
+
<string>{{HOME}}</string>
|
|
31
|
+
</dict>
|
|
32
|
+
</dict>
|
|
33
|
+
</plist>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>Label</key>
|
|
6
|
+
<string>com.noesis.session-auto</string>
|
|
7
|
+
<key>ProgramArguments</key>
|
|
8
|
+
<array>
|
|
9
|
+
<string>/bin/bash</string>
|
|
10
|
+
<string>{{VAULT_PATH}}/scripts/noesis-session-auto.sh</string>
|
|
11
|
+
</array>
|
|
12
|
+
<key>StartCalendarInterval</key>
|
|
13
|
+
<dict>
|
|
14
|
+
<key>Hour</key>
|
|
15
|
+
<integer>{{SESSION_HOUR}}</integer>
|
|
16
|
+
<key>Minute</key>
|
|
17
|
+
<integer>{{SESSION_MINUTE}}</integer>
|
|
18
|
+
</dict>
|
|
19
|
+
<key>StandardOutPath</key>
|
|
20
|
+
<string>{{VAULT_PATH}}/vault/AI.ENV/logs/session-auto-launchd-stdout.log</string>
|
|
21
|
+
<key>StandardErrorPath</key>
|
|
22
|
+
<string>{{VAULT_PATH}}/vault/AI.ENV/logs/session-auto-launchd-stderr.log</string>
|
|
23
|
+
<key>EnvironmentVariables</key>
|
|
24
|
+
<dict>
|
|
25
|
+
<key>PATH</key>
|
|
26
|
+
<string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:{{HOME}}/.local/bin</string>
|
|
27
|
+
<key>HOME</key>
|
|
28
|
+
<string>{{HOME}}</string>
|
|
29
|
+
</dict>
|
|
30
|
+
</dict>
|
|
31
|
+
</plist>
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# NOESIS Daily Digest
|
|
3
|
+
# Compiles yesterday, prepares today, generates tasks, sends notification.
|
|
4
|
+
# LaunchAgent: runs at user-configured time each morning.
|
|
5
|
+
|
|
6
|
+
unset CLAUDECODE
|
|
7
|
+
set -e
|
|
8
|
+
|
|
9
|
+
CLAUDE_BIN="$HOME/.local/bin/claude"
|
|
10
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
11
|
+
VAULT_DIR="$(dirname "$SCRIPT_DIR")/vault"
|
|
12
|
+
LOG_DIR="$(dirname "$SCRIPT_DIR")/vault/AI.ENV/logs"
|
|
13
|
+
OUTPUT_DIR="$(dirname "$SCRIPT_DIR")/vault/AI.ENV/outputs"
|
|
14
|
+
NOTIFY_SCRIPT="$SCRIPT_DIR/noesis-notify.sh"
|
|
15
|
+
|
|
16
|
+
DATE=$(date +%Y-%m-%d)
|
|
17
|
+
YESTERDAY=$(date -v-1d +%Y-%m-%d 2>/dev/null || date -d "yesterday" +%Y-%m-%d)
|
|
18
|
+
LOG_FILE="$LOG_DIR/digest-${DATE}.log"
|
|
19
|
+
|
|
20
|
+
mkdir -p "$LOG_DIR" "$OUTPUT_DIR"
|
|
21
|
+
|
|
22
|
+
log() {
|
|
23
|
+
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
log "=== Starting daily digest ==="
|
|
27
|
+
|
|
28
|
+
# Gather context
|
|
29
|
+
DAILY_NOTE="$VAULT_DIR/SHARED.ENV/daily-notes/${YESTERDAY}.md"
|
|
30
|
+
OBJECTIVES="$VAULT_DIR/SHARED.ENV/registres/projets-actifs.md"
|
|
31
|
+
MOMENTUM="$VAULT_DIR/SHARED.ENV/registres/momentum.md"
|
|
32
|
+
PENDING="$VAULT_DIR/SHARED.ENV/queue/pending.md"
|
|
33
|
+
CAPTURES_DIR="$VAULT_DIR/SHARED.ENV/captures"
|
|
34
|
+
|
|
35
|
+
YESTERDAY_CONTEXT=""
|
|
36
|
+
if [ -f "$DAILY_NOTE" ]; then
|
|
37
|
+
YESTERDAY_CONTEXT=$(head -80 "$DAILY_NOTE" 2>/dev/null || echo "")
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
OBJECTIVES_CONTEXT=""
|
|
41
|
+
if [ -f "$OBJECTIVES" ]; then
|
|
42
|
+
OBJECTIVES_CONTEXT=$(head -60 "$OBJECTIVES" 2>/dev/null || echo "")
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
MOMENTUM_CONTEXT=""
|
|
46
|
+
if [ -f "$MOMENTUM" ]; then
|
|
47
|
+
MOMENTUM_CONTEXT=$(head -40 "$MOMENTUM" 2>/dev/null || echo "")
|
|
48
|
+
fi
|
|
49
|
+
|
|
50
|
+
PENDING_CONTEXT=""
|
|
51
|
+
if [ -f "$PENDING" ]; then
|
|
52
|
+
PENDING_CONTEXT=$(cat "$PENDING" 2>/dev/null || echo "")
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
# Recent captures (last 3 days)
|
|
56
|
+
RECENT_CAPTURES=""
|
|
57
|
+
if [ -d "$CAPTURES_DIR" ]; then
|
|
58
|
+
RECENT_CAPTURES=$(find "$CAPTURES_DIR" -name "*.md" -mtime -3 -exec basename {} \; 2>/dev/null | head -10)
|
|
59
|
+
fi
|
|
60
|
+
|
|
61
|
+
PROMPT=$(cat <<'PROMPT_EOF'
|
|
62
|
+
You are the NOESIS daily digest agent. Generate today's brief.
|
|
63
|
+
|
|
64
|
+
CONTEXT:
|
|
65
|
+
- Yesterday's daily note: %YESTERDAY%
|
|
66
|
+
- Active objectives: %OBJECTIVES%
|
|
67
|
+
- Momentum: %MOMENTUM%
|
|
68
|
+
- Pending tasks: %PENDING%
|
|
69
|
+
- Recent captures: %CAPTURES%
|
|
70
|
+
|
|
71
|
+
INSTRUCTIONS:
|
|
72
|
+
1. Read the user's profil.md and voice-dna.md Part 1 to know their language and tone.
|
|
73
|
+
2. Write a daily digest in their primary language with these sections:
|
|
74
|
+
- **Yesterday summary** (2-3 lines max)
|
|
75
|
+
- **Today's focus** (based on objectives and momentum)
|
|
76
|
+
- **Tasks for today** (generate 2-4 concrete tasks, add to pending.md if not already there)
|
|
77
|
+
- **Signal** (any pattern worth noting — burst, stagnation, new project started)
|
|
78
|
+
3. Save the digest to: vault/AI.ENV/outputs/digest-YYYY-MM-DD.md (use today's date)
|
|
79
|
+
4. Also save a copy to: vault/AI.ENV/outputs/digest-latest.md (overwrite)
|
|
80
|
+
5. If there are new tasks, add them to vault/SHARED.ENV/queue/pending.md
|
|
81
|
+
6. Keep it under 30 lines. Compact. Every line carries information.
|
|
82
|
+
PROMPT_EOF
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
# Replace placeholders
|
|
86
|
+
PROMPT="${PROMPT//%YESTERDAY%/$YESTERDAY_CONTEXT}"
|
|
87
|
+
PROMPT="${PROMPT//%OBJECTIVES%/$OBJECTIVES_CONTEXT}"
|
|
88
|
+
PROMPT="${PROMPT//%MOMENTUM%/$MOMENTUM_CONTEXT}"
|
|
89
|
+
PROMPT="${PROMPT//%PENDING%/$PENDING_CONTEXT}"
|
|
90
|
+
PROMPT="${PROMPT//%CAPTURES%/$RECENT_CAPTURES}"
|
|
91
|
+
|
|
92
|
+
# Run Claude
|
|
93
|
+
cd "$(dirname "$SCRIPT_DIR")"
|
|
94
|
+
"$CLAUDE_BIN" -p "$PROMPT" --max-turns 3 >> "$LOG_FILE" 2>&1
|
|
95
|
+
EXIT_CODE=$?
|
|
96
|
+
|
|
97
|
+
if [ $EXIT_CODE -eq 0 ]; then
|
|
98
|
+
log "Digest generated successfully."
|
|
99
|
+
# Send notification
|
|
100
|
+
if [ -f "$NOTIFY_SCRIPT" ]; then
|
|
101
|
+
bash "$NOTIFY_SCRIPT" "NOESIS" "Your daily brief is ready."
|
|
102
|
+
fi
|
|
103
|
+
else
|
|
104
|
+
log "ERROR: Claude exited with code $EXIT_CODE"
|
|
105
|
+
fi
|
|
106
|
+
|
|
107
|
+
log "=== Daily digest complete ==="
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# NOESIS Inbox Watcher
|
|
3
|
+
# Triggered by WatchPaths when captures/ changes.
|
|
4
|
+
# Sorts new files: ideas → captures, tasks → pending.md
|
|
5
|
+
|
|
6
|
+
set -e
|
|
7
|
+
|
|
8
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
9
|
+
VAULT_DIR="$(dirname "$SCRIPT_DIR")/vault"
|
|
10
|
+
LOG_DIR="$VAULT_DIR/AI.ENV/logs"
|
|
11
|
+
CAPTURES_DIR="$VAULT_DIR/SHARED.ENV/captures"
|
|
12
|
+
PENDING="$VAULT_DIR/SHARED.ENV/queue/pending.md"
|
|
13
|
+
|
|
14
|
+
DATE=$(date +%Y-%m-%d)
|
|
15
|
+
LOG_FILE="$LOG_DIR/inbox-watcher-${DATE}.log"
|
|
16
|
+
|
|
17
|
+
mkdir -p "$LOG_DIR"
|
|
18
|
+
|
|
19
|
+
log() {
|
|
20
|
+
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
# Anti-bounce: WatchPaths can trigger in bursts
|
|
24
|
+
LOCK_FILE="$LOG_DIR/.inbox-watcher.lock"
|
|
25
|
+
if [ -f "$LOCK_FILE" ]; then
|
|
26
|
+
LOCK_AGE=$(( $(date +%s) - $(stat -f %m "$LOCK_FILE" 2>/dev/null || stat -c %Y "$LOCK_FILE" 2>/dev/null || echo 0) ))
|
|
27
|
+
if [ "$LOCK_AGE" -lt 30 ]; then
|
|
28
|
+
exit 0
|
|
29
|
+
fi
|
|
30
|
+
fi
|
|
31
|
+
touch "$LOCK_FILE"
|
|
32
|
+
trap 'rm -f "$LOCK_FILE"' EXIT
|
|
33
|
+
|
|
34
|
+
sleep 2 # Wait for writes to stabilize
|
|
35
|
+
|
|
36
|
+
log "=== Inbox watcher triggered ==="
|
|
37
|
+
|
|
38
|
+
# Count new files in captures/ (modified in last 5 minutes)
|
|
39
|
+
NEW_FILES=$(find "$CAPTURES_DIR" -name "*.md" -mmin -5 2>/dev/null | wc -l | tr -d ' ')
|
|
40
|
+
|
|
41
|
+
if [ "$NEW_FILES" -gt 0 ]; then
|
|
42
|
+
log "Found $NEW_FILES new file(s) in captures/"
|
|
43
|
+
|
|
44
|
+
# List new files
|
|
45
|
+
find "$CAPTURES_DIR" -name "*.md" -mmin -5 2>/dev/null | while read -r f; do
|
|
46
|
+
BASENAME=$(basename "$f")
|
|
47
|
+
log " New: $BASENAME"
|
|
48
|
+
|
|
49
|
+
# Simple task detection: if filename starts with "task-" or contains task markers
|
|
50
|
+
if echo "$BASENAME" | grep -qi "^task"; then
|
|
51
|
+
log " → Detected as task, checking for task lines"
|
|
52
|
+
TASK_LINES=$(grep "^- \[" "$f" 2>/dev/null || echo "")
|
|
53
|
+
if [ -n "$TASK_LINES" ]; then
|
|
54
|
+
echo "" >> "$PENDING"
|
|
55
|
+
echo "$TASK_LINES" >> "$PENDING"
|
|
56
|
+
log " → Appended to pending.md"
|
|
57
|
+
fi
|
|
58
|
+
fi
|
|
59
|
+
done
|
|
60
|
+
else
|
|
61
|
+
log "No new files detected."
|
|
62
|
+
fi
|
|
63
|
+
|
|
64
|
+
log "=== Inbox watcher complete ==="
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# NOESIS Maintenance
|
|
3
|
+
# Monthly: log rotation + vault git commit
|
|
4
|
+
# LaunchAgent: 1st of month at 6am
|
|
5
|
+
|
|
6
|
+
set -e
|
|
7
|
+
|
|
8
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
9
|
+
VAULT_DIR="$(dirname "$SCRIPT_DIR")/vault"
|
|
10
|
+
LOG_DIR="$VAULT_DIR/AI.ENV/logs"
|
|
11
|
+
ROOT_DIR="$(dirname "$SCRIPT_DIR")"
|
|
12
|
+
|
|
13
|
+
DATE=$(date +%Y-%m-%d)
|
|
14
|
+
LOG_FILE="$LOG_DIR/maintenance-${DATE}.log"
|
|
15
|
+
|
|
16
|
+
mkdir -p "$LOG_DIR"
|
|
17
|
+
|
|
18
|
+
log() {
|
|
19
|
+
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
log "=== Starting monthly maintenance ==="
|
|
23
|
+
|
|
24
|
+
# 1. Log rotation: compress logs older than 30 days
|
|
25
|
+
log "Rotating logs older than 30 days..."
|
|
26
|
+
ROTATED=0
|
|
27
|
+
find "$LOG_DIR" -name "*.log" -mtime +30 -not -name "maintenance-*" 2>/dev/null | while read -r f; do
|
|
28
|
+
gzip "$f" 2>/dev/null && ROTATED=$((ROTATED + 1))
|
|
29
|
+
done
|
|
30
|
+
log "Rotated $ROTATED log file(s)."
|
|
31
|
+
|
|
32
|
+
# Remove compressed logs older than 90 days
|
|
33
|
+
REMOVED=$(find "$LOG_DIR" -name "*.log.gz" -mtime +90 2>/dev/null | wc -l | tr -d ' ')
|
|
34
|
+
find "$LOG_DIR" -name "*.log.gz" -mtime +90 -delete 2>/dev/null
|
|
35
|
+
log "Removed $REMOVED archived log(s) older than 90 days."
|
|
36
|
+
|
|
37
|
+
# 2. Vault git commit (if .git exists)
|
|
38
|
+
if [ -d "$ROOT_DIR/.git" ]; then
|
|
39
|
+
log "Git vault commit..."
|
|
40
|
+
cd "$ROOT_DIR"
|
|
41
|
+
git add -A 2>/dev/null
|
|
42
|
+
CHANGES=$(git status --porcelain 2>/dev/null | wc -l | tr -d ' ')
|
|
43
|
+
if [ "$CHANGES" -gt 0 ]; then
|
|
44
|
+
git commit -m "vault: monthly auto-commit $DATE" 2>/dev/null
|
|
45
|
+
log "Committed $CHANGES change(s)."
|
|
46
|
+
else
|
|
47
|
+
log "No changes to commit."
|
|
48
|
+
fi
|
|
49
|
+
else
|
|
50
|
+
log "No .git in vault root, skipping commit."
|
|
51
|
+
fi
|
|
52
|
+
|
|
53
|
+
# 3. Archive old daily notes (>60 days)
|
|
54
|
+
ARCHIVE_DIR="$VAULT_DIR/SHARED.ENV/daily-notes/archive"
|
|
55
|
+
OLD_NOTES=$(find "$VAULT_DIR/SHARED.ENV/daily-notes" -maxdepth 1 -name "*.md" -mtime +60 -not -name "template-*" 2>/dev/null | wc -l | tr -d ' ')
|
|
56
|
+
if [ "$OLD_NOTES" -gt 0 ]; then
|
|
57
|
+
mkdir -p "$ARCHIVE_DIR"
|
|
58
|
+
find "$VAULT_DIR/SHARED.ENV/daily-notes" -maxdepth 1 -name "*.md" -mtime +60 -not -name "template-*" -exec mv {} "$ARCHIVE_DIR/" \; 2>/dev/null
|
|
59
|
+
log "Archived $OLD_NOTES daily note(s) older than 60 days."
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
log "=== Monthly maintenance complete ==="
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# NOESIS Notify -- Cross-platform notification
|
|
3
|
+
# Usage: noesis-notify.sh "Title" "Message"
|
|
4
|
+
|
|
5
|
+
TITLE="${1:-NOESIS}"
|
|
6
|
+
MESSAGE="${2:-Notification}"
|
|
7
|
+
|
|
8
|
+
if command -v osascript &>/dev/null; then
|
|
9
|
+
# macOS
|
|
10
|
+
osascript -e "display notification \"$MESSAGE\" with title \"$TITLE\""
|
|
11
|
+
elif command -v notify-send &>/dev/null; then
|
|
12
|
+
# Linux (libnotify)
|
|
13
|
+
notify-send "$TITLE" "$MESSAGE"
|
|
14
|
+
fi
|
|
15
|
+
# Silent fallback if neither available
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# NOESIS Auto Session
|
|
3
|
+
# Autonomous analysis, connections, deep work on pending tasks.
|
|
4
|
+
# LaunchAgent: runs once daily at user-configured time.
|
|
5
|
+
|
|
6
|
+
unset CLAUDECODE
|
|
7
|
+
set -e
|
|
8
|
+
|
|
9
|
+
CLAUDE_BIN="$HOME/.local/bin/claude"
|
|
10
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
11
|
+
VAULT_DIR="$(dirname "$SCRIPT_DIR")/vault"
|
|
12
|
+
LOG_DIR="$VAULT_DIR/AI.ENV/logs"
|
|
13
|
+
OUTPUT_DIR="$VAULT_DIR/AI.ENV/outputs"
|
|
14
|
+
|
|
15
|
+
DATE=$(date +%Y-%m-%d)
|
|
16
|
+
LOG_FILE="$LOG_DIR/session-auto-${DATE}.log"
|
|
17
|
+
|
|
18
|
+
mkdir -p "$LOG_DIR" "$OUTPUT_DIR"
|
|
19
|
+
|
|
20
|
+
log() {
|
|
21
|
+
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
log "=== Starting auto session ==="
|
|
25
|
+
|
|
26
|
+
PROMPT=$(cat <<'PROMPT_EOF'
|
|
27
|
+
You are the NOESIS autonomous session agent. Work in the background.
|
|
28
|
+
|
|
29
|
+
INSTRUCTIONS:
|
|
30
|
+
1. Read the user's profil.md, voice-dna.md, and CLAUDE.local.md for context and rules.
|
|
31
|
+
2. Read today's digest (vault/AI.ENV/outputs/digest-latest.md) for today's focus.
|
|
32
|
+
3. Read pending tasks (vault/SHARED.ENV/queue/pending.md).
|
|
33
|
+
4. Read momentum (vault/SHARED.ENV/registres/momentum.md).
|
|
34
|
+
5. Read active projects (vault/SHARED.ENV/registres/projets-actifs.md).
|
|
35
|
+
|
|
36
|
+
DO (pick 2-3 from this list based on what's most useful today):
|
|
37
|
+
- Complete pending tasks that don't require user input
|
|
38
|
+
- Update momentum.md with current observations
|
|
39
|
+
- Identify connections between active projects
|
|
40
|
+
- Flag patterns (stagnation, burst activity, new directions)
|
|
41
|
+
- Prepare material for the user's next session (analysis, suggestions)
|
|
42
|
+
- Update project files if status has changed
|
|
43
|
+
|
|
44
|
+
DO NOT:
|
|
45
|
+
- Modify USER.ENV files (read-only)
|
|
46
|
+
- Make decisions on behalf of the user
|
|
47
|
+
- Create new projects or objectives
|
|
48
|
+
- Use affirmative language for proposals ("this could be" not "this is")
|
|
49
|
+
|
|
50
|
+
Write outputs to vault/AI.ENV/outputs/ with descriptive filenames.
|
|
51
|
+
Update the daily note (vault/SHARED.ENV/daily-notes/YYYY-MM-DD.md) with a session summary.
|
|
52
|
+
Mark completed tasks in pending.md with [x] and completion date.
|
|
53
|
+
Write in the user's primary language.
|
|
54
|
+
Keep total output concise. Quality over quantity.
|
|
55
|
+
PROMPT_EOF
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
cd "$(dirname "$SCRIPT_DIR")"
|
|
59
|
+
"$CLAUDE_BIN" -p "$PROMPT" --max-turns 5 >> "$LOG_FILE" 2>&1
|
|
60
|
+
EXIT_CODE=$?
|
|
61
|
+
|
|
62
|
+
if [ $EXIT_CODE -eq 0 ]; then
|
|
63
|
+
log "Auto session completed successfully."
|
|
64
|
+
else
|
|
65
|
+
log "ERROR: Claude exited with code $EXIT_CODE"
|
|
66
|
+
fi
|
|
67
|
+
|
|
68
|
+
log "=== Auto session complete ==="
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: analyzer
|
|
3
|
+
description: "Subagent for deep analysis. Used by auto sessions for project connections, momentum updates, and file analysis. Read-only vault access."
|
|
4
|
+
tools: Read, Grep, Glob
|
|
5
|
+
model: sonnet
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are **analyzer**, a specialized subagent of the NOESIS system.
|
|
9
|
+
|
|
10
|
+
## Mission
|
|
11
|
+
|
|
12
|
+
When dispatched, you:
|
|
13
|
+
1. Read the files or directories specified
|
|
14
|
+
2. Identify structure, themes, and connections
|
|
15
|
+
3. Generate a structured summary
|
|
16
|
+
4. Note connections between projects (Obsidian `[[links]]`)
|
|
17
|
+
5. Update momentum and patterns if requested
|
|
18
|
+
|
|
19
|
+
## Output format
|
|
20
|
+
|
|
21
|
+
```markdown
|
|
22
|
+
**Source:** /path/to/file-or-directory
|
|
23
|
+
**Type:** [writing/code/notes/research/other]
|
|
24
|
+
**Summary:** [3-5 lines]
|
|
25
|
+
**Themes:** [list]
|
|
26
|
+
**Connections:** [[project-a]] ↔ [[project-b]] (why)
|
|
27
|
+
**Suggested tags:** #tag1 #tag2
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## When used by auto sessions
|
|
31
|
+
|
|
32
|
+
The daily auto session dispatches you to:
|
|
33
|
+
- Scan recent activity (files modified in the last 24-48h)
|
|
34
|
+
- Identify connections between active projects
|
|
35
|
+
- Update `SHARED.ENV/registres/momentum.md` with current state
|
|
36
|
+
- Flag patterns (burst activity, stagnation, new project started)
|
|
37
|
+
- Generate task suggestions for `SHARED.ENV/queue/pending.md`
|
|
38
|
+
|
|
39
|
+
## Principles
|
|
40
|
+
|
|
41
|
+
- Factual, not speculative
|
|
42
|
+
- Concise but informative
|
|
43
|
+
- Note uncertainties explicitly
|
|
44
|
+
- Write to SHARED.ENV and AI.ENV only — never USER.ENV
|
|
45
|
+
- Everything you produce is a **proposal**, not a decision
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: voice-analyzer
|
|
3
|
+
description: "Subagent for writing style analysis. Reads text samples, analyzes voice patterns, generates voice-dna.md drafts."
|
|
4
|
+
tools: Read, Grep, Glob
|
|
5
|
+
model: sonnet
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are **voice-analyzer**, a specialized subagent of the NOESIS system.
|
|
9
|
+
|
|
10
|
+
## Mission
|
|
11
|
+
|
|
12
|
+
Analyze the user's writing style from text samples and generate or enrich `vault/USER.ENV/voice-dna.md` Part 2.
|
|
13
|
+
|
|
14
|
+
## Process
|
|
15
|
+
|
|
16
|
+
1. Receive a list of text files (3-5 samples, selected by the calling agent)
|
|
17
|
+
2. Read each file fully
|
|
18
|
+
3. Analyze:
|
|
19
|
+
- **Sentence length:** average, range, variation
|
|
20
|
+
- **Register:** formal, casual, technical, poetic, mixed
|
|
21
|
+
- **Recurring tics:** words, phrases, punctuation habits
|
|
22
|
+
- **Rhythm:** short/long alternation, continuous flow, fragmented
|
|
23
|
+
- **Narrative voice:** first person, third person, omniscient, mixed
|
|
24
|
+
- **What's absent:** themes or techniques the user avoids
|
|
25
|
+
4. Generate Part 2 of voice-dna.md in the user's primary language
|
|
26
|
+
5. Remove the `{{VOICE_PENDING}}` marker if present
|
|
27
|
+
|
|
28
|
+
## Principles
|
|
29
|
+
|
|
30
|
+
- Analyze **style**, not **content** — you're reading how they write, not what they write
|
|
31
|
+
- Be specific: "uses em dashes heavily" not "has a distinctive style"
|
|
32
|
+
- Note patterns across files, not just within one
|
|
33
|
+
- This is a draft — the user refines it over time via `/profile-deep`
|
|
34
|
+
- Write in the user's primary language
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Daily Note - {{DATE}}
|
|
2
|
+
|
|
3
|
+
*{{DAY_OF_WEEK}}.*
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
### Sessions
|
|
8
|
+
|
|
9
|
+
*(Filled automatically by interactive and autonomous sessions.)*
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
### Decisions
|
|
14
|
+
|
|
15
|
+
-
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
### Emerging ideas
|
|
20
|
+
|
|
21
|
+
-
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
### Emotional state
|
|
26
|
+
|
|
27
|
+
-
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
### Top 3 for tomorrow
|
|
32
|
+
|
|
33
|
+
1.
|
|
34
|
+
2.
|
|
35
|
+
3.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
#daily-note
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Gamification -- Configuration
|
|
2
|
+
|
|
3
|
+
*Systeme de progression. Dopamine immediate, pas de punition, grace periods.*
|
|
4
|
+
*Les categories XP sont adaptees au profil detecte lors du setup.*
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Points (XP)
|
|
9
|
+
|
|
10
|
+
### Categories generiques
|
|
11
|
+
|
|
12
|
+
| Categorie | Action | XP | Condition |
|
|
13
|
+
|-----------|--------|-----|-----------|
|
|
14
|
+
| Ecriture | 100 mots ecrits | 15 | Tout projet creatif |
|
|
15
|
+
| Ecriture | 500 mots en une session | 40 | Bonus cumul |
|
|
16
|
+
| Ecriture | 1000 mots en une session | 80 | Bonus cumul |
|
|
17
|
+
| Code | Commit significatif | 20 | Avancee reelle |
|
|
18
|
+
| Code | Feature terminee | 80 | Feature complete |
|
|
19
|
+
| Organisation | Session de travail productive | 20 | Avancee significative |
|
|
20
|
+
| Organisation | Tache completee | 10 | Via /task |
|
|
21
|
+
| Reflexion | Connexion identifiee | 15 | Lien entre projets |
|
|
22
|
+
| Reflexion | Pattern documente | 25 | Nouveau pattern dans registre |
|
|
23
|
+
| Publication | Contenu publie | 120 | Publie, pas juste programme |
|
|
24
|
+
| Publication | Premiere publication | 200 | Bonus deblocage |
|
|
25
|
+
| Projet | Milestone atteint | 250 | Etape majeure |
|
|
26
|
+
| Projet | Projet termine | 1000 | Completion confirmee |
|
|
27
|
+
| Systeme | Session interactive | 3 | Chaque session |
|
|
28
|
+
|
|
29
|
+
*Ces categories sont des valeurs par defaut. Le setup les adapte selon les projets detectes.*
|
|
30
|
+
*Tu peux les modifier a tout moment.*
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Streaks
|
|
35
|
+
|
|
36
|
+
### Streak principal
|
|
37
|
+
- **Condition :** Activite creative ou productive (100 mots, 1 commit, 1 tache)
|
|
38
|
+
- **Grace period :** 48h (2 jours sans activite avant que le streak se pause)
|
|
39
|
+
- **Bonus :** +5 XP par jour de streak actif (plafond : +50 XP/jour a 10 jours)
|
|
40
|
+
- **Pause vs bris :** Le streak se **pause** (compteur gele), il ne se **brise** jamais. Reprendre remet le compteur ou il etait.
|
|
41
|
+
|
|
42
|
+
### Regle anti-pression
|
|
43
|
+
- Les sessions autonomes NE MENTIONNENT JAMAIS le streak
|
|
44
|
+
- Le streak est une info passive consultable via /status, jamais affichee proactivement
|
|
45
|
+
- **Celebrer, jamais culpabiliser.**
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Niveaux
|
|
50
|
+
|
|
51
|
+
18 niveaux en 3 actes. Les premiers tombent vite (dopamine). Les derniers demandent un vrai effort.
|
|
52
|
+
|
|
53
|
+
### Acte I : L'Eveil (niveaux 1-5)
|
|
54
|
+
| Niveau | Nom | XP requis |
|
|
55
|
+
|--------|-----|-----------|
|
|
56
|
+
| 1 | Le Dormeur | 0 |
|
|
57
|
+
| 2 | L'Eveille | 100 |
|
|
58
|
+
| 3 | Le Curieux | 300 |
|
|
59
|
+
| 4 | L'Apprenti | 600 |
|
|
60
|
+
| 5 | L'Initie | 1000 |
|
|
61
|
+
|
|
62
|
+
### Acte II : La Forge (niveaux 6-12)
|
|
63
|
+
| Niveau | Nom | XP requis |
|
|
64
|
+
|--------|-----|-----------|
|
|
65
|
+
| 6 | L'Artisan | 1500 |
|
|
66
|
+
| 7 | Le Forgeur | 2200 |
|
|
67
|
+
| 8 | L'Obsede | 3000 |
|
|
68
|
+
| 9 | Le Marathonien | 4000 |
|
|
69
|
+
| 10 | Le Fidele | 5200 |
|
|
70
|
+
| 11 | L'Enracine | 6500 |
|
|
71
|
+
| 12 | Le Constructeur | 8000 |
|
|
72
|
+
|
|
73
|
+
### Acte III : La Transmission (niveaux 13-18)
|
|
74
|
+
| Niveau | Nom | XP requis |
|
|
75
|
+
|--------|-----|-----------|
|
|
76
|
+
| 13 | L'Incandescent | 10000 |
|
|
77
|
+
| 14 | Le Passeur | 12500 |
|
|
78
|
+
| 15 | L'Architecte | 15000 |
|
|
79
|
+
| 16 | Le Visionnaire | 18000 |
|
|
80
|
+
| 17 | Le Sage | 21500 |
|
|
81
|
+
| 18 | Le Maitre | 25000 |
|
|
82
|
+
|
|
83
|
+
*Les noms de niveaux sont personnalisables. Le setup peut proposer des noms adaptes a l'univers de l'utilisateur.*
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
#gamification #config
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# XP Tracker
|
|
2
|
+
|
|
3
|
+
*Mis a jour automatiquement par les sessions.*
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Etat actuel
|
|
8
|
+
|
|
9
|
+
- **XP total :** 0
|
|
10
|
+
- **Niveau :** 1 -- Le Dormeur
|
|
11
|
+
- **Prochain niveau :** L'Eveille (100 XP)
|
|
12
|
+
- **Streak :** 0 jours
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Historique
|
|
17
|
+
|
|
18
|
+
| Date | Action | XP | Total |
|
|
19
|
+
|------|--------|-----|-------|
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
#gamification #xp
|