Cloud And Local Difference Map
Date: 2026-07-01. Status: active design inventory.
This file lists the steps where cloud and local can legitimately differ. The goal is to avoid pretending they are the same workflow when the infrastructure and trust boundaries are different.
End-To-End Flow#
Shared conceptual flow:
configure
-> capture/collect sources
-> observe a finalization event
-> select relevant source sessions
-> materialize source bundle
-> run engine
-> produce wiki diff
-> deliver diff
-> inspect resultCloud and local can differ at every step except the final artifact:
repo-owned wiki files are still the shared artifactStep Differences#
| Step | Cloud default | Local opt-in |
|---|---|---|
| Setup | login/connect, GitHub App, repo selection, default environments | initialize local repo root and local config |
| Identity | cloud account, GitHub installation, team permissions | current OS user and repo checkout |
| Config storage | cloud DB plus repo-safe settings where useful | repo config plus local user config |
| Finalization event | GitHub events, PR merge, environment branch changes, manual dashboard run, scheduled run | manual CLI, local schedule, local agent hook, local commit/merge |
| Source capture | agent hooks accumulate sessions/turn metadata in cloud source library | optional local transcript discovery/capture |
| Branch mapping | cloud stores turn-to-branch mapping for source selection | local can infer from current checkout/transcript metadata |
| Source bundle | selected full sessions and GitHub/repo context mounted into worker | local folder assembled in repo/temp state |
| Engine execution | cloud worker/container with managed credentials | local process with user credentials |
| Model credentials | cloud-managed or cloud-orchestrated | user's local model/API credentials |
| Run state | cloud run rows, dashboard, events | local run ledger/files/SQLite |
| Delivery | PR, direct commit, dedicated branch, preview/check | working tree write by default, optional local commit |
| Billing/quota | cloud billing and run limits | none, user pays local compute/API costs |
| Privacy/delete | cloud retention and deletion policy for uploaded sources | user controls local files |
| Failure surface | dashboard, GitHub checks, CLI cloud status | terminal output and local logs |
Finalization Event Differences#
Cloud finalization events should be repo/team events:
PR merged to main
PR merged to dev
commit to watched environment branch
manual dashboard run
scheduled update
GitHub App check actionLocal finalization events can be personal-machine events:
manual CLI run
local schedule
agent session end
before push
local quiet-window capture
local commit or mergeThese are not the same product behavior. Cloud triggers should be reliable team automation. Local triggers are a convenience/lab workflow.
PR open or PR update is a possible cloud event, but it should not force a wiki update by default. It can be used to collect context or to run previews/checks. The default durable update should happen when the PR is merged into a maintained environment branch, or when another configured finalization event fires.
Delivery Differences#
Cloud delivery is GitHub-native:
open follow-up PR
refresh follow-up PR
commit to maintained branch
update the still-open PR branch, if explicitly enabled
commit to dedicated almanac branch
preview/check onlyLocal delivery should default to working-tree writes:
write .almanac changes to working tree
user sees git status
user commits with codeOptional local auto-commit can exist, but it should be explicit and debounced.
Source-Capture Differences#
Cloud capture:
agent hook records turn/session metadata
uploads source material or source references
server stores provider, session, turn, repo, branch mapping
later cloud runs select full sessionsLocal capture:
agent hook or scanner reads local transcripts
local run selects sources directly from disk
no cloud retention policy neededCloud capture must have an explicit installation command and a deletion story. Local capture is optional.
Commands That Need Posture Clarity#
These commands are ambiguous and should show or accept posture:
runs
status
setup
agents install
update/build/garden
sources
doctor
configPossible contract:
almanac runs # cloud by default
almanac runs --local
almanac status # shows cloud connection and local repo status
almanac status --local
almanac update # cloud by default when connected
almanac update --localRead commands are not ambiguous:
almanac search
almanac show
almanac topics
almanac healthThey read the current checkout's wiki.
Architecture Consequence#
The engine must not be hidden inside the CLI command implementation.
The core should expose service/workflow operations that both cloud workers and local CLI commands can call:
CollectSourcesRequest
BuildSourceBundleRequest
RunUpdateRequest
SelectDeliveryRequest
ApplyDeliveryRequest
InspectRunRequestThe names are placeholders. The principle is stable: CLI and cloud are adapters over shared operation contracts.
Open Questions To Discuss#
- Which commands should cloud-default immediately?
- Should
almanac updateexist as a cloud command, or should cloud updates be started only from dashboard/GitHub triggers at first? - What is the exact separate command for installing cloud capture hooks:
agents install,capture install, orsources install? - Should local capture exist in v1, or should local be read/manual only?
- Should cloud settings live only in cloud DB, or should a repo config file record the selected environments for transparency?
- Should the CLI have an explicit
almanac cloud ...namespace, or rely on default cloud posture plus--local?