create-egregore 0.19.20 → 0.19.22
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/assets/egregore-launcher.js +124 -12
- package/bin/cli.js +3 -4
- package/lib/auth.js +3 -4
- package/lib/path-lookup.js +59 -0
- package/lib/setup.js +52 -6
- package/package.json +2 -2
- package/runtime/codex/.claude/context/notification-consent.md +66 -0
- package/runtime/codex/.codex/hooks/branch-guard.js +14 -3
- package/runtime/codex/.codex/skills/add/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/announce/SKILL.md +21 -8
- package/runtime/codex/.codex/skills/answer/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/archive/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/ask/SKILL.md +14 -6
- package/runtime/codex/.codex/skills/audit/SKILL.md +29 -0
- package/runtime/codex/.codex/skills/autosave/SKILL.md +29 -0
- package/runtime/codex/.codex/skills/branch/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/checkup/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/commit/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/contribute/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/dark-mode/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/delete-user/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/demo-mode/SKILL.md +29 -0
- package/runtime/codex/.codex/skills/deploy-bridge/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/design/SKILL.md +29 -0
- package/runtime/codex/.codex/skills/egregore-voice/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/emissary/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/env/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/handoff/SKILL.md +15 -6
- package/runtime/codex/.codex/skills/harvest/QUESTION_PALETTE.md +76 -0
- package/runtime/codex/.codex/skills/harvest/SKILL.md +30 -6
- package/runtime/codex/.codex/skills/ingest/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/ingest-google/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/ingest-user-interview/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/invite/SKILL.md +6 -2
- package/runtime/codex/.codex/skills/issue/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/me/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/meeting/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/minion/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/mock/SKILL.md +29 -0
- package/runtime/codex/.codex/skills/note/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/onboarding/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/pr/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/product-voice/SKILL.md +29 -0
- package/runtime/codex/.codex/skills/project/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/pull/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/push/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/quest/SKILL.md +6 -3
- package/runtime/codex/.codex/skills/quest-suggest/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/reflect/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/review-pr/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/save/SKILL.md +6 -4
- package/runtime/codex/.codex/skills/scroll/SKILL.md +92 -23
- package/runtime/codex/.codex/skills/scroll/assets/shell.html +381 -52
- package/runtime/codex/.codex/skills/session-view/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/setup/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/summon/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/sync-repos/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/task/SKILL.md +9 -5
- package/runtime/codex/.codex/skills/teams-connect/SKILL.md +29 -0
- package/runtime/codex/.codex/skills/telegram-connect/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/telemetry/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/test/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/thread/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/todo/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/tui-design/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/tutorial/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/update/SKILL.md +8 -4
- package/runtime/codex/.codex/skills/visual-explain/SKILL.md +8 -4
- package/runtime/codex/.codex/spec-manifest.json +4 -4
- package/runtime/codex/AGENTS.md +36 -14
- package/runtime/codex/bin/activity-data.sh +1 -1
- package/runtime/codex/bin/agent.sh +38 -19
- package/runtime/codex/bin/attendant.sh +8 -2
- package/runtime/codex/bin/autosave.sh +1 -1
- package/runtime/codex/bin/capture-reconcile.sh +8 -6
- package/runtime/codex/bin/capture-run.sh +1 -1
- package/runtime/codex/bin/codex-install-skills.sh +1 -1
- package/runtime/codex/bin/codex-render-spec.mjs +12 -5
- package/runtime/codex/bin/codex-session-start.sh +1 -1
- package/runtime/codex/bin/codex-sync-skills.sh +9 -5
- package/runtime/codex/bin/dashboard-data.sh +1 -1
- package/runtime/codex/bin/graph-batch.sh +1 -1
- package/runtime/codex/bin/graph-op.sh +1 -1
- package/runtime/codex/bin/graph-wal.sh +1 -1
- package/runtime/codex/bin/graph.sh +1 -1
- package/runtime/codex/bin/handoff-pr-backfill.sh +1 -1
- package/runtime/codex/bin/handoff-run.sh +53 -39
- package/runtime/codex/bin/handoff-save-egregore.sh +62 -32
- package/runtime/codex/bin/index-handoff.sh +1 -1
- package/runtime/codex/bin/ingest-graph.sh +1 -1
- package/runtime/codex/bin/ingest.sh +1 -1
- package/runtime/codex/bin/lib/artifact-id.sh +1 -1
- package/runtime/codex/bin/lib/config.sh +56 -20
- package/runtime/codex/bin/lib/context.sh +7 -1
- package/runtime/codex/bin/lib/ensure-develop.sh +1 -1
- package/runtime/codex/bin/lib/git-sync.sh +145 -59
- package/runtime/codex/bin/lib/greeting.sh +14 -0
- package/runtime/codex/bin/lib/hash.sh +1 -1
- package/runtime/codex/bin/lib/noncode.sh +1 -1
- package/runtime/codex/bin/lib/time.sh +1 -1
- package/runtime/codex/bin/notify.sh +492 -153
- package/runtime/codex/bin/person.sh +1 -1
- package/runtime/codex/bin/publish-artifact.sh +39 -4
- package/runtime/codex/bin/publish-references.sh +1 -1
- package/runtime/codex/bin/repo-state.sh +7 -10
- package/runtime/codex/bin/search.sh +1 -1
- package/runtime/codex/bin/session-autosave.sh +1 -1
- package/runtime/codex/bin/session-log.sh +1 -1
- package/runtime/codex/bin/settings.sh +32 -2
- package/runtime/codex/bin/telemetry.sh +1 -1
- package/runtime/codex/bin/worktree-create.sh +14 -4
- package/runtime/codex/bin/worktree-remove.sh +1 -1
- package/runtime/codex/bin/worktree.sh +1 -1
- package/runtime/codex/manifest.json +18 -1
- package/runtime/pi/.claude/context/notification-consent.md +66 -0
- package/runtime/pi/.codex/hooks/branch-guard.js +14 -3
- package/runtime/pi/.codex/skills/add/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/announce/SKILL.md +21 -8
- package/runtime/pi/.codex/skills/answer/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/archive/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/ask/SKILL.md +14 -6
- package/runtime/pi/.codex/skills/audit/SKILL.md +29 -0
- package/runtime/pi/.codex/skills/autosave/SKILL.md +29 -0
- package/runtime/pi/.codex/skills/branch/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/checkup/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/commit/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/contribute/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/dark-mode/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/delete-user/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/demo-mode/SKILL.md +29 -0
- package/runtime/pi/.codex/skills/deploy-bridge/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/design/SKILL.md +29 -0
- package/runtime/pi/.codex/skills/egregore-voice/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/emissary/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/env/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/handoff/SKILL.md +15 -6
- package/runtime/pi/.codex/skills/harvest/QUESTION_PALETTE.md +76 -0
- package/runtime/pi/.codex/skills/harvest/SKILL.md +30 -6
- package/runtime/pi/.codex/skills/ingest/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/ingest-google/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/ingest-user-interview/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/invite/SKILL.md +6 -2
- package/runtime/pi/.codex/skills/issue/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/me/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/meeting/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/minion/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/mock/SKILL.md +29 -0
- package/runtime/pi/.codex/skills/note/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/onboarding/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/pr/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/product-voice/SKILL.md +29 -0
- package/runtime/pi/.codex/skills/project/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/pull/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/push/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/quest/SKILL.md +6 -3
- package/runtime/pi/.codex/skills/quest-suggest/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/reflect/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/review-pr/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/save/SKILL.md +6 -4
- package/runtime/pi/.codex/skills/scroll/SKILL.md +92 -23
- package/runtime/pi/.codex/skills/scroll/assets/shell.html +381 -52
- package/runtime/pi/.codex/skills/session-view/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/setup/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/summon/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/sync-repos/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/task/SKILL.md +9 -5
- package/runtime/pi/.codex/skills/teams-connect/SKILL.md +29 -0
- package/runtime/pi/.codex/skills/telegram-connect/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/telemetry/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/test/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/thread/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/todo/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/tui-design/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/tutorial/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/update/SKILL.md +8 -4
- package/runtime/pi/.codex/skills/visual-explain/SKILL.md +8 -4
- package/runtime/pi/.codex/spec-manifest.json +4 -4
- package/runtime/pi/.pi/APPEND_SYSTEM.md +34 -12
- package/runtime/pi/.pi/extensions/egregore.ts +8 -1
- package/runtime/pi/.pi/spec-manifest.json +2 -2
- package/runtime/pi/AGENTS.md +36 -14
- package/runtime/pi/bin/activity-data.sh +1 -1
- package/runtime/pi/bin/agent.sh +38 -19
- package/runtime/pi/bin/attendant.sh +8 -2
- package/runtime/pi/bin/autosave.sh +1 -1
- package/runtime/pi/bin/capture-reconcile.sh +8 -6
- package/runtime/pi/bin/capture-run.sh +1 -1
- package/runtime/pi/bin/codex-install-skills.sh +1 -1
- package/runtime/pi/bin/codex-render-spec.mjs +12 -5
- package/runtime/pi/bin/codex-session-start.sh +1 -1
- package/runtime/pi/bin/codex-sync-skills.sh +9 -5
- package/runtime/pi/bin/dashboard-data.sh +1 -1
- package/runtime/pi/bin/graph-batch.sh +1 -1
- package/runtime/pi/bin/graph-op.sh +1 -1
- package/runtime/pi/bin/graph-wal.sh +1 -1
- package/runtime/pi/bin/graph.sh +1 -1
- package/runtime/pi/bin/handoff-pr-backfill.sh +1 -1
- package/runtime/pi/bin/handoff-run.sh +53 -39
- package/runtime/pi/bin/handoff-save-egregore.sh +62 -32
- package/runtime/pi/bin/index-handoff.sh +1 -1
- package/runtime/pi/bin/ingest-graph.sh +1 -1
- package/runtime/pi/bin/ingest.sh +1 -1
- package/runtime/pi/bin/lib/artifact-id.sh +1 -1
- package/runtime/pi/bin/lib/config.sh +56 -20
- package/runtime/pi/bin/lib/context.sh +7 -1
- package/runtime/pi/bin/lib/ensure-develop.sh +1 -1
- package/runtime/pi/bin/lib/git-sync.sh +145 -59
- package/runtime/pi/bin/lib/greeting.sh +14 -0
- package/runtime/pi/bin/lib/hash.sh +1 -1
- package/runtime/pi/bin/lib/noncode.sh +1 -1
- package/runtime/pi/bin/lib/time.sh +1 -1
- package/runtime/pi/bin/notify.sh +492 -153
- package/runtime/pi/bin/person.sh +1 -1
- package/runtime/pi/bin/pi-session-start.sh +1 -1
- package/runtime/pi/bin/publish-artifact.sh +39 -4
- package/runtime/pi/bin/publish-references.sh +1 -1
- package/runtime/pi/bin/repo-state.sh +7 -10
- package/runtime/pi/bin/search.sh +1 -1
- package/runtime/pi/bin/session-autosave.sh +1 -1
- package/runtime/pi/bin/session-log.sh +1 -1
- package/runtime/pi/bin/settings.sh +32 -2
- package/runtime/pi/bin/telemetry.sh +1 -1
- package/runtime/pi/bin/worktree-create.sh +14 -4
- package/runtime/pi/bin/worktree-remove.sh +1 -1
- package/runtime/pi/bin/worktree.sh +1 -1
- package/runtime/pi/manifest.json +18 -1
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
#!/bin/bash
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
2
|
set -euo pipefail
|
|
3
3
|
|
|
4
4
|
# publish-artifact.sh — Generate HTML artifact + upload to API
|
|
5
5
|
# Usage: publish-artifact.sh <type> <file> [--title "..."] [--author "..."] [--description "..."] [--id "..."] [--raw-html] [--no-references]
|
|
6
6
|
#
|
|
7
7
|
# Connected mode (API key present): publishes to /api/artifacts/publish (permanent, org-scoped)
|
|
8
|
-
# OSS mode (no API key): publishes to /api/artifacts/share
|
|
8
|
+
# OSS mode (no API key): publishes to /api/artifacts/share on a PUBLIC, UNAUTHENTICATED
|
|
9
|
+
# relay (ephemeral, 7-day TTL). OFF unless the instance opted in — see
|
|
10
|
+
# "Public-relay opt-in" below and `bin/settings.sh relay on`.
|
|
9
11
|
#
|
|
10
12
|
# --id <slug>: stable artifact ID — re-publishing with the same ID upserts the content
|
|
11
13
|
# at the same URL (e.g. egregore.xyz/view/{org}/board). Connected mode only;
|
|
@@ -18,8 +20,13 @@ set -euo pipefail
|
|
|
18
20
|
# Set automatically when publish-references.sh invokes us for a child,
|
|
19
21
|
# preventing recursion.
|
|
20
22
|
#
|
|
21
|
-
# Outputs artifact URL on success, exits silently on failure.
|
|
23
|
+
# Outputs artifact URL on success, exits silently on soft failure.
|
|
22
24
|
# Designed for fire-and-forget use: `bash bin/publish-artifact.sh handoff file.md &`
|
|
25
|
+
#
|
|
26
|
+
# Exit codes: 0 ok (or soft failure — no URL on stdout) · 1 usage/validation
|
|
27
|
+
# 3 hosting turned off (features.publishing=false)
|
|
28
|
+
# 4 nothing uploaded — public relay not enabled and no org API key,
|
|
29
|
+
# or egregore.json is missing/unreadable (fail closed)
|
|
23
30
|
|
|
24
31
|
SCRIPT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
25
32
|
CONFIG="$SCRIPT_DIR/egregore.json"
|
|
@@ -77,6 +84,15 @@ if [ -f "$SCRIPT_DIR/.env" ]; then
|
|
|
77
84
|
EGREGORE_USE_PUBLISHED="${EGREGORE_USE_PUBLISHED:-$(grep '^EGREGORE_USE_PUBLISHED=' "$SCRIPT_DIR/.env" 2>/dev/null | cut -d'=' -f2- || true)}"
|
|
78
85
|
fi
|
|
79
86
|
|
|
87
|
+
# A config we cannot parse is a config we cannot trust. Every routing decision
|
|
88
|
+
# below — authenticated org upload vs. public relay, hosting on vs. off — is
|
|
89
|
+
# read out of this file, so an unreadable one means we cannot tell those apart.
|
|
90
|
+
if [ ! -f "$CONFIG" ] || ! jq -e 'type == "object"' "$CONFIG" >/dev/null 2>&1; then
|
|
91
|
+
echo "Not published — nothing left this machine." >&2
|
|
92
|
+
echo "egregore.json is missing or unreadable, so there is no way to tell an authenticated org upload from a public one." >&2
|
|
93
|
+
exit 4
|
|
94
|
+
fi
|
|
95
|
+
|
|
80
96
|
API_URL="${EGREGORE_API_URL:-$(jq -r '.api_url // empty' "$CONFIG" 2>/dev/null)}"
|
|
81
97
|
API_KEY="${EGREGORE_API_KEY:-}"
|
|
82
98
|
ORG_SLUG="$(jq -r '.slug // empty' "$CONFIG" 2>/dev/null)"
|
|
@@ -92,7 +108,8 @@ if [ -z "${EGREGORE_USE_PUBLISHED:-}" ]; then
|
|
|
92
108
|
fi
|
|
93
109
|
fi
|
|
94
110
|
|
|
95
|
-
# Public relay for OSS share endpoint
|
|
111
|
+
# Public relay for OSS share endpoint. Unauthenticated: anything posted here is
|
|
112
|
+
# readable by anyone holding the URL, for 7 days, with nothing in front of it.
|
|
96
113
|
RELAY_URL="https://egregore-production-55f2.up.railway.app"
|
|
97
114
|
|
|
98
115
|
# --- Artifact hosting off-switch (compliance / privacy) ---
|
|
@@ -109,6 +126,24 @@ if [ "$PUBLISHING_ENABLED" = "false" ]; then
|
|
|
109
126
|
exit 3
|
|
110
127
|
fi
|
|
111
128
|
|
|
129
|
+
# --- Public-relay opt-in (privacy) ---
|
|
130
|
+
# Without BOTH an api_url and an org API key there is exactly one upload route
|
|
131
|
+
# left: the unauthenticated public relay below. Content must not leave the
|
|
132
|
+
# machine for that route unless a person explicitly enabled it. The gate sits
|
|
133
|
+
# before rendering so the default path generates and uploads nothing.
|
|
134
|
+
#
|
|
135
|
+
# NOTE: use an explicit `== true` test, never jq's `// false`: `//` treats an
|
|
136
|
+
# explicit false like null and silently replaces it with the default.
|
|
137
|
+
if [ -z "$API_URL" ] || [ -z "$API_KEY" ]; then
|
|
138
|
+
PUBLIC_RELAY_ENABLED="$(jq -r 'if .features.public_relay == true then "true" else "false" end' "$CONFIG" 2>/dev/null || echo "false")"
|
|
139
|
+
if [ "$PUBLIC_RELAY_ENABLED" != "true" ]; then
|
|
140
|
+
echo "Not published — nothing left this machine." >&2
|
|
141
|
+
echo "Without an org API key the only sharing route is a public relay: no auth, anyone with the link can read it, expires after 7 days. It is off unless you turn it on." >&2
|
|
142
|
+
echo "Turn it on with: bin/settings.sh relay on" >&2
|
|
143
|
+
exit 4
|
|
144
|
+
fi
|
|
145
|
+
fi
|
|
146
|
+
|
|
112
147
|
# --- Prepare HTML ---
|
|
113
148
|
TMP_HTML="/tmp/egregore-artifacts/publish-$$.html"
|
|
114
149
|
mkdir -p /tmp/egregore-artifacts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#!/bin/bash
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
2
|
# repo-state.sh — Capture current branch state across all repos.
|
|
3
3
|
# Outputs a markdown table (## Repo State) for handoff files.
|
|
4
4
|
# Only includes repos on non-base branches or with uncommitted changes.
|
|
@@ -71,21 +71,18 @@ check_repo() {
|
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
# Check core repo
|
|
74
|
-
CORE_BASE
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
if git -C "$SCRIPT_DIR" show-ref --verify --quiet refs/remotes/origin/develop 2>/dev/null; then
|
|
78
|
-
CORE_BASE="develop"
|
|
79
|
-
else
|
|
80
|
-
CORE_BASE="main"
|
|
81
|
-
fi
|
|
74
|
+
if ! CORE_BASE=$(_get_base_branch); then
|
|
75
|
+
echo "repo-state: could not resolve the configured base branch" >&2
|
|
76
|
+
exit 1
|
|
82
77
|
fi
|
|
83
78
|
check_repo "$CORE_REPO" "$SCRIPT_DIR" "$CORE_BASE"
|
|
84
79
|
|
|
85
80
|
# Check managed repos
|
|
86
81
|
for REPO in $MANAGED_REPOS; do
|
|
87
82
|
REPO_DIR="$PARENT_DIR/$REPO"
|
|
88
|
-
BASE=$(_get_base_branch "$REPO"
|
|
83
|
+
if ! BASE=$(_get_base_branch "$REPO"); then
|
|
84
|
+
continue
|
|
85
|
+
fi
|
|
89
86
|
check_repo "$REPO" "$REPO_DIR" "$BASE"
|
|
90
87
|
done
|
|
91
88
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#!/bin/bash
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
2
|
set -euo pipefail
|
|
3
3
|
|
|
4
4
|
# settings.sh — deterministic config verbs for an Egregore instance.
|
|
@@ -10,6 +10,7 @@ set -euo pipefail
|
|
|
10
10
|
#
|
|
11
11
|
# Usage:
|
|
12
12
|
# settings.sh hosting status|on|off
|
|
13
|
+
# settings.sh relay status|on|off
|
|
13
14
|
# settings.sh repo list | add <name> [description] | remove <name>
|
|
14
15
|
# settings.sh admin list | add <github-handle> | remove <github-handle>
|
|
15
16
|
# settings.sh dump # full settings snapshot as JSON (for the launcher)
|
|
@@ -51,6 +52,7 @@ usage() {
|
|
|
51
52
|
settings.sh — Egregore instance settings
|
|
52
53
|
|
|
53
54
|
settings.sh hosting status|on|off
|
|
55
|
+
settings.sh relay status|on|off
|
|
54
56
|
settings.sh repo list | add <name> [description] | remove <name>
|
|
55
57
|
settings.sh admin list | add <github-handle> | remove <github-handle>
|
|
56
58
|
settings.sh people list | add <github-handle> | remove <github-handle>
|
|
@@ -86,6 +88,32 @@ cmd_hosting() {
|
|
|
86
88
|
esac
|
|
87
89
|
}
|
|
88
90
|
|
|
91
|
+
# The public share relay is the only upload route when there is no org API
|
|
92
|
+
# key. It is unauthenticated, readable by anyone with the URL, and expires
|
|
93
|
+
# after 7 days, so it is OFF unless explicitly enabled.
|
|
94
|
+
cmd_relay() {
|
|
95
|
+
local action="${1:-status}"
|
|
96
|
+
local enabled; enabled="$(jq -r 'if .features.public_relay == true then "true" else "false" end' "$CONFIG" 2>/dev/null || echo "false")"
|
|
97
|
+
case "$action" in
|
|
98
|
+
status)
|
|
99
|
+
if [ "$JSON" = 1 ]; then
|
|
100
|
+
jq -n --argjson on "$enabled" '{domain:"relay", public_relay:$on}'
|
|
101
|
+
elif [ "$enabled" = "true" ]; then
|
|
102
|
+
echo "Public share relay: ON — artifacts published without an org API key upload to a public, unauthenticated URL (expires after 7 days)"
|
|
103
|
+
else
|
|
104
|
+
echo "Public share relay: OFF — without an org API key, nothing uploads anywhere"
|
|
105
|
+
fi ;;
|
|
106
|
+
on)
|
|
107
|
+
_save '.features.public_relay = true'
|
|
108
|
+
echo "Public share relay: ON"
|
|
109
|
+
echo " Artifacts published without an org API key now upload to a public, unauthenticated URL that anyone with the link can read for 7 days." ;;
|
|
110
|
+
off)
|
|
111
|
+
_save '.features.public_relay = false'
|
|
112
|
+
echo "Public share relay: OFF — without an org API key, nothing uploads anywhere" ;;
|
|
113
|
+
*) _die "usage: settings.sh relay status|on|off" 1 ;;
|
|
114
|
+
esac
|
|
115
|
+
}
|
|
116
|
+
|
|
89
117
|
cmd_repo() {
|
|
90
118
|
local action="${1:-list}"; shift || true
|
|
91
119
|
case "$action" in
|
|
@@ -244,6 +272,7 @@ cmd_dump() {
|
|
|
244
272
|
org: .org_name,
|
|
245
273
|
slug: .slug,
|
|
246
274
|
hosting: (.features.publishing != false),
|
|
275
|
+
public_relay: (.features.public_relay == true),
|
|
247
276
|
repos: [.repos[]? | if type=="object" then . else {name:.} end],
|
|
248
277
|
admins: (.admins // []),
|
|
249
278
|
people: $people
|
|
@@ -265,10 +294,11 @@ set -- "${_args[@]+"${_args[@]}"}"
|
|
|
265
294
|
DOMAIN="${1:-}"; shift || true
|
|
266
295
|
case "$DOMAIN" in
|
|
267
296
|
hosting) cmd_hosting "$@" ;;
|
|
297
|
+
relay) cmd_relay "$@" ;;
|
|
268
298
|
repo) cmd_repo "$@" ;;
|
|
269
299
|
admin) cmd_admin "$@" ;;
|
|
270
300
|
people) cmd_people "$@" ;;
|
|
271
301
|
dump) cmd_dump ;;
|
|
272
302
|
""|-h|--help|help) usage 0 ;;
|
|
273
|
-
*) _die "unknown settings domain: '$DOMAIN' (try: hosting, repo, admin, people, dump)" 1 ;;
|
|
303
|
+
*) _die "unknown settings domain: '$DOMAIN' (try: hosting, relay, repo, admin, people, dump)" 1 ;;
|
|
274
304
|
esac
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#!/bin/bash
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
2
|
# WorktreeCreate hook — replaces EnterWorktree's default behavior.
|
|
3
3
|
# Receives {"name": "<slug>"} on stdin. Must print absolute worktree path to stdout.
|
|
4
4
|
# All diagnostic output goes to stderr or /dev/null — stdout is ONLY for the path.
|
|
@@ -33,12 +33,22 @@ AUTHOR=$(jq -r '.github_username // .display_name // "unknown"' "$STATE_FILE" 2>
|
|
|
33
33
|
BRANCH="dev/${AUTHOR}/${SLUG}"
|
|
34
34
|
WT_PATH="$REPO_ROOT/.claude/worktrees/${SLUG}"
|
|
35
35
|
|
|
36
|
-
# ---
|
|
37
|
-
|
|
36
|
+
# --- Resolve and fetch the configured base branch ---
|
|
37
|
+
SCRIPT_DIR="$REPO_ROOT"
|
|
38
|
+
CONFIG="$REPO_ROOT/egregore.json"
|
|
39
|
+
if [ -f "$REPO_ROOT/bin/lib/config.sh" ]; then
|
|
40
|
+
# shellcheck source=bin/lib/config.sh
|
|
41
|
+
source "$REPO_ROOT/bin/lib/config.sh"
|
|
42
|
+
fi
|
|
43
|
+
if ! BASE_BRANCH=$(_get_base_branch); then
|
|
44
|
+
echo "Error: could not resolve the configured base branch" >&2
|
|
45
|
+
exit 1
|
|
46
|
+
fi
|
|
47
|
+
git -C "$REPO_ROOT" fetch origin "$BASE_BRANCH" --quiet 2>/dev/null || true
|
|
38
48
|
|
|
39
49
|
# --- Create branch (idempotent — skip if exists) ---
|
|
40
50
|
if ! git -C "$REPO_ROOT" show-ref --verify --quiet "refs/heads/$BRANCH" 2>/dev/null; then
|
|
41
|
-
git -C "$REPO_ROOT" branch "$BRANCH" origin
|
|
51
|
+
git -C "$REPO_ROOT" branch "$BRANCH" "origin/$BASE_BRANCH" >/dev/null 2>&1 || {
|
|
42
52
|
echo "Error: failed to create branch $BRANCH" >&2
|
|
43
53
|
exit 1
|
|
44
54
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"source": "egregore-runtime",
|
|
3
3
|
"policy": "public-safe subset derived from .syncignore; built by scripts/build-runtime-bundle.mjs",
|
|
4
|
-
"skillCount":
|
|
4
|
+
"skillCount": 65,
|
|
5
5
|
"skills": [
|
|
6
6
|
"activity",
|
|
7
7
|
"add",
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
"answer",
|
|
10
10
|
"archive",
|
|
11
11
|
"ask",
|
|
12
|
+
"audit",
|
|
13
|
+
"autosave",
|
|
12
14
|
"branch",
|
|
13
15
|
"checkup",
|
|
14
16
|
"commit",
|
|
@@ -17,7 +19,9 @@
|
|
|
17
19
|
"dashboard",
|
|
18
20
|
"deep-reflect",
|
|
19
21
|
"delete-user",
|
|
22
|
+
"demo-mode",
|
|
20
23
|
"deploy-bridge",
|
|
24
|
+
"design",
|
|
21
25
|
"egregore-voice",
|
|
22
26
|
"emissary",
|
|
23
27
|
"env",
|
|
@@ -31,9 +35,11 @@
|
|
|
31
35
|
"me",
|
|
32
36
|
"meeting",
|
|
33
37
|
"minion",
|
|
38
|
+
"mock",
|
|
34
39
|
"note",
|
|
35
40
|
"onboarding",
|
|
36
41
|
"pr",
|
|
42
|
+
"product-voice",
|
|
37
43
|
"project",
|
|
38
44
|
"pull",
|
|
39
45
|
"push",
|
|
@@ -49,6 +55,7 @@
|
|
|
49
55
|
"summon",
|
|
50
56
|
"sync-repos",
|
|
51
57
|
"task",
|
|
58
|
+
"teams-connect",
|
|
52
59
|
"telegram-connect",
|
|
53
60
|
"telemetry",
|
|
54
61
|
"test",
|
|
@@ -64,6 +71,7 @@
|
|
|
64
71
|
],
|
|
65
72
|
"files": [
|
|
66
73
|
".agents/skills",
|
|
74
|
+
".claude/context/notification-consent.md",
|
|
67
75
|
".codex/config.toml",
|
|
68
76
|
".codex/hooks.json",
|
|
69
77
|
".codex/hooks/branch-guard.js",
|
|
@@ -74,6 +82,8 @@
|
|
|
74
82
|
".codex/skills/answer/SKILL.md",
|
|
75
83
|
".codex/skills/archive/SKILL.md",
|
|
76
84
|
".codex/skills/ask/SKILL.md",
|
|
85
|
+
".codex/skills/audit/SKILL.md",
|
|
86
|
+
".codex/skills/autosave/SKILL.md",
|
|
77
87
|
".codex/skills/branch/SKILL.md",
|
|
78
88
|
".codex/skills/checkup/SKILL.md",
|
|
79
89
|
".codex/skills/commit/SKILL.md",
|
|
@@ -82,11 +92,14 @@
|
|
|
82
92
|
".codex/skills/dashboard/SKILL.md",
|
|
83
93
|
".codex/skills/deep-reflect/SKILL.md",
|
|
84
94
|
".codex/skills/delete-user/SKILL.md",
|
|
95
|
+
".codex/skills/demo-mode/SKILL.md",
|
|
85
96
|
".codex/skills/deploy-bridge/SKILL.md",
|
|
97
|
+
".codex/skills/design/SKILL.md",
|
|
86
98
|
".codex/skills/egregore-voice/SKILL.md",
|
|
87
99
|
".codex/skills/emissary/SKILL.md",
|
|
88
100
|
".codex/skills/env/SKILL.md",
|
|
89
101
|
".codex/skills/handoff/SKILL.md",
|
|
102
|
+
".codex/skills/harvest/QUESTION_PALETTE.md",
|
|
90
103
|
".codex/skills/harvest/SKILL.md",
|
|
91
104
|
".codex/skills/ingest-google/SKILL.md",
|
|
92
105
|
".codex/skills/ingest-user-interview/SKILL.md",
|
|
@@ -96,9 +109,11 @@
|
|
|
96
109
|
".codex/skills/me/SKILL.md",
|
|
97
110
|
".codex/skills/meeting/SKILL.md",
|
|
98
111
|
".codex/skills/minion/SKILL.md",
|
|
112
|
+
".codex/skills/mock/SKILL.md",
|
|
99
113
|
".codex/skills/note/SKILL.md",
|
|
100
114
|
".codex/skills/onboarding/SKILL.md",
|
|
101
115
|
".codex/skills/pr/SKILL.md",
|
|
116
|
+
".codex/skills/product-voice/SKILL.md",
|
|
102
117
|
".codex/skills/project/SKILL.md",
|
|
103
118
|
".codex/skills/pull/SKILL.md",
|
|
104
119
|
".codex/skills/push/SKILL.md",
|
|
@@ -116,6 +131,7 @@
|
|
|
116
131
|
".codex/skills/summon/SKILL.md",
|
|
117
132
|
".codex/skills/sync-repos/SKILL.md",
|
|
118
133
|
".codex/skills/task/SKILL.md",
|
|
134
|
+
".codex/skills/teams-connect/SKILL.md",
|
|
119
135
|
".codex/skills/telegram-connect/SKILL.md",
|
|
120
136
|
".codex/skills/telemetry/SKILL.md",
|
|
121
137
|
".codex/skills/test/SKILL.md",
|
|
@@ -135,6 +151,7 @@
|
|
|
135
151
|
"bin/activity-data.sh",
|
|
136
152
|
"bin/agent.sh",
|
|
137
153
|
"bin/attendant.sh",
|
|
154
|
+
"bin/autosave.sh",
|
|
138
155
|
"bin/capture-reconcile.sh",
|
|
139
156
|
"bin/capture-run.sh",
|
|
140
157
|
"bin/codex-install-skills.sh",
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# External notification consent
|
|
2
|
+
|
|
3
|
+
This protocol applies to every Telegram, Teams, or other external notification
|
|
4
|
+
in every harness. It applies even when the user asked to announce, notify,
|
|
5
|
+
handoff, invite, or message someone, and even when the harness is running with
|
|
6
|
+
broad tool permissions.
|
|
7
|
+
|
|
8
|
+
## Invariant
|
|
9
|
+
|
|
10
|
+
Never dispatch an external notification until the human has approved that one
|
|
11
|
+
exact delivery in a dedicated checkpoint. The checkpoint must show:
|
|
12
|
+
|
|
13
|
+
- the organization;
|
|
14
|
+
- the final recipient or group;
|
|
15
|
+
- every channel that will receive it;
|
|
16
|
+
- the exact final message, including links.
|
|
17
|
+
|
|
18
|
+
A workflow request, plan approval, batch approval, prior approval, broad
|
|
19
|
+
permission mode, or approval of a related action is not notification consent.
|
|
20
|
+
There is no standing "always allow" choice. One approval authorizes one attempt
|
|
21
|
+
to send one immutable message.
|
|
22
|
+
|
|
23
|
+
## Required flow
|
|
24
|
+
|
|
25
|
+
1. Finish the message first. Publish any artifact and insert its real URL
|
|
26
|
+
before planning; never change the message after preview.
|
|
27
|
+
2. Resolve the exact delivery without sending:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
PLAN_JSON=$(bash bin/notify.sh plan send "$RECIPIENT" "$MESSAGE")
|
|
31
|
+
# or
|
|
32
|
+
PLAN_JSON=$(bash bin/notify.sh plan group "$MESSAGE")
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
3. Read `plan_id` and `digest` from `PLAN_JSON`. Show the organization,
|
|
36
|
+
recipient, all `channels`/`deliveries`, and exact `message` in a dedicated
|
|
37
|
+
Send / Edit / Cancel question. Use the harness's structured question UI
|
|
38
|
+
when available. Otherwise show the same fields in plain text and stop for
|
|
39
|
+
the user's answer.
|
|
40
|
+
4. Only if the user selects Send for that exact preview:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
APPROVAL_JSON=$(bash bin/notify.sh approve \
|
|
44
|
+
"$PLAN_ID" "$DIGEST" APPROVE_EXACT_NOTIFICATION)
|
|
45
|
+
APPROVAL_TOKEN=$(printf '%s' "$APPROVAL_JSON" | jq -r '.approval_token')
|
|
46
|
+
bash bin/notify.sh dispatch "$PLAN_ID" "$APPROVAL_TOKEN"
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
5. If the user chooses Edit, cancel the old plan, edit, create a new plan, and
|
|
50
|
+
preview again. If they choose Cancel, cancel it and do not send. If the plan
|
|
51
|
+
expires or dispatch fails, create a new plan and obtain new consent; never
|
|
52
|
+
retry from the old approval.
|
|
53
|
+
|
|
54
|
+
## Hard rules
|
|
55
|
+
|
|
56
|
+
- Never call notification API endpoints directly. Use `bin/notify.sh`.
|
|
57
|
+
- Never use legacy `notify.sh send` or `notify.sh group`; they only create a
|
|
58
|
+
proposal and intentionally cannot dispatch.
|
|
59
|
+
- Never substitute a group when a direct message cannot be delivered.
|
|
60
|
+
- Never add a channel after preview.
|
|
61
|
+
- Never approve or dispatch from a detached/background process, hook, cron
|
|
62
|
+
job, batch execution, or unattended agent. Those paths may create a plan and
|
|
63
|
+
report that human approval is pending.
|
|
64
|
+
- Multiple direct recipients require a separate preview and approval for each
|
|
65
|
+
exact message. A group fanout may use one approval only when every receiving
|
|
66
|
+
channel is listed in the preview.
|
|
@@ -145,8 +145,19 @@ function currentAuthor(projectDir) {
|
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
-
function
|
|
149
|
-
|
|
148
|
+
function configuredBaseBranch(projectDir) {
|
|
149
|
+
try {
|
|
150
|
+
const raw = fs.readFileSync(path.join(projectDir, "egregore.json"), "utf-8");
|
|
151
|
+
const value = JSON.parse(raw).base_branch;
|
|
152
|
+
return typeof value === "string" && value.trim() ? value.trim() : "develop";
|
|
153
|
+
} catch {
|
|
154
|
+
return "develop";
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function isProtectedBranch(branch, projectDir) {
|
|
159
|
+
return branch === configuredBaseBranch(projectDir) ||
|
|
160
|
+
branch === "develop" || branch === "main" || branch === "master";
|
|
150
161
|
}
|
|
151
162
|
|
|
152
163
|
function isExemptPath(rawPath, projectDir, memoryDir) {
|
|
@@ -403,7 +414,7 @@ function main() {
|
|
|
403
414
|
if (context.external) return;
|
|
404
415
|
const projectDir = context.projectDir;
|
|
405
416
|
const branch = currentBranch(projectDir);
|
|
406
|
-
if (!isProtectedBranch(branch)) return;
|
|
417
|
+
if (!isProtectedBranch(branch, projectDir)) return;
|
|
407
418
|
|
|
408
419
|
// Consent bypass: the user explicitly chose to work on this protected branch.
|
|
409
420
|
// Written only after they pick "Proceed on <branch>"; cleared on session start,
|
|
@@ -17,9 +17,13 @@ when it is available; otherwise render compact numbered choices with an
|
|
|
17
17
|
|
|
18
18
|
1. Read `.claude/skills/add/SKILL.md` for the workflow details.
|
|
19
19
|
2. Run the referenced `bin/` scripts directly from Codex.
|
|
20
|
-
3. Treat graph
|
|
21
|
-
|
|
22
|
-
4.
|
|
20
|
+
3. Treat graph and publish steps as best-effort unless that workflow explicitly
|
|
21
|
+
says they are required.
|
|
22
|
+
4. For every external notification, follow
|
|
23
|
+
`.claude/context/notification-consent.md`: plan without sending, then show
|
|
24
|
+
a separate exact Send / Edit / Cancel checkpoint. Never infer notification
|
|
25
|
+
consent from the workflow request or a batch approval.
|
|
26
|
+
5. Keep local-mode behavior filesystem-first and avoid graph or notification
|
|
23
27
|
calls when `egregore.json` declares `"mode": "local"`.
|
|
24
|
-
|
|
28
|
+
6. Never call the deprecated `egregore-handoff` CLI for Egregore project
|
|
25
29
|
handoffs.
|
|
@@ -22,33 +22,46 @@ bash bin/publish-artifact.sh document "$FILE_PATH" --title "$TITLE" --author "$A
|
|
|
22
22
|
Use `handoff`, `quest`, or `document` as the artifact type when appropriate.
|
|
23
23
|
Never fabricate a URL.
|
|
24
24
|
|
|
25
|
-
3.
|
|
26
|
-
|
|
25
|
+
3. Follow `.claude/context/notification-consent.md`. Create a plan without
|
|
26
|
+
sending:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
PLAN_JSON=$(bash bin/notify.sh plan group "$MESSAGE")
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
4. Preview the plan's exact organization, all deliveries/channels, and exact
|
|
33
|
+
final message. Confirm in a separate checkpoint with structured Codex
|
|
34
|
+
question tooling when available; otherwise render those fields followed by:
|
|
27
35
|
|
|
28
36
|
```text
|
|
29
37
|
Send this announcement?
|
|
30
38
|
1. Send
|
|
31
39
|
2. Edit
|
|
32
|
-
|
|
40
|
+
3. Cancel
|
|
33
41
|
```
|
|
34
42
|
|
|
35
|
-
|
|
43
|
+
5. If the user edits, cancel the old plan, redraft, plan, and preview again.
|
|
44
|
+
If they cancel, cancel the plan and stop. Only after they select Send for
|
|
45
|
+
that exact preview, run:
|
|
36
46
|
|
|
37
47
|
```bash
|
|
38
|
-
bash bin/notify.sh
|
|
48
|
+
APPROVAL_JSON=$(bash bin/notify.sh approve "$PLAN_ID" "$DIGEST" APPROVE_EXACT_NOTIFICATION)
|
|
49
|
+
APPROVAL_TOKEN=$(printf '%s' "$APPROVAL_JSON" | jq -r '.approval_token')
|
|
50
|
+
bash bin/notify.sh dispatch "$PLAN_ID" "$APPROVAL_TOKEN"
|
|
39
51
|
```
|
|
40
52
|
|
|
41
|
-
|
|
53
|
+
6. Emit telemetry in the background:
|
|
42
54
|
|
|
43
55
|
```bash
|
|
44
56
|
bash bin/telemetry.sh emit "command" '{"command":"announce"}' >/dev/null 2>&1 &
|
|
45
57
|
```
|
|
46
58
|
|
|
47
|
-
|
|
59
|
+
7. Confirm whether the exact approved group send succeeded.
|
|
48
60
|
|
|
49
61
|
## Rules
|
|
50
62
|
|
|
51
|
-
- Always
|
|
63
|
+
- The request to announce is not dispatch consent. Always use a dedicated
|
|
64
|
+
exact-delivery checkpoint.
|
|
52
65
|
- Do not expose notification credentials.
|
|
53
66
|
- Use `bin/notify.sh`; do not call Telegram directly.
|
|
54
67
|
- Do not use Claude Code commands.
|
|
@@ -17,9 +17,13 @@ when it is available; otherwise render compact numbered choices with an
|
|
|
17
17
|
|
|
18
18
|
1. Read `.claude/skills/answer/SKILL.md` for the workflow details.
|
|
19
19
|
2. Run the referenced `bin/` scripts directly from Codex.
|
|
20
|
-
3. Treat graph
|
|
21
|
-
|
|
22
|
-
4.
|
|
20
|
+
3. Treat graph and publish steps as best-effort unless that workflow explicitly
|
|
21
|
+
says they are required.
|
|
22
|
+
4. For every external notification, follow
|
|
23
|
+
`.claude/context/notification-consent.md`: plan without sending, then show
|
|
24
|
+
a separate exact Send / Edit / Cancel checkpoint. Never infer notification
|
|
25
|
+
consent from the workflow request or a batch approval.
|
|
26
|
+
5. Keep local-mode behavior filesystem-first and avoid graph or notification
|
|
23
27
|
calls when `egregore.json` declares `"mode": "local"`.
|
|
24
|
-
|
|
28
|
+
6. Never call the deprecated `egregore-handoff` CLI for Egregore project
|
|
25
29
|
handoffs.
|
|
@@ -33,9 +33,13 @@ reading `.claude/skills/archive/SKILL.md`, reproduce the same visible UX in Code
|
|
|
33
33
|
|
|
34
34
|
1. Read `.claude/skills/archive/SKILL.md` for the workflow details.
|
|
35
35
|
2. Run the referenced `bin/` scripts directly from Codex.
|
|
36
|
-
3. Treat graph
|
|
37
|
-
|
|
38
|
-
4.
|
|
36
|
+
3. Treat graph and publish steps as best-effort unless that workflow explicitly
|
|
37
|
+
says they are required.
|
|
38
|
+
4. For every external notification, follow
|
|
39
|
+
`.claude/context/notification-consent.md`: plan without sending, then show
|
|
40
|
+
a separate exact Send / Edit / Cancel checkpoint. Never infer notification
|
|
41
|
+
consent from the workflow request or a batch approval.
|
|
42
|
+
5. Keep local-mode behavior filesystem-first and avoid graph or notification
|
|
39
43
|
calls when `egregore.json` declares `"mode": "local"`.
|
|
40
|
-
|
|
44
|
+
6. Never call the deprecated `egregore-handoff` CLI for Egregore project
|
|
41
45
|
handoffs.
|
|
@@ -21,8 +21,8 @@ question, run a topic by someone, or inspect pending questions for themselves.
|
|
|
21
21
|
tooling when available; otherwise render:
|
|
22
22
|
|
|
23
23
|
```text
|
|
24
|
-
|
|
25
|
-
1.
|
|
24
|
+
Save these questions?
|
|
25
|
+
1. Save as-is
|
|
26
26
|
2. Edit
|
|
27
27
|
Other:
|
|
28
28
|
```
|
|
@@ -37,13 +37,20 @@ Add harvest flags only when this ask is part of a harvest:
|
|
|
37
37
|
`--harvest-id`, `--harvest-session-id`, `--turn`, `--question-intent`, and
|
|
38
38
|
`--context-mode`.
|
|
39
39
|
|
|
40
|
-
7. In connected mode,
|
|
40
|
+
7. In connected mode, follow
|
|
41
|
+
`.claude/context/notification-consent.md`. Saving the questions is not
|
|
42
|
+
notification consent. Prepare without sending:
|
|
41
43
|
|
|
42
44
|
```bash
|
|
43
|
-
bash bin/notify.sh send "$TARGET" "$AUTHOR has a question about \"$TOPIC\". Ask for \$activity to answer."
|
|
45
|
+
PLAN_JSON=$(bash bin/notify.sh plan send "$TARGET" "$AUTHOR has a question about \"$TOPIC\". Ask for \$activity to answer.")
|
|
44
46
|
```
|
|
45
47
|
|
|
46
|
-
|
|
48
|
+
Show the exact organization, recipient, channel, and message in a separate
|
|
49
|
+
Send / Edit / Cancel checkpoint. Only a Send response to that preview permits
|
|
50
|
+
one approve + dispatch.
|
|
51
|
+
|
|
52
|
+
8. Report the created `memory/knowledge/questions/...` path and the truthful
|
|
53
|
+
notification state.
|
|
47
54
|
|
|
48
55
|
## Inward Mode
|
|
49
56
|
|
|
@@ -54,6 +61,7 @@ answers.
|
|
|
54
61
|
|
|
55
62
|
## Rules
|
|
56
63
|
|
|
57
|
-
- Person-targeted asks are asynchronous: store
|
|
64
|
+
- Person-targeted asks are asynchronous: store first; notification is a
|
|
65
|
+
separate exact-consent action.
|
|
58
66
|
- Local mode is filesystem-only; skip graph and notification calls.
|
|
59
67
|
- Do not use Claude Code commands.
|