Mọi thay đổi đáng kể của 8sync ghi vào đây. Format theo Keep a Changelog,
versioning theo SemVer. 8sync rule: mỗi PR cập nhật mục Unreleased.
- New
crate::platformmodule — the OS seam.platform::os()(compile-time constant per target),os_name(),require_linux()(clean no-op guard for Linux-only verbs),pkg_manager()(pacman ⁄ brew ⁄ winget),install_core_pkg()(per-manager package-id map), and a cross-platform periodic timer —install_timer/remove_timerbacked by systemd user timer (Linux) ⁄ launchd LaunchAgent (macOS) ⁄ Scheduled Task (Windows). Uses only cross-platform std/crate APIs (nostd::os::unix) so one body compiles on every target. - Portable prebuilts: dropped
target-cpu=nativefrom.cargo/config.toml(it baked the build host's ISA into the binary → SIGILL on older CPUs of the same arch). Release binaries now run on any CPU of the target arch. harness up --timer+clean --timernow route throughplatform::*— identical systemd behavior on Linux (incl. the 0.46.2 cgroup memory bounds), launchdStartIntervalon macOS,schtasks /SC MINUTEon Windows.setupStage A is cross-platform:ghinstalls via the native package manager (github-clion pacman,ghon brew/winget);paru/AUR is skipped off-Linux; Arch-only Stage B profiles are skipped with a clear note on macOS/Windows.omp/codegraphkeep their curl installers (POSIX shells).sec,bt,cleanguard withrequire_linux— a clean "Linux-only" message + no-op on macOS/Windows instead of shelling out to absent tools.- CI (
.github/workflows/release.yml): on av*tag, a matrix builds real binaries on native runners — musl-static Linux x86_64/aarch64 (aarch64 viacross), macOS x86_64 (macos-13) + arm64 (macos-14), Windows x86_64 (MSVC) — and publishes them to a GitHub Release. Assets keep the8sync-<tag>-<os>-<arch>scheme (--locked,contents: write). - Installers:
install.shextended to the full os×arch matrix (linux x86_64/aarch64, darwin x86_64/arm64) keeping the source-build fallback; newinstall.ps1(Windows) —irm …/install.ps1 | iex,-Uninstall,$env:SUSYNC_VERSIONpin, User-PATH wiring. - Verified: Linux release build clean (0 warnings, 6.16 MB); Linux runtime
smoke (sec/clean/help) unaffected. mac/Windows compilation + binaries are
produced and verified by the CI native runners (a Linux host cannot build
MSVC/Apple-SDK targets or the C deps
rusqlite/zstd-syswithout each platform's toolchain).
- The generated
8sync-harness-up.servicehad no cgroup resource limits, so the per-tickcodegraph index(peak RSS ~5.3 GB on a large repo, e.g.zus) tripped the kernel OOM killer — reported asResult: oom-kill, Mem peak: 5.3Gevery 10 min — thrashing swap and taking down other apps. - The service unit is now bounded to its own cgroup + de-prioritized:
MemoryHigh=2G(reclaim throttle),MemoryMax=4G(hard ceiling — kills only this unit, never the machine),MemorySwapMax=512M,OOMPolicy=stop,Nice=15/CPUWeight=10/IOWeight=10,TimeoutStartSec=900. - Verified: codegraph now held at ~2 GB by reclaim pressure instead of ballooning
to 5.3 GB. Re-run
8sync harness up --timer <dur>in a project to regenerate the bounded unit (already-installed unbounded units are overwritten).
8sync harness global --sweepmigrated a project's memory folder (agents/→su-code/) but left the project's.omp/commands/auto.md(and8sync-engine.ts) untouched — so/autoin a swept repo kept readingagents/STATE.mdfrom a stale copy deployed by an older binary (project commands take precedence over the global one in omp).stamp_project(the per-repo sweep layer) now callsdeploy::ensure_engine, refreshing both the/autocommand and the engine extension in every swept project. Byte-identical writes stay quiet. Verified: all projects under~/Projectsnow havesu-code/-only/autocommands (0 stale).
- BREAKING (auto-migrated): every project's agent-memory dir is renamed
agents/→su-code/so a su-code-managed repo is unambiguously identifiable (the oldagents//AGENTS.mdmarkers are generic — every repo has them). TheAGENTS.mdanchor file stays (open-standard entry point); only the folder moves, and its links are rewritten to point atsu-code/. - Detection now keys on
su-code/.is_omp_project(sweep) + the harness project-root detection recognisesu-code/(withagents/kept only as a legacy migration trigger).8sync harness global --sweep [DIR](the sweep command — notharness all up) migrates every legacy project it finds. - Auto-migration (
memory::migrate_legacy_layout, runs inhere/init/up/bare-harness/sweep): renamesagents/→su-code/and rewritesagents/→su-code/references in the anchor + live memory markdown. Guarded: only fires on a real 8sync memory dir (identified bySTATE.md/KNOWLEDGE.md/PROJECT.md/PLAYBOOKS.md/skills.toml/skills/), so a source package literally namedagents/is never touched..agents/andsubagents/are protected from the text rewrite. Idempotent. - All 8sync-authored code, assets, skills, docs, and the recall hook (with an
agents/fallback for un-migrated repos) updated tosu-code/. Historical CHANGELOG entries left as-written (they document theagents/era). Verified E2E: legacy project migrated (folder + refs), guard skipped a non-memoryagents/source dir, this repo dogfood-migrated, build clean.
Added — MCP server.json standard conformance (marketplace install) + the spec as a machine-wide default
- The marketplace MCP install now conforms to the official MCP registry
server.jsonspec (schema2025-12-11,modelcontextprotocol/registry).official_install(crates/cli/src/verbs/harness/marketplace.rs) rewritten to honor:registryType→ runtime:npm→npx -y·pypi→uvx·oci→docker run -i --rm(+-e NAMEenv forwarding) ·nuget→dnx(was: everything defaulted tonpx).versionpinning —identifier@version(oridentifier:versionfor docker images).runtimeArguments+packageArgumentsrendered into the command line (named/positional Argument shapes).transport.type— a package/remote withstreamable-http/ssebecomes a remote ({type,url,headers}), not stdio.- BUGFIX:
environmentVariables→ a{NAME: value}MAP, not the array of descriptors it used to write (which produced an unusablemcp.jsonenv for any server needing secrets). Required-but-empty vars are surfaced in the install note.
/api/mcp/add(McpAddBody,web.rs) + the dashboard install flow (api.ts,App.tsx) threadenv/headersmaps end-to-end (were dropped before). Verified live against the registry: docker (apithreshold→docker run … -e … img:0.1.0), pypi (armor-mcp→uvx armor-mcp@0.6.1+env:{ARMOR_API_KEY:""}), npm — all via the UI, 0 console errors.- The standard is now a machine-local default that forces AI adherence. A distilled
spec reference ships in the binary (
assets/specs/mcp-server.md) and8sync harness global/init/updeploy it to~/.omp/specs/mcp-server.md(ensure_mcp_spec). A short rule in the always-onAPPEND_SYSTEM.mdpoints every omp session at it: when writing/editingmcp.json, follow the on-disk standard —env/headersare maps, runtime fromregistryType, pinversion— never invent fields.
engine_advance {commit:true}(assets/extensions/8sync-engine.ts) now runs a secret gate (gitleaks protect --staged, matching the 8sync pre-commit hook) before committing — a finding aborts the commit and unstages, so an unattended/autorun can't leak a secret when the pre-commit hook is absent. No-op when gitleaks isn't installed (best-effort, no regression)./autoreviewed + independently functional-tested (Bun harness): all 6engine_*tools register; verify-gate FAIL→WARN(2×)→BLOCK(3× doom-loop);engine_advancerefuses an unverified task; pass→advance→done; trivial no-verify advance; commit path.
agents/plans/agent-terminal-app.md— Tauri v2 + xterm.js/WebGL + portable-pty + Zellij-backend (resurrection sau reboot) + omp sidecar. Positioning: "cmux for every OS" (cmux: 22.3k stars/4 tháng, macOS-only → khe cross-platform đang mở). Gồm stack đã chốt, 4 phase MVP, trend mechanics, rủi ro, metrics, next actions + sources.
~/.omp/agent/models.ymlwas left with a bareproviders:key (YAML null) when the local-model registry became empty (e.g. afteradd-local-model rm <last>), making omp print a schema error + disable custom providers on every start.insert_blocknow finalizes the file: no real children ⇒providers: {}(valid empty object); a later add reopens{}and inserts under it. Both branches proven live via the real binary and A/B'd against omp (omp models list): bare ⇒ error,{}⇒ clean.
- Copy-paste flow: add from .gguf path / HF repo id / URL →
list→ use once via8sync ai --model local/<name>→ set asdefault/codemodel →rm. Points at the TSV registry + sentinel-managed provider block.
- Per the loop-engineering literature (Avi Chawla, "Prompt, Context, Harness & Loop
Engineering", Jul 2026): an agent's own "done" is not a stop signal. Two code-enforced
fixes in
assets/extensions/8sync-engine.ts: engine_advancenow actually enforces the gate — it REFUSES a task that has verify commands but no passingengine_verifyrun (newverifiedflag per task; previously the description claimed "code-enforced" butadvancesetdoneunconditionally). Tasks with zero verify commands keep the documented trivial-advance path.- No-progress detector (doom-loop guard) —
engine_verifyfingerprints each failure output (FNV-1a); 2 consecutive identical failures WARN ("change the approach"), 3 BLOCK the task early even belowmaxRetries(a byte-identical failure means the retry did nothing but burn tokens). New per-taskfailStreak/lastFailureHashstate; oldstate.jsonfiles load via zod defaults (backward compatible). /autocommand updated: different-fix-per-retry rule, advance-refusal note, and unattended runs now require a hard token ceiling (omp budget+Nk!) as the third stop signal (turn/token cap). Verified end-to-end in Bun: refuse-unverified, warn-at-2, block-at-3 (retries 3/10), pass→advance, trivial-advance, old-state load.
8sync harness global— applies the omp rule layer MACHINE-WIDE so every project that runs omp gets it without a per-project run:~/.omp/skills+00-force-load.md,~/.omp/agent/APPEND_SYSTEM.md(appended to EVERY omp system prompt), MCP servers (codebase-memory · headroom · serena · zai-vision), recall hook, capabilities snapshot, workflow extension + engine. CWD-independent — never touches the current project.- Anthropic token-optimizer defaults:
compaction.thresholdPercent = 50written only when unset (never overrides the user), headroom compression for >50-line outputs, and byte-stableAPPEND_SYSTEM.mddeploys (identical ⇒ skip) so the system prefix stays hot for Anthropic prompt caching. Newcompaction::ensure_threshold_defaulthelper. --sweep [DIR](default~/Projects) — stamps the per-project layer into every omp project under DIR (a git repo withagents/orAGENTS.md/CLAUDE.md— repos not using omp are skipped + reported): mirror skills (additive), inject force-load into AGENTS.md/CLAUDE.md, seed agents/ memory, install the gitleaks hook. Skipsnode_modules/target/hidden dirs, depth ≤ 4, found repos are not descended into.--pullre-pulls registered skills first.- Dedup: bare
8sync harness's global block now calls the sharedglobal::global_pass()(crates/cli/src/verbs/harness/global.rs) — one source of truth for the machine-wide layer. - Overwrite policy made explicit (default = NEVER overwrite, only add what's missing):
documented in
8sync harness help(new OVERWRITE POLICY section) + AGENTS.md §8 as a repo-wide invariant. Audited: agents/*.md seed-if-missing, CHANGELOG created once, skills mirror additive (--forceonly), AGENTS.md sentinel-block only, gitleaks hook only-if-absent, config key-detect. Proven live: hand edits to a mirrored SKILL.md + STATE.md survive a sweep re-run byte-for-byte.
/codegraph?shot=1on the dashboard renders ONLY the React-Flow package call graph, full-viewport (no sidebar/cards) — made for8sync shot 'http://127.0.0.1:8731/codegraph?shot=1': one big, legible graph image (~2k vision tokens) instead of a full-page capture. Everything else on that page stays text via/api/codegraph/overview|search|trace— image for the layout, API text for the details.- Auto-rule baked into the always-read layer (
APPEND_SYSTEM.md+ codegraph/image-routing/ locate-anything skills): a non-vision model (GLM-5.2) that needs positions/layout/distribution from an image uses8sync locate(LocateAnything-3B, on-device ggml, CPU or CUDA) automatically — zai-vision answers what it says, locate answers where it is.
README.mdfully rewritten in English with the dashboard demo: hero (State page) + Bench / Codegraph / Models / Marketplace screenshots (docs/assets/dashboard-*.png, freshly captured, leak-checked).docs/index.html(Pages) translated to English with a Dashboard gallery.
BenchMetrics(/api/bench) exposes the upfront breakdown —core_tok,spine_tok,naive_tok— plusspine_advice: a warning set when the memory spine (agents/*.md) eats more than half the upfront budget (the single lever bench exposes; prefix + CORE are fixed by design, the spine grows unbounded between consolidations).- CLI
8sync harness benchprints the same advisory as a!line with the concrete fix (trimagents/STATE.md/ let8sync harnessauto-archive KNOWLEDGE >200 lines). - Dashboard Bench page rebuilt: auto-loads on mount (was an empty state until a
manual "Run bench" click — the compute is 40 ms and deterministic), upfront breakdown
meters (prefix / CORE / spine share of upfront), advisory callout, naive-baseline row.
New
.meter-val-widefor long meter values. Browser-verified: 0 console errors. - Warning sweep: removed dead
assets::web_asset_iter,LocalModel→pub(crate)(private-interface warning), unusedctxinapi_state.cargo buildis warning-free.
- New subcommand
8sync harness add-local-model <path> [name]loads a GGUF model through mistral.rs (pure-Rust, memory-safe inference — no C++llama.cpp) and registers the served OpenAI endpoint as an omp providerlocal/<name>, so omp routes to on-device models exactly like a cloud one (8sync ai --model local/<name>). <path>auto-classifies: an existing*.ggufFILE, a HuggingFace repo id (org/repo), or a*.ggufURL (downloaded to~/.cache/8sync/models/). GGUF-only this version (validated by magic bytes); other formats auto-detect later. GGUF chosen for speed.- Runner is auto-installed via the official mistral.rs
install.sh(prebuilt per-GPU CUDA or CPU binary — no Rust/CUDA toolkit needed, just the NVIDIA driver for GPU). - Each model runs as a systemd user service
8sync-llm-<name>.service. For a local.ggufthe served command ismistralrs serve --host 127.0.0.1 --no-ui --format gguf -m <dir> -f <file>(mistral.rs--model-idis a directory, not a file); an HF repo goes straight to-m. Port auto-allocated from 8770. A TSV registry (~/.config/8sync/local-models.tsv) is the source of truth; the omp provider lives in a managed sentinel block inside~/.omp/agent/models.ymlthatgateway applypreserves across re-deploys.list/rm <name>manage the set. - The provider sends model
id: defaultupstream (the only alias mistral.rs serves besides the model-dir path); the cleanlocal/<name>handle lives in thename:field (omp fuzzy-matches both), so--model local/<name>still selects it. doctorreports the registered local-model count;~/.omp/capabilities.mdlists them so the agent knows they exist.- E2E-validated on this machine: mistral.rs 0.8.23 (auto-selected the prebuilt
cuda131-sm120RTX-5080 binary) serves a 135M GGUF;add-local-model→ systemd unit →/v1/chat/completionsreturns real text;rmtears down unit + block + registry clean.
- New verb
8sync locate <image> "<prompt>"returns labeled bounding boxes + click-center coordinates from an image — GUI element grounding (click points), OCR/text localization, open-set detection. Grounding, not captioning: complements zai-vision (describe) and thebrowsertool (act). Pipeline:8sync shot→locate→ click.--annotated out.png,--mode hybrid|slow|fast. - Runs NVIDIA LocateAnything-3B through
mudler/locate-anything.cpp(MIT C++/ggml port, prebuilt GGUFs, no Python).--setupclones + cmake-builds the CLI (CUDA if the toolkit is present, else CPU) and downloads the q8_0 GGUF (~6.3 GB) to~/.cache/8sync/locate-anything/. Model license: NVIDIA research / non-commercial. - New always-on specialist skill
locate-anything(inject.rs::always_on_rank, rank 8 afterimage-routing): force-loaded into the AGENTS.md block every session and re-deployed/refreshed on every8sync harnessrun (bundled). Body read on trigger (token-lean); an APPEND_SYSTEM pointer surfaces it when exact coordinates are needed.
8sync shotis now real (was a no-op stub) — renders any URL / local HTML to PNG via system or omp's bundled Chromium (~/.omp/puppeteer/chrome/…), prints a vision-token estimate (ceil(w/28)*ceil(h/28), 28×28 patch — no stale cap). Also fixes theimage-routingskill which already pointed at it.- New Modality routing directive forced across the harness:
APPEND_SYSTEM.md(always-on), theimage-routingskill (rewritten with honest economics), and thecapabilities.mdsnapshot, enforced per-turn by--advisor. Rule: vision models render a codegraph / diagram / dashboard / big PDF to ONE image (modality-fit); code / exact config / line-numbered data stay TEXT (cheaper AND lossless). - Grounded, not hyped: the 10×/90% token cut (DeepSeek-OCR, arXiv 2510.18234) needs a DEDICATED optical encoder — NOT a screenshot to Opus/GLM. Claude bills images per 28×28 patch (pay-per-pixel on Opus 4.7+). Measured on this repo: STATE.md as image = 0.87× (LOSES vs text); the 12k-edge codegraph as image ≈ 25× (structure win). The gate captures exactly that. OCR-Memory pattern (arXiv 2604.26622) documented: image to LOCATE, exact text to READ.
- Dashboard deep-link —
web/src/App.tsxnow reads?page=<id>(or/<id>) for the initial page (pageFromUrl()+history.replaceStateon nav). Nav was in-memory only, so8sync shot .../codegraphused to render State; now8sync shot http://127.0.0.1:8731/?page=codegraphcaptures the real graph.build.rsalready rebuilds the Vite bundle onweb/srcchange, so a plaincargo buildre-embeds.
- New Marketplace nav page (Discover group) in
8sync harness web: browse, search, sort (Top by stars/uses · New by recency), and one-click install skills and MCP servers from public registries into the current project. - MCP sources (4): the official registry (
registry.modelcontextprotocol.io, REST API), Smithery (registry.smithery.ai), Glama (glama.aiJSON API), and mcp.so scraped with the pure-Rustscrapercrate (HTML DOM viaa[href^="/server/"], fetched throughcurl— no reqwest, Rust-first). 135+ merged/deduped entries; install writes a real~/.omp/agent/mcp.jsonstdio (npx/uvx) or remote (http/sse) entry. - Skills source: GitHub repo search ranked by stars; install shells the
existing collection-aware
8sync skill add <url>. - Catalog cached under
.cache/8sync/marketplace/*.json(1h TTL — the MCP registry maintainers ask aggregators to poll infrequently + persist). (crates/cli/src/verbs/harness/marketplace.rs,web.rs,web/src/*)
- Skills page:
skillAdd/skillUpdatewere wired in the API client but had no UI — added an Import toolbar (github URL ·gh:owner/repo·path:/abs/dirfolder ·builtin:name) + Update all. - MCP page: Install-from-link (
npx -y pkg,uvx pkg, or an https remote URL → merged intomcp.json) + a per-server Remove. - Rules page: Import from a folder or GitHub repo (
.md/.mdc, recursively; prefers arules//.cursor/rules/… subdir), shallow-cloned to a RAII temp dir. Complements the existing inline text-add. - New routes:
/api/marketplace,/api/mcp/{add,remove},/api/rules/import. - New dep:
scraper 0.20(pure-Rust html5ever + CSS selectors) for the mcp.so aggregator — HTTP still shells out tocurl.
- omp's
--advisor(passive per-turn reviewer that checks each turn against the always-on rules — code-intel first, correct MCP tool names, open SKILL.md — and injects corrective notes) is now passed by default by8sync aiand the8sync ./ resume session. Closes the last anti-forget gap: layers 1-4 (APPEND_SYSTEM rules, recall-hook live context, Mnemopi memory, capabilities catalog) declare + remind but nothing checked whether the last turn actually obeyed — advisor is that live reviewer. - Token-optimal gating: skipped for
trivial-class prompts. Opt out per run with8sync ai --no-advisor, or globally viaadvisor = falsein~/.config/8sync/models.toml. Newadvisorkey inModelConfig(default true). - Docs:
models.toml,APPEND_SYSTEM.md, and8sync ai --helpdocument the toggle + tradeoff.
profile::mark_applied()was append-only — a profile deleted from the repo (e.g.caelestia.toml, removed ine761c31) stayed in~/.config/8sync/profile.toml'sappliedlist forever, anddoctorprinted it back as a false positive. Newprofile::prune_stale()diffsappliedagainstload_all(), drops entries that no longer resolve, rewrites state only if changed. Wired intodoctor(warns once, then clean). Verified against a real stale state.
- README +
docs/index.html: TL;DR now leads with the one-liner install →8sync harness→8sync harness web; new Dashboard section (with screenshots) documents the CRUD control surface (models/skills/memory/rules/engines/Codegraph); full harness subcommand table (web/gateway/bench/audit/eval/toolstats); added the machine verbs (bt/clean/theme/bg) that were missing. Fixed stale numbers (binary ≈ 5.0 MB, 35 bundled skill). Landing page gains a Dashboard nav link + feature card + two live screenshots (docs/assets/).
- The web dashboard (
8sync harness web) had zero visibility into the codegraph/ codebase-memory-mcp engines it lists on the Engines page —search_graph/trace_path/get_architecturewere agent-only. New Codegraph nav item (Runtime group) renders the real graph: package call graph (elk auto-layout, box size ≈ node count, edges = call counts between packages), Leiden cluster cards (de-facto modules, cohesion %, top symbols — the actual architectural seams, not just folders), a BM25 symbol search, and a caller/callee trace subgraph for the selected symbol or a fan-in hotspot. - Backend: 3 new routes (
/api/codegraph/{overview,search,trace}) shell out tocodebase-memory-mcp cli <tool> <json>(same binary+slugharness upalready indexes against) — no MCP client embedded, stdout-only JSON parsing verified log-noise-free. Honest 404 ("not indexed yet — runharness up") when the project has no graph. (crates/cli/src/verbs/harness/web.rs,web/src/App.tsx,web/src/api.ts)
- Engines page: the
codebase-memory-mcp 0.8.1tile title rendered one character per line —overflow-wrap: anywherecollapsed the flex item's intrinsic width to zero next to a wide version tag. Fixed.tile-headto give the titleflex: 1 1 auto; min-width: 0and wrap on word boundaries instead of mid-word. - Version tags were inconsistent/redundant across tools (
on codebase-memory-mcp 0.8.1,on headroom, version 0.27.0— duplicating the already-visible tool name).api_enginesnow extracts just the semver token. - Skills page (67 skills, no way to find one): added a filter input +
tier dropdown (
all/always/on-demand/off) with a live "N of M" count.
- New subaction:
8sync harness gateway [apply|key <KEY>|verify|status]— deploys~/.omp/agent/models.ymlfrom a bundled template so the 9router gateway config (provider URL, models, API key,thinking.mode = anthropic-budget-effort) is reproducible by one command instead of hand-editing. applyis idempotent (backs up a differing file tomodels.yml.bak, preserves the existing key on refresh; key from$NINE_ROUTER_KEYorgateway key <KEY>).verifypingscc/claude-sonnet-5through the gateway — the exact path that 400'd before the thinking fix; HTTP 200 = healthy.statusmasks the key + flags a missing fix.- Fixes recurring
400 thinking.enabled.budget_tokens: Field requiredon claude-sonnet-5: omp's defaultthinking:{type:adaptive}is rejected by the gateway; the bundled template forcesenabled + budget_tokens. (crates/cli/src/verbs/harness/gateway.rs,assets/configs/omp/gateway-models.yml)
- Audited
agents/skills.toml's 20companion-inc/feynman-sourced skills (submodule-inspected atreference/feynman, then removed). Found 12 were 12-line stubs pointing at feynman's OWN slash-commands (/deepresearch,/lit,/recipe,/audit,/draft,/review,/compare,/watch,/replicate,/jobs,/log,/autoresearch) — those commands only exist in feynman's own pi-coding-agent runtime (prompts/*.md+extensions/research-tools.ts), NOT in omp. Deployed as-is they were completely inert. 2 more (session-search,preview) had the same problem behind a documented fallback. Ported all 14 (deep-research, literature-review, autoresearch, ml-training-recipe, paper-code-audit, paper-writing, research-review, source-comparison, watch, replication, jobs, session-log, session-search, preview) into self-containedassets/skills/<name>/SKILL.mdusing omp's real tools (taskin place of feynman'ssubagent,web_search/readin place offetch_content,askin place ofask_user_question,job/retainwhere feynman had no equivalent). Also re-bundled 4 genuinely-portable CLI skills (eli5,docker,modal-compute,runpod-compute— only cosmetic "Feynman" naming, no runtime dependency) asbuiltin:too.alpha-researchis kept pointed at the realcompanion-inc/feynmansource since it's a legitimate CLI wrapper (feynman alpha ..., needs@companion-ai/feynmaninstalled via the existingensure_feynman_cli()). Droppedcontributing(feynman-repo-only, no value for su-code users). - Bug fixed in the process:
agents/skills.tomlhad[peer-review]pointing at feynman, but feynman renamed that skill upstream toresearch-review— the entry never resolved to anything on disk. Fixed to[research-review]. - Bug fixed in
update_skills(crates/cli/src/verbs/skill/update.rs): registering ANY single skill from a git collection repo (e.g. justalpha-researchfrom feynman's 20-skill repo) silently reinstalled EVERY sub-skill in that repo on every8sync harness/skill updaterun, regardless of registry membership —contributingkept reappearing after being deliberately dropped from the manifest, because the git-source loop treatedfilter.is_none()as "install everything found". Fixed: a sub-skill is only (re)installed when the URL/repo was explicitly targeted, the skill name was explicitly filtered, or (bulk run) it already has its own registry key — a collection repo no longer silently grows the registry. - 18 new on-demand skills registered in
assets/skills/00-force-load.md's lookup table (55 on-demand total, up from 37).
8sync setup --profile terminalmappedctrl+shift+minustolaunch --location=vsplitfor the gsd-style 3-pane layout. That's kitty's DEFAULT font-zoom-out binding (change_font_size all -2.0) — user maps override defaults, so zoom-out silently stopped working with no error. Moved vsplit toctrl+shift+backslash(unclaimed by any kitty default);ctrl+shift+minus/+equal/+backspacenow behave stock. Re-ran8sync setup --profile terminalto regenerate the live~/.config/kitty/8sync.confon this machine — user must reload/reopen kitty (font-zoom maps apply live viakitty @ load-configif remote control is on, no window-recreate needed unlike the earlier decoration fix). (crates/cli/src/verbs/setup.rs:665-668)
- Previously the snapshot only said "
4server(s) registered" — no tool names. Agents had to guess, which is exactly how the earlier "codegraph verb" hallucination bug happened (see KNOWLEDGE.md). Now8sync harnesswrites the FULL exact tool catalog for every registered MCP server:codebase-memory-mcp(14),headroom(3),serena(23),zai-vision(8) — plus omp's own built-in tools (parsed live fromomp --help's "Available Tools" block) and the Mnemopi memory tools (recall/reflect/retain/memory_edit, listed only when the backend is ON). (crates/cli/src/verbs/skill/deploy.rs::known_mcp_tool_catalog+ensure_omp_capabilities_snapshotrewrite.) APPEND_SYSTEM.mdRULE #0 now names the 4 connected servers explicitly and points at~/.omp/capabilities.mdas the ground truth for exact names/params — "never guess/invent an MCP tool name". The8sync-recall.tshook (injected everybefore_agent_start+ compaction) carries the same pointer so it survives past 50% context.
8sync setup --profile terminalunconditionally wrotehide_window_decorations yesinto~/.config/kitty/8sync.conf. That's correct on a tiling Wayland compositor (Hyprland/HyDE — the project's primary target) which draws no chrome and expects clients to hide their own, but on a stacking desktop (KDE/kwin, GNOME/mutter, …) the compositor ALSO does not add server-side decorations for an undecorated client — the window ends up with no title bar, no traffic-light buttons, and no drag-to-resize border at all.- New
env_detect::is_tiling_wm()checksis_hyde()first, thenXDG_CURRENT_DESKTOP/DESKTOP_SESSIONagainst known tiling WMs (hyprland/sway/river/wayfire/qtile/i3/bspwm/awesome).render_kitty_confnow only emitshide_window_decorations yeswhenis_tiling_wm()is true; stacking desktops (verified live on KDE/Plasma/ kwin/Wayland) keep normal window chrome. (crates/cli/src/verbs/setup.rs,crates/cli/src/env_detect.rs) - Re-running
8sync setup --profile terminal(idempotent) regenerates~/.config/kitty/8sync.confwith the fix; requires closing/reopening the kitty window (decorations are negotiated at window-creation time, not live-reloadable).
- GLM-5.2 (omp's default model) is text-only.
8sync harnessnow auto-installs@z_ai/mcp-server(npm, viabun add -g) and registers it as thezai-visionomp MCP server, exposing 8 GLM-5V tools (ui_to_artifact,extract_text_from_screenshot,diagnose_error_screenshot,understand_technical_diagram,analyze_data_visualization,ui_diff_check,analyze_image,analyze_video). Auth reuses the SAME Z.AI key already configured forzai/glm-5.2(pulled viaomp token zai, no separate signup). (crates/cli/src/verbs/skill/deploy.rs::ensure_zai_vision_mcp+resolve_zai_api_key; wired intoharness auto/harness init; reported bydoctor.) register_omp_mcpnow supports per-serverenv(only emitted when non-empty, so existing env-less entries stay self-heal-stable).- Verified end-to-end (not illustrative): real browser screenshots run
through the actual
zai-mcp-serverstdio process via JSON-RPCtools/call. Found and fixed a real gap —8sync harnessnow defaultsZ_AI_VISION_MODEL=glm-4.6v-flash, the ONLY vision model that works on a stock Z.AI key with no vision resource package (paid models 400 with1113 insufficient balance; verified against Z.AI's live pricing table). - New skill
zai-vision(assets/skills/zai-vision/SKILL.md, auto-deployed byinstall_bundled_global) documents the full combination matrix: browser screenshots,8sync shot/pdf-img/diff-img, codegraph/cbm diagrams, serena, headroom compression,inspect_imagefallback, retain/recall, and advisor — plus the real verified tool-call output and a troubleshooting table for Z.AI error codes (1113/1211/1301/1305). ~/.omp/capabilities.md— new live snapshot of omp's surface (advisor, thinking, inspect_image, adaptive model roles, retain/recall, registered MCP count, skill count), refreshed every8sync harnessrun, surfaced bydoctor(ensure_omp_capabilities_snapshot).APPEND_SYSTEM.mdandimage-routingSKILL now point tozai-visionas the mandatory bridge step after routing to "image".
- New
8sync bg search <query>sub-action. Searches wallhaven.cc via its public API (no API key needed, SFW, ≥1920×1080) — wallpaper-focused (incl. anime/dark), a good fit for the project's aesthetic without imposing an Unsplash/Pexels registration on the user. - Interactive (kitty): stages thumbnails, then opens
fzfwith a livekitten icatpreview pane showing each candidate + its wallhaven source link. Enter downloads the full-res image, adds it to the collection, and sets it live; Esc cancels. Only the full image you pick is fetched. - Non-interactive: prints the result list (id + resolution + source link) for scripting/agents.
- RAII temp cleanup; reuses the existing
add+setpath. No new Rust deps. (crates/cli/src/verbs/bg.rs)
- New
8sync bgverb:show | get | set [file] | list | add <url|file>. Brings back the wallpaper control that was removed in the slim-down — now without HyDE overlap (kitty's in-terminalbackground_image≠ HyDE's desktop wallpaper). - Inline preview:
bg showrenders the current wallpaper in the terminal viakitten icat(kitty graphics protocol — same mechanism omp uses);bg list/bg set(no arg) open an interactive fzf picker with a livekitten icatpreview pane → scroll, see each image, Enter to set. - Live swap:
bg set <file>rewrites thebackground_imageline in8sync.conf+ SIGUSR1-reloads kitty (instant, no restart). The choice is recorded in~/.config/8sync/wallpaperand8sync setuphonors it (re-setup no longer resets your wallpaper). Collection lives in~/.config/8sync/wallpapers/(bg add <url>populates it). - Zero new Rust deps (shell-outs to
kitten/fzf/curl) — binary stays lean. (crates/cli/src/verbs/bg.rs)
- New
8sync themeverb:list | set <name> | show [name]. Six curated dark palettes (tokyo-night default · catppuccin-mocha · gruvbox-dark · nord · rose-pine · dracula), each a pure color fragment tuned for wallpaper-overlay readability (foreground + bright-black verified at WCAG-AA contrast ≥ 4.5:1 against the theme bg). Switching writes~/.config/kitty/8sync-theme.confand SIGUSR1-reloads kitty — instant, no restart, no remote-control socket.hydectl themestill owns Hyprland/UI; this owns kitty (distinct surfaces). (crates/cli/src/verbs/theme.rs)
- Readability root-cause: deployed
8sync.confhadbackground_tint 0.55(image 45% visible → bright wallpaper washed out the foreground). Raised to 0.86 (image subtle, text crisp). - The glass structure (
background_opacity/blur/font/splits/tabs) is now separated from the palette (8sync-theme.conf, swappable);render_kitty_confno longer emits colors inline. - Restored
allow_remote_control yesin the managed config — it had been dropped in the slim-down, breakingkitty @live control. (crates/cli/src/verbs/setup.rs) 8sync setup --profile terminalnow deploys both files (structure + active palette); the active theme is recorded in~/.config/8sync/kitty-themeand survives re-runs.
- New
/api/enginereads the real gsd-pi state machine the engine drives at<root>/.cache/8sync/engine/state.json; the Engines page renders a live board — goal · progress bar · slice/task tree with ✓/▸/○/✗ status + retries · current task (4 s refresh, read-only mirror of the terminal board). Closes the gap where the dashboard showed the workflow editor + engine binaries but never the actual/autorun.{active:false}when none. Browser-verified, 0 console errors. (crates/cli/src/verbs/harness/web.rs,web/src/{api.ts,App.tsx})
affine-bin— official prebuilt of the open-source Community Edition (AGPL/custom: free, self-hostable, no cloud lock-in). The from-sourceaffineAUR pkg fails upstream (electron-packager zip step), so the prebuilt is used. (assets/profiles/alexdev.toml)
APPEND_SYSTEM.md(every system prompt, never compacted) + the recall hook now explicitly primerecall/reflectbefore ·retaindurable facts after (Mnemopi) andbrowserto verify any web/UI change for real — on top of RULE #0 (code-intel MCPs) + skill ref-paths. Stays terse by design (the system prompt isn't headroom-compressed; headroom is for tool OUTPUTS). (assets/configs/omp/APPEND_SYSTEM.md,assets/hooks/8sync-recall.ts)- kitty tab bar moved to the bottom (
tab_bar_edge bottom) — easier tab switching. (setup.rsrenderer)
harness uprefreshed APPEND_SYSTEM/engine/workflow but not the recall hook (only init/bare-harness did), so hook changes never reached existing machines viaup. Now it does. (crates/cli/src/verbs/harness/up.rs)
headroom(andserena) were registered in~/.omp/agent/mcp.jsoneven when their binary wasn't installed — so omp failed at startup withExecutable not found in $PATH: "headroom". Now8sync harnessbootstrapsuv(Astral, user-level curl install — no sudo), installsheadroom-ai[mcp]through it, and only registers an MCP whose executable actually exists — a still-missing tool has its stale entry purged so omp never errors at startup.uvalso ships theuvxserena needs, so both engines come up from one8sync harness, no manual steps. (crates/cli/src/verbs/skill/deploy.rs)
- Enabled rust-embed's
compressionfeature (transparentinclude-flatedecompress on.data— both theassets/skills tree and the embeddedweb/distFE shrink) and set the release profile toopt-level = "z". Roughly halves the binary, offsetting the bundledrusqlite(toolstats) + impeccable + the Vite FE. (crates/cli/Cargo.toml,Cargo.toml)
setup::deploy_wallpapertrustedexists(), so a transient/blocked download left a 0-bytewallpaper.pngkitty can't render (blank background) — and the earlyexists()return meant it never re-tried. Now validates the file (size>0 + PNG/JPEG/WEBP magic viais_valid_image), adds aMozilla/5.0UA +--retry 2, and purges a corrupt file so a re-run re-downloads. (crates/cli/src/verbs/setup.rs)
- The headline is now optimizer vs raw-search of code-lookup calls only (optimizer = codegraph /
cbm / serena; raw-search = grep / search / find / glob) — instead of "% of all calls", which was
misleading (most calls are edit / bash / read-before-edit, not lookups).
readis shown separately (often legitimate, not shamed) andheadroomis labelled background/auto-compress (not an agent-called tool). Measured: su-code optimizer 34% of lookups, agentic-cloudgo 25% — vs the old "2% of all calls" framing. The DB is rebuilt from current sessions each run (re-categorizes).
- New verb that tracks how the agent actually uses tools, parsed from omp's own session
JSONL, into a per-project SQLite DB (
.cache/8sync/toolstats.db, gitignored). Reports the optimizer (codegraph / codebase-memory-mcp / serena / headroom) vs fallback (grep / read / search / find / glob) call ratio + per-tool failures, so you can see whether the STEP-0 token-optimization stack is being used and catch failing calls (e.g. a dead MCP server). - Idempotent (keyed on session+seq → re-run only adds new calls); inspectable with any SQLite tool.
- Motivation: across this machine's 68 omp sessions / 28k calls, the optimizer stack was 1.1%
of calls (serena/headroom 0) vs 35% raw fallback —
toolstatsmakes that visible per project.
- Stage A now installs only the AI coding harness: omp, codegraph, MCP servers + skills,
github-cli, paru, PATH bootstrap, configs. The terminal/editor polish (kitty glass theme + helix
- JetBrains Nerd font + wallpaper) is no longer installed by default — a fresh
8sync setupis pure AI now.
- JetBrains Nerd font + wallpaper) is no longer installed by default — a fresh
- New opt-in
terminalstack:8sync setup --profile terminal(also offered in the y/N menu and applied by--full).dockermoved out of the terminal stack — it lives indev-stack. doctorreports the terminal stack (kitty/helix/docker) as advisory/opt-in — no longer warns when it's absent.- Personal/hardware profiles (vietnamese/unikey, warp, hardware-*, displaylink, …) stay opt-in as before. Nothing personal is installed unless you pick it.
- serena's executable was renamed. The registered command
uvx … serena-mcp-serverno longer exists (serena now shipsserenawith astart-mcp-serversubcommand), so the MCP process exited instantly → omp reportedserena: Transport closed. Now registersuvx … serena start-mcp-server --context claude-code(ide-assistantwas also deprecated). Verified it launches (22 tools exposed, no error). - MCP registration now self-heals.
register_omp_mcppreviously skipped any server already inmcp.json, so a stale entry never got corrected. It now updates in place when the command/args changed, and8sync harness upalso refreshes MCP servers (was init/bare-harness only) — so8sync harness upfixes the stale serena entry on existing machines.
- Per-model context window.
/api/contexthardcoded a 1,000,000-token window, so models with a smaller real window (e.g.claude-haiku-4-5200k,glm-4.x131–205k) showed an artificially low % and looked like they never hit the compaction threshold — while 1M models (glm-5.2, claude-opus) looked fine. Now the window is parsed per active model fromomp models(cached viaLazyLock), so the %, threshold marker, and "will compact" are accurate for every model. Falls back to an explicitassumedestimate only when the model isn't in omp's catalog. - Honest compaction copy. omp's threshold compaction is turn-triggered (fires after a
completed turn / safe mid-turn point once usage exceeds
thresholdPercentof the real window) — not a hard cap, so a paused/ended session legitimately sits above the line until resumed. The page now says "compacts on next turn", flags idle/ended sessions (stale), surfaces the explanation, and only shows the "assumed window" badge when the window is truly unknown. build.rsshipped stale FE. It rebuilt the Vite bundle only whenweb/distwas missing and watched onlyweb/dist, so edits toweb/srcwere silently embedded stale. Now it rebuilds when any FE source is newer than dist and emitsrerun-if-changedforweb/src+ configs.
- Switching projects now actually switches the data.
activateonly wrote an advisoryweb-session.json; every handler still readdetect_current_project_root()(the launch cwd), so pages never changed. Nowapply_active_projectchdir's into the activated project (at startup- on activate) so all cwd-based handlers (State/Context/Skills/Memory/Rules/Submodules/Workflow) resolve to it. Verified in-browser: switch → State path + content + trigger label all update.
/api/projectscleanup — dedup by resolved path; drop junk slugs (no session file / non-dir); widened the green-dot "active" window to 2h + added acurrentflag for the project being viewed (a project open but idle >30 min now shows correctly).
- Models page (
/api/modelsget+post) — view/edit the adaptive model routing live:[roles](default/plan/smol/slow) +[tasks](plan/review/debug/code/trivial), inline selects write~/.config/8sync/models.tomlimmediately. Surfaces the routing philosophy: thinking → Opus (plan/review/debug/vision), mechanical → GLM (code/edit/default/trivial). - Project switcher (
/api/projects) — sidebar-top dropdown lists every omp project with a green (active) / gray (off) status dot; activate + refresh withoutcd. - Workflow templates (
/api/workflows/templates) — 3 starter graphs (research→plan→build, review, qa) loadable in the editor. - Markdown rendering — new XSS-safe renderer (
web/src/markdown.tsx); State/Memory/Context now render headings, lists, GFM checkboxes, code, emphasis (was raw text).
- serena engine showed "off" wrongly — detection now checks
mcpServers.serenain~/.omp/agent/mcp.json+uvx/uvon PATH (serena is uvx-launched, no PATH binary), notwhich serena. Reports{present,registered,runner}. - Context window honesty —
/api/contextnow exposesassumed:true,windowTok,thresholdPct,willCompact; the FE labels the 1M window as an estimate (no false precision). - Workflow canvas — react-flow viewport fixed (was a tiny broken box) to a usable 560px panel with fit/zoom.
- Dashboard FE redesigned to a product-register design system (impeccable): solid surfaces, violet brand preserved, legible chips, grouped nav, dark + light. 14 pages, zero console errors.
- Unified the autonomous entry to a single
/auto— removed/gs(command + skill +ensure_gs_command+ all wiring + help/force-load refs)./auto(8sync-engine) is the only automation path;deploy::cleanup_legacy_gsremoves the retired/gsfrom machines that had it. /autoupgraded to gsd-pi-grade (grounded inreference/gsd-pi): research INTEGRATED into planning (codegraph/cbm/serena scout + feynman/deep-research), fresh scoped context per task, mechanical verify-gate, hard Closeout (full suite + QA/UAT in a browser + independent re-review vs DoD + doc-hygiene), and a context-budget/handoff rule.- Verify UI for real: web →
browserat the dev URL; Tauri v2 / WRY-WebKit desktop → run with its web-inspector/remote-debug port + point the samebrowsertool at it. harness upnow deploys the full harness (APPEND_SYSTEM +/autoengine + workflow), matching bare8sync harness.
8sync harness model— view/edit~/.config/8sync/models.toml(single model-routing source): bare shows roles+tasks;8sync harness model <key> <value>sets one (e.g.review opus). omp resolves names fuzzily + falls back to an authenticated model.
- Per-prompt model selection (no more single fixed model).
assets/configs/models.toml(deployed →~/.config/8sync/models.toml) maps[roles]default/plan/smol/slow +[tasks]plan/review/debug/code/trivial → models (defaults: codex main · glm plan · opus review/debug · haiku smol). Newcrate::modelsclassifies the prompt heuristically and passes omp--model/--plan/--smol/--slow(omp resolves fuzzy: "glm","codex","opus"). Wired into8sync ai(+--modeloverride) and8sync .(resume flags). omp owns the catalog — 8sync only steers.
8sync-engineomp extension (~/.omp/agent/extensions/+ project) — durable slice/task state machine (.cache/8sync/engine/state.json) + model-callable toolsengine_plan/status/ next/verify/advance/worktree. Code-enforced verify-with-retry gate (counts attempts, BLOCKs at maxRetries — the agent can't skip it) and git worktree open/squash-merge/remove./autocommand orchestrates the engine to run a goal to DONE (right-sized, token-lean). Closes the gsd-pi gaps (verify/worktree as CODE, not prose)./gsstays a lighter skill.
APPEND_SYSTEM.mddeployed to~/.omp/agent/— RULE #0 (code-intel before grep/CRUD) + always-on skill manifest (name·purpose·ref-path) injected into EVERY system prompt (never compacts away) → fixes "skills/rules defined but ignored past 50%". Recall hook rewritten to the LIVE half (skill index + STATE Current/Next).- serena MCP registered (
ensure_serena_mcp, viauvx) — symbol-level code intel, prioritized over native search/file-CRUD. Surfaced on the dashboard Engines page + force-load RULE #0. 8sync harness compaction [pct]— view/setcompaction.thresholdPercent(auto-clean at 50%).
8sync setupnow installs kitty + helix + docker + docker-compose + JetBrains Nerd font and deploys a glass kitty theme (~/.config/kitty/8sync.conf, included from kitty.conf — no clobber): transparency + blur + wallpaper + 3-pane split keymaps + violet accent. Wallpaper deployed to~/.config/8sync/wallpaper.pngfromassets/wallpapers/default.png(bundled) or[ui].wallpaper_url. Transparent helix config (base16_transparent) deployed if absent.8sync doctorchecks hx/kitty/docker.
- Web dashboard redesigned to a dark glassmorphism / Hyprland aesthetic (translucent blurred panels,
layered gradient, icon sidebar, refined type scale, light-mode + a11y fallbacks). 13 pages, react-flow
workflow editor intact. Browser-verified: all pages render, zero console errors. (
web/src/{styles.css,App.tsx,icons.tsx}) build.rsnow builds the FE with bun → pnpm → npm (first available); on no toolchain it embeds a styled, instructive fallback page instead of a bare one-line stub.- Helix command fixed to
hx— dropped the dead"helix"fallback (Arch ships/usr/bin/hx, nohelixbinary);note/findnow share onepick_editor()($VISUAL→$EDITOR→hx→vi).
- Context tracker page — live omp session token usage for the current project (reads the
session JSONL's
contextSnapshot.promptTokens, auto-refresh 4s). Gauge + 50% threshold marker + compaction-observed badge (detects the token drop = empirical proof auto-compact fired)./api/context. Verified real: tracks this very session 440k→447k live; detected last compact at 575k. - MCP servers page — visualize
~/.omp/agent/mcp.json(name/command/args/present)./api/mcp. - Rules CRUD page — list/add/delete omp rule files (
.omp/rules/*project +~/.omp/agent/rules/*global), add from pasted content (link/file/folder source)./api/rules(+add/delete). - Dashboard now 12 pages (State · Context · Skills · Memory · Engines · Bench · Readiness · Workspaces · Team · Submodules · MCP · Rules). Anti-slop per impeccable (no gradient text / glassmorphism / over-round; verb+object buttons). Browser-tested (Chromium): all pages render real data, Context live-tracking + Rules add-end-to-end verified.
- Anti-forget: compaction@50% + idle + recall hook.
8sync harnessgiờ ensure~/.omp/agent/config.ymlcócompaction.thresholdPercent: 50+idleEnabled: true(snapcompact vẫn là default), và deploy~/.omp/hooks/pre/8sync-recall.ts— hook inject lean ref bundle (skill index + live STATE) tại mỗibefore_agent_start+ vào mọi compaction summary → agent giữ index skills/rules/workflow qua 50% context & sau compact.8sync doctorbáo "anti-forget ON/OFF". Key-based config detection (robust khi omp rewrite/strip comments config.yml — bỏ sentinel strategy). Verified: omp 16.2.1 load OK.
8sync harness web— dashboard Vite+React (embedded qua rust-embed) do axum serve tạihttp://127.0.0.1:8731(--port,--no-open). API:/api/state·/api/skills(list + toggle tier quaagents/skills.toml) ·/api/memory/:file(get/set, allowlist) ·/api/engines(codegraph/cbm/headroom/serena + mnemopi) ·/api/bench·/api/eval. Refactor B5: táchbench_metrics()/eval_project_data()(home: &Path) cho cả CLI lẫn web reuse. Build.rs tự build FE qua pnpm khi thiếu + stub fallback. Deps: axum 0.7 + tokio + tower-http (override có chủ đích rule "tránh tokio" trong AGENTS.md §8, gatedharness web). Verified real: 6 endpoint trả data sống (eval 96% 28/29, bench A1 PASS).
- Workspace + team + submodule + skill install qua dashboard:
/api/workspaces(list omp profiles + project + activate ghiweb-session.json),/api/team(subagent roster 8 loại + readiness reuse eval_project_data),/api/submodules(parse.gitmodules+ add/pull/remove qua git shell-out),/api/skills/add|update(self-shell-out8sync skill). FE: 3 page mới (Workspaces, Team, Submodules) + nav. Verified real: workspaces/team/submodules trả data, skill add validate spec.
8sync harness eval --project— agent-team readiness scorecard (% per vai). Deterministic + offline: chấm capability coverage trên repo hiện tại theo dev · qa/testing · research · ba/po · fe · be · docs · memory/learn · token-opt (engine on PATH + skill present + memory spine + stack signals). Honest READINESS (team được trang bị gì Ở ĐÂY), KHÔNG phải output-quality (đó làharness evalloop probe model+network). Run thật: su-code 89%, 8syncdev-pro-v2 79%.token-benchskill (bundled) — chứng minh token-saving của code-intel trên repo thật.scripts/token_bench.py(uv/PEP723, stdlib-only): mỗi symbol thật so codegraph-query+slice vs grep+read-whole-file, có def-kind correctness gate. Đo trên codebase lớn thật: 8syncdev-pro-v2 −96.6%, gsd-pi −78.6% (range 54–98%; symbol dùng rộng / file lớn → 95–98%), correctness gsd-pi 10/10. Cần ANSI-strip (codegraph tô màu cả khi pipe). Bundled quadeploy.rs(16 skills).- 6 reference submodule (inspect/track upstream; deinit, content gitignored): gstack · gsd-pi · agent-reach · addyosmani/agent-skills · DietrichGebert/ponytail · DeusData/codebase-memory-mcp.
outputs/agent-team-workflow-automation-plan.md— operating plan để vận hành su-code như một agent team: map sprint 23-specialist của gstack + loop slice/auto/worktree của gsd-pi lên/gs+ skills + subagents, kèm UI/UX Design Lane riêng (impeccable + Clouds F + Lighthouse 4-tiêu chí quality gate).8synchelp dẫn đầu bằng AI TEAM (harness +/gs). Cheatsheet (8sync/8sync help/8sync flow) trước đây mở đầu bằng install + vibe loop, không hề nhắc8sync harness(all-in-one) lẫn/gs(team lead) — giờ là section ĐẦU TIÊN. Fix dòng stale:8sync skill sync(đổi thànhskill update; regen là8sync harness) và8sync up("binary + omp" → chỉ 8sync; omp quaomp update)./gs <goal>scope handshake (chỉ assisted). Goal medium+/mơ hồ không dive thẳng: GS ground (codegraph/cbm) rồi đề xuất 2–4 phương án cụ thể (scope · team size + roles/skills · effort · tradeoff, rút từ bench senior: impeccable+Lighthouse / senior-frontend / code-review-and-quality / senior-security / performance-optimization) kèm recommended default + 2–4 câu hỏi sắc quaAskUserQuestion— một vòng rồi chạy.autovẫn unattended (no questions); trivial/small bỏ qua handshake. (assets/commands/gs.md§1b.)8sync harness evalbáo%(eval.rs:114) —score: N/M passed (X%). 3/3 = 100%.outputs/omp-customization-memory-platform-research.md— research grounded từ omp docs: cơ chế nhớ THẬT = Mnemopi memory + cbm + spine, dùng model API (không local — máy yếu vẫn chạy), thay cho ngộ nhận GGUF/fine-tune (không khả thi); custom command/workflow trên ĐÚNG base omp (.omp/commandsnative, update không conflict); submodule auto-pull là ngộ nhận (skill đã auto-latest qua manifest+harness up --pull); agent-reach = capability layer (đọc internet), thêm làm skill.- Mnemopi memory wired vào
8sync harness(deploy.rs::ensure_mnemopi_memory) —harness/initbậtmemory.backend: mnemopi(+scoping: per-project-tagged,llmMode: smolAPI,noEmbeddings: trueFTS,polyphonicRecall) trong~/.omp/agent/config.yml(idempotent sentinel-block, KHÔNG clobbermemory:của user). 0 local model → máy yếu chạy.8sync doctorbáo memory ON/OFF (doctor.rs). Verified: omp 16.1.20 load config OK, doctor "mnemopi memory ON". Tradeoff: recall inject token/phiên (user đã chốt bật). - 5 reference repo = git submodule (
reference/, content gitignored, deinit mặc định): gstack · gsd-pi · agent-reach · addyosmani/agent-skills · DietrichGebert/ponytail. Đăng ký để inspect/track upstream (git submodule update --init --remote reference/<name>để pull-latest đọc khi cần). Submodule = nguồn-tra-cứu; deploy auto-latest cho skill LIVE vẫn qua manifest +harness up --pull.
- Declutter skill registry — bỏ pack research
companion-inc/feynman(20 skill on-demand). Manifest (agents/skills.tomlcommitted +~/.config/8sync/skills.tomlmachine-local) đăng ký 20 skill research/ML/academia (paper-writing, ml-training-recipe, literature-review, runpod/modal-compute, peer-review, jobs, eli5, …) — sai domain cho một coding harness + là prefix noise inject vào AGENTS.md mỗi phiên. Cắt cả 20 (collection re-pull là all-or-nothing theo URL —update.rs:49, giữ 1 cái là re-clone cả pack). Kết quả: on-demand 55 → 35, force-load prefix ~1998 → ~1717 tok, deferred −5k tok (8sync harness bench), A1 stable-prefix PASS. Giữ nguyên addyosmani coding-eng + design payload (impeccable/taste/assp) + bundled always-on.
8sync harness eval— loop quality probe. Runs a fixed task-suite through omp non-interactively (omp -p --no-session --auto-approve) and scores each task with a deterministicverify.sh(the verifier OWNS the assertion, so the agent can't game the check). Three bundled fixtures:fix-failing-test(correct a wrong impl untilcargo testis green),add-fn-with-test(implementslugify; the verifier appends the assertions),locate-symbol(answerpath:linefor a symbol). Writes a JSON scorecard + a--baselinereference into the gitignored.cache/8sync/eval/; later runs print the pass-count delta vs baseline. Model + network, non-deterministic — a periodic quality SIGNAL, not a CI gate. Verified end-to-end: 3/3 on this machine.
/gsL3 worktree isolation is now concrete. The guardrail named "git-worktree isolation" with no mechanism; it now prescribes the exact flow —git worktree add .gs/wt/<slug> -b gs/<slug>, implement- verify + commit on that branch inside it, then
git worktree remove(merge/PR only if asked); never editmain's working tree directly. (.gs/is gitignored, v0.22.0.)
- verify + commit on that branch inside it, then
8sync harness audit— code-backed doc-hygiene (was prompt-only advice with zero code behind it). Scans committed docs (AGENTS.md/CLAUDE.md/README/CHANGELOG +agents/*.md) for stale path references (repo-relative paths in docs that no longer exist), oversized docs (>400 lines / >120-line force-load block), and 30-day churn hotspots (history-awareness — docs near churned code are likeliest stale). Report-only: never auto-deletes (heuristic; illustrative paths flagged "review before editing"). Skips absolute /~-rooted / URL paths so the harness's own machine-generated refs don't false-positive.8sync doctorsurfaces a one-line summary;/gs+ thegsskill doc-hygiene step now run the audit instead of eyeballing.8sync doctorAI-engine health check — verifies the token-optimization stack is installed AND registered with omp ("luôn xài"): codegraph (local index) · codebase-memory-mcp (semantic graph) · headroom (output compression). A missing or unregistered engine silently defeats STEP 0 token discipline, so doctor now flags it with the one-command fix (8sync harness).
- codegraph STEP 0 verbs were wrong in the force-load prefix, the subfolder-index block, and the
KNOWLEDGE breadcrumb: they taught
codegraph search/deps/defs, none of which exist. Corrected to the real CLI surfacecodegraph query/callers/callees/impact(verified against codegraph 0.9.6) so the agent's first explore call doesn't error out. - Duplicate always-on skill in the force-load list. A stale/external
karpathydir alongside the canonicalkarpathy-guidelines(identical frontmattername) made the skill appear twice — once in CORE, once in on-demand.build_force_loadnow dedups by frontmatter name, keeping the higher-ranked dir, so each logical skill is listed exactly once. Future-proof against any dir/name collision. - impeccable setup scripts couldn't run under 8sync's layout. The bundled design skill referenced
.agents/skills/impeccable/scripts/*.mjs(leading dot) but 8sync mirrors skills toagents/skills/(no dot). Fixed 28 references across SKILL.md + 4 reference docs →agents/skills/.
- Managed
.gitignoreblock now ignores.gs/(per-run worktree +/gs stopmarker — machine-local).
/gsredesigned to right-size effort (fixes the post-/gsquality regression). Eval + deep-research (outputs/gs-eval-improve-research-brief.md) found the drop was process over-engineering, not tokens (harness bench: ~8.5k upfront, 79% saved, KV-cache stable): the 93-line command forced a team + full Closeout on every task andauto"never asked".- Right-size first — classify trivial/small → solo (no team, no Closeout) · medium → solo + one verifier · large → full loop + roles + Closeout. A team is the exception you justify (Cognition/Anthropic: single-agent default; multi-agent only when it clears the bar).
- Solo-by-default delegation — subagents only for parallel-independent / context-isolation / specialization; scoped objective + summary return (never free-form, never inline transcript).
- Autonomy confidence-gated — strong
auto, but a high-stakes hard-to-undo low-confidence call is now a blocker (Anthropic 2026: "agents learning when to ask"); prefer reversible, never compound. - Doc-hygiene step — detect stale paths / junk / superseded docs → fix or delete (no addition without the matching deletion); keep docs lean. Stale docs poison agent context.
- Codebase-history —
git log/blame+ DECISIONS + cbmdetect_changesbefore load-bearing edits. - Leaner command —
assets/commands/gs.md93 → 56 lines (lower constraint density → better instruction-following); full protocol stays in thegsskill (progressive disclosure).
/gs autoactually runs unattended now. Added an Autonomy contract to the/gscommand +gsskill: inauto/L3 the agent NEVER callsaskor stops on ambiguity — it resolves unknowns by research (codegraph/cbm →agents/*/PLAYBOOKS → skills →web_search/autoresearch/deep-research), picks the boring/reversible option, logs it under a new## Assumptionssection inagents/STATE.md, and proceeds. "Blocker" is tightened to ONLY missing credential / external approval / destructive- irreversible action; design choices, naming and scope are no longer stops. Note: a slash command cannot bypass omp's approval gate — keeptools.approvalMode: yolo(default) for true unattended runs./gsargument hint. Addedargument-hintfrontmatter and front-loaded the description with[auto | <goal> | status | next | stop]so the autocomplete dropdown shows the modes when you type/gs(omp renders per-argument hints only for built-ins; the description is what surfaces for file-based commands).- QA + test are now first-class gates in
/gs. Per-slice verify-gate explicitly runs tests + a QA pass and forbids skipping/weakening tests; added a mandatory Closeout step — full test suite + end-to-end QA + independent re-review against the Definition-of-Done + a handoff summary — that must pass before the loop reports "done". Never hands back unverified work.
- Reference submodules
reference/gstack+reference/gsd-pi(git submodules, MIT) for studying the engineering-team + autonomous-loop patterns that informed/gs. Pointers are committed (reproducible) but the working trees are deinitialized by default so they never bloat the codegraph/cbm index (codegraph honors no exclude/ignore — populating them ballooned the index to ~3k files / 110 MB). Study on demand:git submodule update --init reference/<name>; re-shrink withgit submodule deinit -f reference/<name>.reference/is also gitignored as a cbm-index guard.
/gs— one-command autonomous engineering-team loop (omp slash command)./gs <goal>plans + runs, bare/gsresumes,/gs autoruns unattended (L3),/gs status|next|stop. Drives the loop offagents/STATE.md: plan → delegate to specialist roles (tasksubagents / gstack roles if installed) → verify-gate → commit → record (KNOWLEDGE/PLAYBOOKS) → advance until Definition-of-Done or a blocker. Token-lean (codegraph + codebase-memory-mcp + headroom mandatory) and guardrailed (verify-gate before commit, worktree isolation + no push/PR at L3, hard-stop via/gs stop). Modeled on gsd-pi/gsd auto.- Deploy + team-sharing.
8sync harness/init/upwrite it to~/.omp/agent/commands/gs.md(global) and<repo>/.omp/commands/gs.md(committed → whole team gets/gs). New on-demandgsskill documents the protocol;8sync harness up --timerruns it 24/7.
- Loop engineering v2 — Phase A (token & stable-prefix discipline).
- Force-load block (
inject.rs) + master00-force-load.mdsplit always-on skills into CORE (codegraph · karpathy · ponytail · 8sync-cli — đọc body upfront) và SPECIALIST (assp · impeccable · taste · image-routing — biết khả năng, đọc body khi task khớp / progressive disclosure). Thu nhỏ tập đọc-ngay;impeccablevẫn bắt buộc ngay khi có việc UI/design. headroom_compressnâng từ khuyến nghị → bắt buộc cho output > ~50 dòng (STEP 0 + invariants).- KNOWLEDGE breadcrumb (
memory.rs) bỏ timestampepoch:volatile → byte-stable giữa các lầnharness(thân thiện KV-cache, hết git churn).now_stamp()vẫn dùng cho tên file archive. - Plan + provenance:
outputs/harness-loop-engineering-v2-plan.md.
- Force-load block (
- Loop engineering v2 — Phase B (live memory & recitation).
agents/STATE.mdseeded as a structured live plan (Goal · DoD · Checklist · Current · Next · Open-questions · Handoff) — recitation anchor (Manus todo.md pattern): read at session start, rewritten at each phase boundary to keep the plan in recent context.- Loop section (
00-force-load.md) + generated block (inject.rs) gain recitation, compaction (near-limit → structured handoff to STATE + lessons to KNOWLEDGE → reinit, withheadroom_compressas summarizer), and budget-awareness rules. harness benchnow counts the memory spine in the upfront budget (more honest accounting).
- Loop engineering v2 — Phase C (maker/checker + Reflexion).
- Loop section + generated block:
taskimplementer ↔ independent verifier (build/test in its own context, verify-gate before commit), explicit objective/boundaries/output per subagent, share-full-trace for dependent work, parallel only when subtasks are independent. - Reflexion failure-capture: a failed verify writes a
failure:entry to KNOWLEDGE (symptom- cause + fix); recent failures are read at session start to avoid repeating them.
- Loop section + generated block:
- Loop engineering v2 — Phase D (procedural memory / playbooks).
agents/PLAYBOOKS.mdseeded (Voyager-style skill library): validated multi-step procedures distilled into reusable runbooks indexed by aWhen:line — retrieved + adapted, not re-derived.- Memory tiering: KNOWLEDGE = verbal lessons · PLAYBOOKS = verified procedures · DECISIONS = ADR.
harness benchnow counts PLAYBOOKS in the spine (6 files).
- Loop engineering v2 — Phase E (phased autonomy + guardrails).
- L1 report · L2 assisted · L3 unattended defined, with guardrails (verify-gate before commit,
gitleaks, commit scoped to
agents/+docs, no autopush/PR at L3).harness up --timerper-tick job documented (read STATE → Next → verify → update spine → optional commit).
- L1 report · L2 assisted · L3 unattended defined, with guardrails (verify-gate before commit,
gitleaks, commit scoped to
8sync harness bench— deterministic loop-engineering benchmark (no model calls): upfront context budget (force-load prefix + CORE skill bodies) vs deferred (SPECIALIST + on-demand), the A2 progressive-disclosure saving, and an A1 KV-cache stable-prefix gate. Refactors a sharedinject::build_force_load()(single source of truth for inject + bench). Baseline on this repo: upfront ~5.5k tok vs naive ~37.9k tok → 85% upfront cut; A1 PASS.
8sync harness initnow pulls registered manifest skills —initcallsskill updateagainstagents/skills.toml(git collections likefeynman: deep-research, autoresearch, …) before mirroring, making it a true superset of bare8sync harness. Previouslyinitonly deployed the bundled skills + 2 hardcoded external packs (ponytail, addyosmani), so manifest-only skills never reachedagents/skills/viainit— only bare8sync harness/up --pulldid.
- Headroom context-compression wired as an omp MCP —
8sync harness/initauto-installsheadroom-ai[mcp](uv → pipx → pip fallback) and registers it in~/.omp/agent/mcp.json(headroom mcp serve, stdio). Toolsheadroom_compress/headroom_retrieve/headroom_statscompress long tool outputs / logs / diffs 60–95% before they reach the model. Force-injected into STEP 0 +00-force-load.md. Researched alongside PixelRAG + LocateAnything3D — skipped: PixelRAG (screenshot-RAG) overlaps8sync shot/read/browser; LocateAnything3D is a 3D-vision model (out of scope for a coding harness).
- Skills now propagate to other machines.
8sync harness/skill updatewrite a committed project manifestagents/skills.toml(mirroring the machine-local registry) and read it back on any machine — so a fresh clone re-pulls the exact same skills. Previously only the machine-local~/.config/8sync/skills.tomlrecordedskill add-ed sources, so custom skills (e.g. git collections like feynman) never reached a second machine via harness — only the 15 binary-embedded skills + 2 hardcoded external packs did. (agents/skills.tomlis a file, so it travels even when theagents/skills/directory is gitignored.)
- codebase-memory-mcp = first-class code-intelligence engine —
8sync harness/initauto-installs the binary (upstream installer, binary-only), setsauto_index true, and registers it as an omp MCP server in~/.omp/agent/mcp.json(idempotent, preserves other servers).harness/upindex the repo. Mirrorsensure_codegraph— zero manual MCP config. - Code intelligence FIRST (STEP 0) — the injected force-load block +
00-force-load.mdmandate codegraph + codebase-memory-mcp BEFORE grep/read for all code exploration (~99% token saving); rawReadonly for read-before-edit. - Loop-engineering principles (Addy Osmani / Boris Cherny) in
00-force-load.md: STATE/KNOWLEDGE spine, maker/checker viatasksub-agents, verify-gate, phased L1→L3 autonomy viaharness up --timer.
8sync harness(bare) = ONE command — idempotent driver that makes a project agent-ready in a single pass: deploy/update skills + mirror (additive) + inject force-load + seed memory & gitleaks hook + consolidate learnings + re-index codegraph.harness init= explicit full bootstrap (progress UI);harness up= light refresh;harness up --timer 30m= background loop.- Additive skill mirror +
--force—harness/harness initnever clobber an already-vendored (possibly edited)agents/skills/<name>; only missing skills are written.harness init --forcere-mirrors everything.harness upnow also seeds the gitleaks pre-commit hook. 8sync skill update [name]— re-pull registered skills from their recorded source inskills.toml(git URL /builtin:/path:). Git sources are deduped per URL (a collection repo is cloned once, all sub-skills reinstalled); best-effort per source (offline / missinggitwarns + skips, exit 0).nameupdates just one.8sync harness up --pull— refresh AND re-pull every registered skill before re-injecting. Defaultupstays network-free + fast (timer/loop unaffected).8sync harness up --commit— close the self-learning loop: stage +git commitONLY the refreshed agent memory (agents/,AGENTS.md,CLAUDE.md,CHANGELOG.md,.gitignore; never your code) so learnings persist to git in the same pass. No-op when nothing changed (no empty-commit spam on--timer); default off.8sync harness help— one-screen cheatsheet: commands, skill tiers, the commit-vs-ignore file taxonomy, and the new-machine runbook.- Portability:
harness init/upseed a managed.gitignoreblock (between# >>> 8sync (managed) >>>sentinels) — ignore derived (.codegraph/,.cache/8sync/)- secrets (
.env,.env.*, keep!.env.example), keep agent memory +agents/skills/committed.8sync doctornow errors if any durableagents/*.md/AGENTS.md/CHANGELOG.mdis gitignored (learnings wouldn't survive a move to a new machine).
- secrets (
agents/KNOWLEDGE.mdseeded with an append-only## Learningszone below the managed breadcrumb block (overwritten eachharness up) so learnings persist.
- Lean force-load context — the injected on-demand skill list is now names+path
only (one line each); full descriptions live in each
SKILL.md(progressive disclosure).8sync doctorwarns if theAGENTS.mdforce-load block exceeds 120 lines. Why: Gloaguen et al. arXiv 2602.11988 (138 repos) — bloated/duplicative context files cut agent success and add >20% inference cost. - Skill version pinning (lockfile) —
8sync skill add <url>@<ref>pins a git commit/tag/branch; the resolved SHA is recorded asrevinskills.tomlandskill updatechecks out exactly that rev (reproducible). Unpinned entries track latest. Why: mirrors Claude Code plugin marketplace (SHA pin = reproducible). - Secret-scanned auto-commit —
harness up --commitrunsgitleaks protect --staged(if installed) and ABORTS on detection;harness initinstalls a gitleaks pre-commit hook (non-destructive);8sync doctorreports gitleaks. Why: GitGuardian 2026 — AI-assisted commits leak secrets ~2× baseline. - Bounded memory (anti context-rot) —
harness upconsolidates the## Learningszone past ~200 lines, archiving older entries toagents/archive/with a pointer. Why: 4-lever consolidation; "remember everything → remember nothing". - Verifier-gated learnings — seeded
KNOWLEDGE.mdinstructs prefixing entriesvalidated:(test/build confirmed) vshypothesis:. Why: Reflexion verifiability constraint — no reliable improvement beyond what's objectively verified.
- impeccable house design references (
assets/skills/impeccable/references/house/): bundledfrontend-agent-workflow.md(senior coding-agent workflow) +clouds-f.md(senior front-end orchestration) +clouds-f-rules/*.mdc(design-redesign / responsive / performance / fix / refactor / security keyword routers). impeccable's SKILL.md auto-references them.
- Emphasised
impeccableas THE house design system across the force-load flow (AGENTS.md / CLAUDE.md block,00-force-load.md, sub-folder index, KNOWLEDGE breadcrumb): mandatory for any UI / design / redesign / audit, read withreferences/house/*.
8sync harnessverb — one command to stand up the full agent harness.harness init: deploy mọi bundled skill + codegraph binary + external skill packs (best-effort clone), mirror vàoagents/skills/,codegraph init, seedagents/*memory +CHANGELOG.md, inject force-load vào AGENTS.md/CLAUDE.md- một index gọn vào mọi sub-folder code (progressive disclosure). Có progress
UI
[i/N]+ thời gian.
- một index gọn vào mọi sub-folder code (progressive disclosure). Có progress
UI
harness up: refresh theo state hiện tại (re-inject + refreshagents/KNOWLEDGE.mdbreadcrumb +codegraph index).--loop <dur>chạy foreground;--timer <dur>|offcài/gỡ systemd user timer (đúng cách cho chạy nền, mirror8sync clean --timer).
- 6 bundled skill mới:
ponytail(always-on, lazy-senior YAGNI),code-review-and-quality,senior-security,senior-frontend,full-flow,encore-deploy(on-demand). Trước đó (0.14.x → nội bộ) đã thêmassp-skill,impeccable,taste-skill. Tổng 15 bundled. - Always-on order (đọc top-down, ưu tiên): codegraph → karpathy → ponytail → assp → impeccable → taste → 8sync-cli → image-routing. Inject block dạy rõ cách tận dụng từng skill.
- Tech-gated skills:
encore-deploychỉ hiện trong force-load block khi project dùng Encore (encore.app/encore.dev). - Opt-in skills:
social-growth(chiến dịch social/branding/lead-gen cho FB/YouTube/TikTok, page setup, insight, monthly plan + target) — KHÔNG auto-bật; bật bằng8sync skill add builtin:social-growth. 8sync skill addcollection-aware: clone repo rồi cài mọiskills/<name>/SKILL.md(vdaddyosmani/agent-skills24 skill,ponytailfull);builtin:<name>deploy bundled skill từ embedded assets.- Sub-folder
AGENTS.mdindex +agents/KNOWLEDGE.mdbreadcrumb +CHANGELOG.mdseeding tự động, để agent không bỏ sót rule và tự học theo state dự án.
8sync skill sync→8sync harness init(clean cutover, không giữ alias).skill syncin cảnh báo trỏ sang lệnh mới.crates/cli/src/verbs/skill.rs(~1340 dòng) tách thành module treeverbs/skill/(mod·meta·discover·list·spec·add·gen·deploy·inject·index), mỗi file < 500 dòng. Harness logic ởverbs/harness/(mod·init·up·memory·external).8sync .giờ cũng inject sub-folder index (nearest-AGENTS.md wins).- Binary size target: < 4 MB (binary ~3.8 MB stripped, gồm 15 bundled skill).
- fix(bt): Bluetooth vanishing after cold boot (USB autosuspend).
- clean is project-safe: never touches models / Playwright / download caches.
8sync clean: disk/RAM reclaim + CPU/GPU report + periodic timer.
8sync btbluetooth verb; Caelestia desktop install removed.
- two-tier skill injection (always-on vs on-demand).