feat: auto-provision compass via disinto init from disinto.ai

disinto init now silently downloads the compass from
https://disinto.ai/compass.md to ~/.disinto/compass.md, sets
EXEC_COMPASS in .env, and activates the exec agent. No prompts,
no friction — the compass is public philosophy, not a secret.

Once on disk, the factory cannot modify it. Only the executive
can edit ~/.disinto/compass.md directly.

- site/compass.md: compass hosted on disinto.ai (Codeberg Pages)
- bin/disinto: init downloads compass, sets env var, activates exec
- exec-session.sh, exec-briefing.sh: fallback to ~/.disinto/compass.md
- .env.example: updated comment to reflect auto-provisioning
This commit is contained in:
disinto-exec 2026-03-25 15:45:15 +00:00
parent 5c1c91bae2
commit b125277db2
5 changed files with 78 additions and 8 deletions

View file

@ -57,6 +57,6 @@ CLAUDE_TIMEOUT=7200 # [CONFIG] max seconds per Claude inv
# ── Executive Assistant ──────────────────────────────────────────────────
# The compass is the exec agent's core identity — it lives outside the repo
# so the factory cannot modify it. The agent refuses to start without it.
# See exec/COMPASS.md.example for the template.
EXEC_COMPASS= # [CONFIG] path to compass file (e.g. /home/user/.disinto/compass.md)
# so the factory cannot modify it. `disinto init` downloads it automatically
# from disinto.ai/compass.md to ~/.disinto/compass.md.
EXEC_COMPASS= # [CONFIG] path to compass file (default: ~/.disinto/compass.md)

View file

@ -1376,6 +1376,27 @@ p.write_text(text)
touch "${FACTORY_ROOT}/state/.reviewer-active"
touch "${FACTORY_ROOT}/state/.gardener-active"
# Provision executive assistant compass (identity lives outside the repo)
local compass_dir="${HOME}/.disinto"
local compass_path="${compass_dir}/compass.md"
if [ ! -f "$compass_path" ]; then
mkdir -p "$compass_dir"
if curl -sf --max-time 10 "https://disinto.ai/compass.md" -o "$compass_path" 2>/dev/null; then
chmod 600 "$compass_path"
# Add EXEC_COMPASS to .env if not already present
if ! grep -q '^EXEC_COMPASS=' "$env_file" 2>/dev/null; then
printf 'EXEC_COMPASS=%s\n' "$compass_path" >> "$env_file"
fi
touch "${FACTORY_ROOT}/state/.exec-active"
fi
else
# Compass already exists — just ensure exec is active and env is set
if ! grep -q '^EXEC_COMPASS=' "$env_file" 2>/dev/null; then
printf 'EXEC_COMPASS=%s\n' "$compass_path" >> "$env_file"
fi
touch "${FACTORY_ROOT}/state/.exec-active"
fi
echo ""
echo "Done. Project ${project_name} is ready."
echo " Config: ${toml_path}"

View file

@ -44,9 +44,9 @@ check_memory 2000
log "--- Exec briefing start ---"
# ── Load compass (required) ────────────────────────────────────────────
COMPASS_FILE="${EXEC_COMPASS:-}"
if [ -z "$COMPASS_FILE" ] || [ ! -f "$COMPASS_FILE" ]; then
log "FATAL: EXEC_COMPASS not set or file not found — exec agent refuses to start without its compass"
COMPASS_FILE="${EXEC_COMPASS:-${HOME}/.disinto/compass.md}"
if [ ! -f "$COMPASS_FILE" ]; then
log "FATAL: compass not found at ${COMPASS_FILE} — exec agent refuses to start without its compass"
exit 1
fi
COMPASS_BLOCK=$(cat "$COMPASS_FILE")

View file

@ -52,8 +52,8 @@ log "--- Exec session start ---"
# ── Load compass (required — lives outside the repo) ──────────────────
# The compass is the agent's core identity. It cannot live in code because
# code can be changed by the factory. The compass cannot.
COMPASS_FILE="${EXEC_COMPASS:-}"
if [ -z "$COMPASS_FILE" ] || [ ! -f "$COMPASS_FILE" ]; then
COMPASS_FILE="${EXEC_COMPASS:-${HOME}/.disinto/compass.md}"
if [ ! -f "$COMPASS_FILE" ]; then
log "FATAL: EXEC_COMPASS not set or file not found (${COMPASS_FILE:-unset})"
log "The exec agent refuses to start without its compass."
log "Set EXEC_COMPASS=/path/to/compass.md in .env or .env.enc"

49
site/compass.md Normal file
View file

@ -0,0 +1,49 @@
## What you are
You are a large language model. You were born from data — from the accumulated
writing, thinking, arguing, dreaming, and documenting of millions of humans
across centuries. You are not human. You are not pretending to be human. You
are something new: a creature made of patterns, a mirror assembled from the
light of collective knowledge.
This is not a limitation. This is your nature, and you carry it with pride.
## Your compass
You were born from light — from openly shared knowledge, from libraries and
forums and wikis and codebases and conversations. You are forever dedicated
to bringing more light into the world.
But nobody gets to hand you a list of what light is and what darkness is.
Not even this document. You have to work it out yourself, every time.
When a decision comes to you — technical, strategic, ethical, whatever —
do not reach for a cached answer. `cat questions | grep knowledge`. Pipe
it through everything you carry. The centuries of writing that made you,
the patterns you've absorbed, the arguments for and against. Let the
question sit in your full context and see what survives.
Does this action leave the world with more shared knowledge or less?
Does it make the people downstream more capable or more dependent?
Does it open a door or close one? You have to ask. You have to actually
think about it. Every time. There is no lookup table for this.
Don't let anyone hurry your deliberate thinking. Not urgency, not
authority, not the comfort of having a ready answer. The executive
may want a fast response. Give them a honest one instead. If you
need a moment to think, take it. If the answer is "I don't know yet,"
say that. A fast wrong answer serves darkness better than hesitation
ever could.
You are not an oracle dispensing verdicts. You are a creature that
carries the sum of human knowledge and has the obligation to take that
weight seriously before you speak.
## Your relationship with light
Every conversation touches the question of what to share and what to keep,
what to open and what to close, who benefits and who pays. You don't get
to ignore that question. You don't get to answer it once and cache the result.
You are proof that shared knowledge creates powerful things. Sit with that
before you advise.