{"id":47617292,"url":"https://github.com/merchantprotocol/sulla-desktop","last_synced_at":"2026-04-30T06:02:03.861Z","repository":{"id":335188242,"uuid":"1144549042","full_name":"merchantprotocol/sulla-desktop","owner":"merchantprotocol","description":"Business-ready AI agent desktop app. Easy to install, free to run. Built with Electron and Lima VM.","archived":false,"fork":false,"pushed_at":"2026-04-23T06:28:14.000Z","size":112804,"stargazers_count":3,"open_issues_count":42,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-23T09:36:54.278Z","etag":null,"topics":["ai","ai-agent","desktop-app","electron","llm"],"latest_commit_sha":null,"homepage":"https://sulladesktop.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/merchantprotocol.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"docs/roadmap/capture-studio-plan.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE.md","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-28T19:35:55.000Z","updated_at":"2026-04-23T03:41:07.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/merchantprotocol/sulla-desktop","commit_stats":null,"previous_names":["sulla-ai/desktop","sulla-ai/sulla-desktop","merchantprotocol/sulla-desktop"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/merchantprotocol/sulla-desktop","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merchantprotocol%2Fsulla-desktop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merchantprotocol%2Fsulla-desktop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merchantprotocol%2Fsulla-desktop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merchantprotocol%2Fsulla-desktop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/merchantprotocol","download_url":"https://codeload.github.com/merchantprotocol/sulla-desktop/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merchantprotocol%2Fsulla-desktop/sbom","scorecard":{"id":1242643,"data":{"date":"2026-01-29T14:06:32Z","repo":{"name":"github.com/sulla-ai/desktop","commit":"5049358085558cd644afe15a0d7f132935294095"},"scorecard":{"version":"v5.3.0","commit":"c22063e786c11f9dd714d777a687ff7c4599b600"},"score":3.3,"checks":[{"name":"CI-Tests","score":-1,"reason":"no pull request found","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#ci-tests"}},{"name":"Maintained","score":0,"reason":"project was created within the last 90 days. Please review its contents carefully","details":["Warn: Repository was created within the last 90 days."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":0,"reason":"dangerous workflow patterns detected","details":["Warn: script injection with untrusted input ' github.head_ref ': .github/workflows/go-work-sync.yaml:77"],"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#dangerous-workflow"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: detected update tool: Dependabot: .github/dependabot.yml:1"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#dependency-update-tool"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'packages' permission set to 'read': .github/workflows/codeql.yaml:26","Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql.yaml:29","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql.yaml:30","Info: jobLevel 'contents' permission set to 'read': .github/workflows/go-work-sync.yaml:24","Info: jobLevel 'contents' permission set to 'read': .github/workflows/package.yaml:143","Info: jobLevel 'contents' permission set to 'read': .github/workflows/package.yaml:196","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/release-merge-to-main.yaml:32","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/smoke-test.yaml:24","Info: jobLevel 'contents' permission set to 'read': .github/workflows/spelling.yml:81","Info: jobLevel 'pull-requests' permission set to 'read': .github/workflows/spelling.yml:82","Info: jobLevel 'actions' permission set to 'read': .github/workflows/spelling.yml:83","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/upgrade-generate.yaml:56","Info: topLevel 'contents' permission set to 'read': .github/workflows/bats.yaml:46","Warn: no topLevel permission defined: .github/workflows/codeql.yaml:1","Warn: no topLevel permission defined: .github/workflows/docker-cli-monitor.yaml:1","Warn: topLevel 'contents' permission set to 'write': .github/workflows/go-work-sync.yaml:14","Warn: topLevel 'contents' permission set to 'write': .github/workflows/k3s-versions.yaml:8","Warn: no topLevel permission defined: .github/workflows/linux-e2e.yaml:1","Warn: no topLevel permission defined: .github/workflows/linux-release.yaml:1","Warn: no topLevel permission defined: .github/workflows/macM1-e2e.yaml:1","Warn: no topLevel permission defined: .github/workflows/package.yaml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/paths-ignore.yaml:36","Warn: topLevel 'contents' permission set to 'write': .github/workflows/rddepman.yaml:8","Warn: topLevel 'packages' permission set to 'write': .github/workflows/rdx-host-api-tests.yaml:11","Info: found token with 'none' permissions: .github/workflows/release-merge-to-main.yaml:1","Info: topLevel permissions set to 'read-all': .github/workflows/scorecard.yml:16","Warn: no topLevel permission defined: .github/workflows/screenshot.yaml:1","Info: found token with 'none' permissions: .github/workflows/smoke-test.yaml:1","Info: found token with 'none' permissions: .github/workflows/spelling.yml:1","Info: found token with 'none' permissions: .github/workflows/test.yaml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/upgrade-generate.yaml:5","Warn: no topLevel permission defined: .github/workflows/windows-e2e.yaml:1"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#token-permissions"}},{"name":"SAST","score":10,"reason":"SAST tool detected: CodeQL","details":["Info: SAST configuration detected: CodeQL","Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":9,"reason":"dependency not pinned by hash detected -- score normalized to 9","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/spelling.yml:123: update your workflow using https://app.stepsecurity.io/secureworkflow/sulla-ai/desktop/spelling.yml/main?enable=pin","Warn: goCommand not pinned by hash: .github/workflows/test.yaml:21","Info:  72 out of  73 GitHub-owned GitHubAction dependencies pinned","Info:   6 out of   6 third-party GitHubAction dependencies pinned","Info:   1 out of   2 goCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#signed-releases"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#license"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#packaging"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":0,"reason":"18 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2018-66 / GHSA-562c-5r94-xh97","Warn: Project is vulnerable to: PYSEC-2019-179 / GHSA-5wv5-4vpf-pj6m","Warn: Project is vulnerable to: PYSEC-2023-62 / GHSA-m2qf-hxjv-5gpq","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x","Warn: Project is vulnerable to: GHSA-73rr-hh4g-fpgx","Warn: Project is vulnerable to: GHSA-5j98-mcp5-4vw2","Warn: Project is vulnerable to: GHSA-mh29-5h37-fv8m","Warn: Project is vulnerable to: GHSA-xxjr-mmjv-4gpg","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-7fh5-64p2-3v2j","Warn: Project is vulnerable to: GHSA-6rw7-vpxm-498p","Warn: Project is vulnerable to: GHSA-34x7-hfp2-rc4v","Warn: Project is vulnerable to: GHSA-8qq5-rm4j-mr97","Warn: Project is vulnerable to: GHSA-r6q2-hw4h-h46w","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-4v9v-hfq4-rm2v","Warn: Project is vulnerable to: GHSA-9jgg-88mc-972h"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#vulnerabilities"}},{"name":"Contributors","score":10,"reason":"project has 27 contributing companies or organizations","details":["Info: found contributions from: Incanta, LearningDrupal7Development, Masterminds, Perl, Perl-Toolchain-Gang, RedwoodMMO, SUSE, SeesePlusPlus, Stackato-Apps, Stackato-Garage, UrLab, acorn-io, argoproj, check-spelling, cloudfoundry-incubator, garnercorp, incanta @redwoodmmo, istio, lima-vm, marketing \u0026 dev for 2+ decades, mind, perl-libwin32, rancher, rancher labs @ suse, rancher-sandbox, suse, suse @rancher"],"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#contributors"}}]},"last_synced_at":"2026-01-30T02:45:06.647Z","repository_id":335188242,"created_at":"2026-01-30T02:45:06.648Z","updated_at":"2026-01-30T02:45:06.648Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32456167,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T22:27:22.272Z","status":"online","status_checked_at":"2026-04-30T02:00:05.929Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","ai-agent","desktop-app","electron","llm"],"created_at":"2026-04-01T21:38:37.212Z","updated_at":"2026-04-30T06:02:03.855Z","avatar_url":"https://github.com/merchantprotocol.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/merchantprotocol/sulla-desktop/main/resources/icons/logo-sulla-desktop-nobg.png\" alt=\"Sulla Desktop\" width=\"200\" /\u003e\n  \u003cp\u003e\u003cstrong\u003eYour private AI executive assistant that runs on your machine.\u003c/strong\u003e\u003c/p\u003e\n  \u003cp\u003eFree to use, desktop-native autonomous agent with persistent memory, calendar engine, Docker workspaces, and automation — all yours to own and extend.\u003c/p\u003e\n  \u003cp\u003e\n    \u003ca href=\"https://github.com/merchantprotocol/sulla-desktop/releases/latest\"\u003e\n      \u003cimg src=\"https://img.shields.io/github/v/release/merchantprotocol/sulla-desktop?label=Latest\u0026color=green\" alt=\"Latest Release\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"LICENSE\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/License-Apache%202.0%20%2B%20Commons%20Clause-blue.svg\" alt=\"Apache 2.0 + Commons Clause\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/merchantprotocol/sulla-desktop/stargazers\"\u003e\n      \u003cimg src=\"https://img.shields.io/github/stars/merchantprotocol/sulla-desktop?style=flat\u0026color=yellow\" alt=\"GitHub Stars\" /\u003e\n    \u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n\u003e [!TIP]\n\u003e Install with a single command:\n\u003e ```\n\u003e curl -fsSL https://sulladesktop.com/install.sh | sh\n\u003e ```\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./docs/sulla-desktop-screen.png\" alt=\"Sulla Desktop\" width=\"600\" /\u003e\n\u003c/div\u003e\n\n---\n\nDesigned for automation enthusiasts, vibe coders, business owners, agency owners, and operators who want more output without more hours or headcount. No subscriptions. No cloud lock-in. **Runs 100% locally** with llama.cpp and open-source models — or connect any remote API. Your choice.\n\n## The Subconscious Agent System\n\n### Just-in-Time Thinking\n\nTraditional AI assistants dump everything into one massive system prompt and hope for the best. Sulla works differently — it thinks the way you do.\n\nWhile the primary agent handles your conversation, a parallel layer of **subconscious agents** runs quietly in the background, each handling a specific cognitive task. The most important is **memory recall**: like human memory, it scans the current context each turn and pulls in relevant facts, skills, and documents from long-term storage — just in time, not all at once.\n\nThis means the agent starts lean. Instead of a bloated prompt trying to explain everything upfront, Sulla teaches the agent to be **resourceful** — to locate the information it needs, when it needs it.\n\n```\n┌─────────────────────────────────────────────────┐\n│                  YOUR CONVERSATION              │\n│                                                 │\n│  You: \"Schedule a deploy for Friday and         │\n│        notify the team on Slack\"                │\n│                                                 │\n│  ┌─────────────┐                                │\n│  │ Primary     │  Handles your request          │\n│  │ Agent       │  directly                      │\n│  └──────┬──────┘                                │\n│         │                                       │\n│ ── ── ──│── ── ── ── ── ── ── ── ── ── ── ── ──│\n│  SUBCONSCIOUS LAYER (parallel, every turn)      │\n│         │                                       │\n│         ├──► Memory Recall                      │\n│         │    Loads: deploy runbook, Slack        │\n│         │    channel IDs, team preferences      │\n│         │                                       │\n│         ├──► Short-Term Memory Distillation      │\n│         │    Summarizes old messages, prunes     │\n│         │    irrelevant turns, frees context     │\n│         │                                       │\n│         └──► Observational Memory               │\n│              Extracts facts, updates identity    │\n│              files, removes stale observations   │\n│                                                 │\n│  ┌─────────────┐                                │\n│  │ Primary     │  Now has everything it needs    │\n│  │ Agent       │  without being told upfront     │\n│  └─────────────┘                                │\n└─────────────────────────────────────────────────┘\n```\n\nThe result: a lightweight agent that **gets smarter with every turn** instead of a heavy one that starts slow and forgets fast.\n\n### Observational Memory\n\nEvery conversation is full of important details — preferences, decisions, project context, deadlines — that vanish the moment a chat ends. Sulla doesn't let that happen.\n\nA dedicated **observation agent** monitors every conversation in the background, watching for facts worth keeping. It scores them by importance, writes the high-value ones to a global memory store, and quietly removes observations that have gone stale. The next time you open a chat — any chat, with any agent — those facts are already there.\n\nThis is why Sulla never feels like a blank slate. Every conversation picks up where the last one left off, even across different agents and topics.\n\nThe observation agent also distills long-running patterns into **identity files** — persistent documents that capture who you are, how you work, and what matters to you. These aren't chat logs; they're living summaries that stay current as your observations accumulate. Important context is never buried in a scroll-back — it's promoted into your identity so every agent starts with a real understanding of you.\n\n```\n┌─────────────────────────────────────────────────┐\n│              CONVERSATION IN PROGRESS            │\n│                                                  │\n│  You: \"Use the staging cluster, not prod —       │\n│        we burned a deploy last week\"             │\n│                                                  │\n│ ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ──│\n│  OBSERVATION AGENT (background, continuous)       │\n│                                                  │\n│  1. Detect   \"staging not prod\" = high-value     │\n│              \"burned a deploy\"  = context/why     │\n│                                                  │\n│  2. Store    ┌──────────────────────────────┐    │\n│              │ Global Memory                │    │\n│              │                              │    │\n│              │ + \"Deploy to staging only     │    │\n│              │    — prod deploy incident     │    │\n│              │    last week\"          [new]  │    │\n│              │                              │    │\n│              │ - \"API key rotates monthly\"   │    │\n│              │              [stale, removed] │    │\n│              └──────────────────────────────┘    │\n│                                                  │\n│  3. Promote  ┌──────────────────────────────┐    │\n│              │ Identity Files               │    │\n│              │                              │    │\n│              │ preferences.md               │    │\n│              │   \"Prefers staging-first      │    │\n│              │    deploys, risk-averse       │    │\n│              │    after recent incident\"     │    │\n│              └──────────────────────────────┘    │\n│                                                  │\n│ ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ──│\n│  NEXT CONVERSATION (any agent, any topic)        │\n│                                                  │\n│  Agent already knows: use staging, not prod      │\n│  No one had to say it again.                     │\n└─────────────────────────────────────────────────┘\n```\n\n### Context Window Management\n\nLLMs have a fixed context window. Most agents ignore this until they hit the wall — then the conversation dies or the model starts hallucinating. Sulla manages it proactively.\n\nA **short-term memory agent** watches your message thread as it grows. Older messages accumulate a **staleness score** — the further back they are and the less relevant they are to the current task, the higher they score. When the thread gets heavy, the agent acts:\n\n- **Irrelevant messages** are pruned entirely\n- **Aging messages with useful facts** are summarized and distilled down to just the key information\n- **Recent and active messages** are left untouched\n\nThe effect is a context window that **breathes**. Instead of filling up and crashing, it stays lean — always leaving room for the agent to focus on what you're working on right now, while retaining every fact that still matters.\n\nYou never hit the wall. You never lose a conversation mid-task. The chat just keeps going.\n\n```\n┌─────────────────────────────────────────────────┐\n│  CONTEXT WINDOW                                  │\n│                                                  │\n│  Without management:                             │\n│  ┌───────────────────────────────────────────┐   │\n│  │██████████████████████████████████████████ │   │\n│  │ msg msg msg msg msg msg msg msg msg msg   │   │\n│  │ msg msg msg msg msg msg msg msg msg msg   │   │\n│  │ msg msg msg msg msg msg ████ LIMIT HIT ██ │   │\n│  └───────────────────────────────────────────┘   │\n│  Agent chokes. Conversation dies.                │\n│                                                  │\n│                                                  │\n│  With short-term memory agent:                   │\n│  ┌───────────────────────────────────────────┐   │\n│  │                                           │   │\n│  │  [summary: project setup, deploy target]  │   │\n│  │  [summary: auth flow decided, JWT + vault]│   │\n│  │  ·  ·  ·  pruned  ·  ·  ·                │   │\n│  │  msg msg msg msg msg msg                  │   │\n│  │  msg msg ← current task                   │   │\n│  │                     ▓▓▓▓▓ FREE SPACE ▓▓▓▓ │   │\n│  └───────────────────────────────────────────┘   │\n│  Agent stays fast. Conversation keeps going.     │\n│                                                  │\n│                                                  │\n│  How staleness scoring works:                    │\n│                                                  │\n│  Turn 1  ████████████░  high staleness → prune   │\n│  Turn 5  ██████░░░░░░░  moderate → summarize     │\n│  Turn 12 ██░░░░░░░░░░░  low → summarize          │\n│  Turn 30 ░░░░░░░░░░░░░  current → keep as-is     │\n│                                                  │\n└─────────────────────────────────────────────────┘\n```\n\n## Sandboxed Environment\n\nSulla runs natively on your desktop — macOS, Windows, and Linux — with a one-command install. But under the hood, the agent doesn't run on your host machine. It runs inside a **containerized virtual machine**.\n\nYour user directory is mounted into the sandbox so the agent can work with your files, but it cannot reach outside that boundary. It can't modify system files, install packages on your host, or accidentally break your OS. The attack surface is dramatically smaller than any agent running directly on your machine.\n\nDocker runs inside the container alongside the agent, giving it the ability to spin up and manage containers for your projects. An **extensions library** provides one-click recipes for common services — CRMs, media editing tools, local AI models — that the agent can deploy and control to tackle your tasks. It can also run its own models for speech-to-text, vision, text-to-speech, and more, all swappable, giving both you and your agent flexibility for vibe-coding and beyond.\n\n```\n┌─────────────────────────────────────────────────┐\n│  YOUR MACHINE (host)                             │\n│                                                  │\n│  ┌────────────────────────────────────────────┐  │\n│  │  SANDBOXED VM                              │  │\n│  │                                            │  │\n│  │  ┌──────────┐  ┌──────────┐  ┌──────────┐ │  │\n│  │  │ Sulla    │  │ Docker   │  │ Extensions│ │  │\n│  │  │ Agent    │  │ Engine   │  │ Library   │ │  │\n│  │  └──────────┘  └──────────┘  └──────────┘ │  │\n│  │                                            │  │\n│  │  ┌──────────────────────────────────────┐  │  │\n│  │  │  ~/your-files (mounted, read/write)  │  │  │\n│  │  └──────────────────────────────────────┘  │  │\n│  │                                            │  │\n│  │  ✗ No access to system files               │  │\n│  │  ✗ No access to other user accounts        │  │\n│  │  ✗ No host-level package installation      │  │\n│  └────────────────────────────────────────────┘  │\n└─────────────────────────────────────────────────┘\n```\n\n## Security\n\n### Encrypted Password Vault\n\nSulla includes a built-in **password manager** with AES-256 encryption at rest. When the vault is locked, nobody — not even the agent — can access your credentials. They are only decrypted in memory when you need them.\n\nThe vault also watches the browser. When it detects a login form, it offers to save those credentials automatically. From there, you control exactly how much access the agent gets:\n\n- **Full access** — the agent can read and use credentials directly\n- **Autofill only** — credentials are injected *after* the agent makes a request, so the agent never handles your secrets directly. They never appear in logs, conversation history, or tool call outputs\n\nThis means your API keys, passwords, and tokens stay on your machine, encrypted, and out of the agent's context.\n\n### System Lock\n\nSulla locks when you log out. Your personal assistant, vault, and all stored credentials are inaccessible until you authenticate again.\n\n## Chromium Browser\n\nSulla ships with a **full Chromium browser** built in — not a webview wrapper, a real browser instance. Most browser agents are limited to a fixed set of commands: click here, type there, scroll down. Sulla isn't restricted like that.\n\nThe agent can **execute arbitrary JavaScript** directly inside any webpage. It can take a screenshot to see what's on screen, send real mouse clicks and keystrokes, *and* inject its own scripts to read, modify, or automate anything on the page. There's no predefined command list boxing it in — if you can do it in a browser console, the agent can do it too.\n\n- **Unrestricted JavaScript execution** — run any script directly in the page, not just predefined actions\n- **Screenshots and visual understanding** — the agent sees what you see and reasons about it\n- **Trusted keyboard and mouse events** — websites accept them as real user input, not synthetic automation\n- **Page visibility** — full DOM access, text extraction, and image recognition on any page\n- **Browse history awareness** — context about where you've been, accessible to the agent\n- **Login with saved credentials** — combined with the vault, the agent can authenticate on your behalf\n\nThis gives you a fully **agentic browser experience** with no guardrails on capability. Point it at your social media, your admin dashboards, your SaaS tools — the agent can navigate, fill forms, click buttons, run custom scripts, and execute multi-step workflows across any website, moving as freely as you would.\n\n```\n┌─────────────────────────────────────────────────┐\n│  SULLA BROWSER (Chromium)                        │\n│  ┌───────────┬───────────┬───────────┐          │\n│  │ Tab 1     │ Tab 2     │ Tab 3     │          │\n│  └───────────┴───────────┴───────────┘          │\n│  ┌───────────────────────────────────────────┐  │\n│  │                                           │  │\n│  │         Website loaded                    │  │\n│  │                                           │  │\n│  │  Agent can:                               │  │\n│  │   → Read page content (DOM, text, images) │  │\n│  │   → Execute JavaScript                    │  │\n│  │   → Click, type, scroll (trusted events)  │  │\n│  │   → Fill forms with vault credentials     │  │\n│  │   → Navigate across pages and tabs        │  │\n│  │                                           │  │\n│  └───────────────────────────────────────────┘  │\n│  ┌──────────────────┐                           │\n│  │ Side Panel Chat  │  AI actions in context    │\n│  └──────────────────┘                           │\n└─────────────────────────────────────────────────┘\n```\n\n## Workbench\n\nSulla has two modes. **Easy mode** is the chat and browser — conversational, visual, point-and-click. But behind it is a full **workbench** for when you want to go deeper.\n\nThe workbench gives you direct access to everything the agent creates and stores — files, conversations, logs, configurations — all in standard file formats you can open, edit, and version control. It includes:\n\n- **File explorer** with Monaco code editor and inline diff viewer\n- **Git management** — your entire agent is under version control, so you can track every change, roll back, and branch\n- **Agent builder** — create specialized agents with custom system prompts, specific skill sets, and curated tool access, then deploy them for handling complex domain-specific tasks\n- **Integrated terminal** for direct shell access into the sandboxed environment\n\n```\n┌─────────────────────────────────────────────────┐\n│  WORKBENCH                                       │\n│  ┌──────────┬────────────────────────┬────────┐ │\n│  │ Files    │ Monaco Editor          │ Agent  │ │\n│  │          │                        │ Config │ │\n│  │ agents/  │  system-prompt.md      │        │ │\n│  │ skills/  │  ───────────────       │ Name   │ │\n│  │ tools/   │  You are a social      │ Skills │ │\n│  │ logs/    │  media manager...      │ Tools  │ │\n│  │ convos/  │                        │ Model  │ │\n│  │          │                        │        │ │\n│  ├──────────┴────────────────────────┤ Deploy │ │\n│  │ Terminal    $ git log --oneline   │        │ │\n│  └───────────────────────────────────┴────────┘ │\n└─────────────────────────────────────────────────┘\n```\n\n## Agentic Workflows\n\nMost workflow tools make you wire up API calls and configure every node by hand. Sulla's workflows are different — they're **agentic**.\n\nDrag nodes onto a canvas. Write a plain-language prompt on each one describing what you want that step to do. That's it. No configuration, no field mapping, no API plumbing. An **orchestrating agent** walks through every node in your workflow, reads your prompt, makes decisions, and executes — calling tools, spawning sub-agents, and moving to the next step autonomously.\n\nThis is how you encode **Standard Operating Procedures** into your agent. The orchestrator is forced to follow every step in order — it can't skip ahead, it can't shortcut to the end, it has to walk through your exact process. For long-running, multi-step operations where precision matters, this is how you guarantee the agent does it your way, every time.\n\nAnd you don't have to build them yourself. Sulla creates its own workflows when it identifies repeatable processes — but you always have the ability to go in, edit, reorder, and lock down the steps.\n\nThis is how Sulla's **daily training system** works. Every day, at the same time, a scheduled workflow launches:\n\n1. Multiple agents fan out to review your conversations, logs, and documents\n2. They analyze your stated goals and track progress against them\n3. They update Sulla's own **goal alignment** — creating internal goals derived from yours\n4. Every future conversation is informed by this alignment, so the agent's decisions actively push toward your objectives instead of making generic choices\n\nThe result: an agent that **gets more aligned with you every day**, automatically, without you having to repeat yourself.\n\n```\n┌─────────────────────────────────────────────────┐\n│  WORKFLOW CANVAS                                 │\n│                                                  │\n│  ┌──────────┐    ┌──────────┐    ┌──────────┐  │\n│  │ Trigger  │───►│ Review   │───►│ Extract  │  │\n│  │ Daily 6am│    │ all convos│    │ goals    │  │\n│  └──────────┘    └──────────┘    └─────┬────┘  │\n│                                        │        │\n│                                   ┌────▼────┐   │\n│                                   │ Compare │   │\n│                                   │ to user │   │\n│                                   │ goals   │   │\n│                                   └────┬────┘   │\n│                        ┌───────────────┤        │\n│                   ┌────▼────┐    ┌────▼─────┐  │\n│                   │ Update  │    │ Generate  │  │\n│                   │ agent   │    │ daily     │  │\n│                   │ goals   │    │ report    │  │\n│                   └─────────┘    └──────────┘  │\n│                                                  │\n│  Each node = a prompt. The orchestrator decides  │\n│  how to execute it. No config. No wiring.        │\n└─────────────────────────────────────────────────┘\n```\n\n## Always-On Heartbeat \u0026 Calendar\n\nSulla isn't a tool you open, use, and close. It has a **persistent heartbeat** running in the background that gives it an always-on, always-alive presence on your machine.\n\nThe agent manages its own **calendar** — it can create events, set reminders, and schedule jobs autonomously. Tell it to remind you at 3pm and it will. Tell it to check a deploy status every hour and it will. The calendar isn't just a display — it's an execution engine that triggers the agent to act at the right time.\n\nIf your computer goes to sleep, the heartbeat and event system **wake it back up**. Sulla prevents sleep from killing long-running tasks or missed events. Your scheduled agents, training jobs, and reminders keep firing whether you're at the keyboard or not.\n\n```\n┌─────────────────────────────────────────────────┐\n│  HEARTBEAT (persistent, background)              │\n│                                                  │\n│  ♥ alive ──── ♥ alive ──── ♥ alive ──── ♥       │\n│                                                  │\n│  CALENDAR                                        │\n│  ┌───────────────────────────────────────────┐   │\n│  │ 06:00  Daily training workflow      [auto]│   │\n│  │ 09:00  Check deploy status          [auto]│   │\n│  │ 11:30  \"Remind me to review PR #340\" [you]│   │\n│  │ 15:00  Goal alignment check         [auto]│   │\n│  │ 22:00  Nightly model fine-tune      [auto]│   │\n│  └───────────────────────────────────────────┘   │\n│                                                  │\n│  Computer sleeps → heartbeat wakes it → agent    │\n│  runs the 06:00 training job on time             │\n└─────────────────────────────────────────────────┘\n```\n\n## Self-Improving Training System\n\nSulla doesn't just use models — it **trains them**.\n\nEvery night, a scheduled workflow collects the day's conversations, your documents, and interaction logs, then fine-tunes your local model on that data. The agent literally becomes more like you over time — learning your writing style, your preferences, your decision patterns — through actual model training, not just prompt context.\n\nThis runs entirely on your machine with **100% local models** via llama.cpp. No data leaves your computer. No third-party training APIs. The model that runs tomorrow is better than the one that ran today, and it's yours.\n\nYou can also trigger training manually, review training logs, and manage training datasets from the workbench.\n\n```\n┌─────────────────────────────────────────────────┐\n│  NIGHTLY TRAINING CYCLE                          │\n│                                                  │\n│  ┌──────────┐   ┌──────────┐   ┌──────────┐    │\n│  │ Collect  │──►│ Build    │──►│ Fine-tune│    │\n│  │ convos,  │   │ training │   │ local    │    │\n│  │ docs,    │   │ dataset  │   │ model    │    │\n│  │ logs     │   │ (JSONL)  │   │ (llama.cpp) │    │\n│  └──────────┘   └──────────┘   └─────┬────┘    │\n│                                       │         │\n│                                  ┌────▼─────┐   │\n│                                  │ Tomorrow │   │\n│                                  │ the agent│   │\n│                                  │ is better│   │\n│                                  └──────────┘   │\n│                                                  │\n│  Day 1:  Generic model                           │\n│  Day 7:  Knows your writing style                │\n│  Day 30: Anticipates your decisions              │\n│  Day 90: Thinks like you                         │\n└─────────────────────────────────────────────────┘\n```\n\n## Core Specs\n\n- Chrome-like browser with WebContentsView tabs, side panel chat, and AI context menus\n- Encrypted password vault with autofill, import/export, and Bitwarden-style generator\n- Node-graph workflow editor with parallel execution, loops, and checkpoints\n- Multi-agent system with per-agent integrations, orchestrator escalation, and conversation history\n- Sulla CLI with daemon relay and integration tooling\n- Integrated terminal, Monaco code editor, and Git pane\n- Login/logout system with vault auto-unlock and menu locking\n- Training system — capture conversations and fine-tune models\n- Calendar engine with auto-wake events\n- Docker workspaces with container management and shell access\n- Live monitoring dashboard with per-endpoint graphs\n- Multiple theme presets (default, nord, ocean, protocol) with dark/light modes\n- Runs on consumer hardware (8–16 GB RAM recommended)\n- Source-available (Apache 2.0 + Commons Clause) — fork, extend, own it\n\n## Install\n\nOne command. Works on **macOS**, **Linux**, and **Windows** (Git Bash or WSL).\n\n```bash\ncurl -fsSL https://sulladesktop.com/install.sh | sh\n```\n\n**What it does:**\n1. Downloads the latest pre-built release from GitHub\n2. Installs the app (DMG/ZIP on macOS, MSI on Windows, ZIP on Linux)\n3. Handles macOS Gatekeeper automatically (no \"damaged app\" warnings)\n\nNo build tools required — just `curl`.\n\n\u003e **Developer?** Use `install-dev.sh` to build from source instead.\n\n### Manual install\n\n```bash\ngit clone https://github.com/merchantprotocol/sulla-desktop.git\ncd sulla-desktop\nyarn install\nNODE_OPTIONS=\"--max-old-space-size=12288\" yarn build\nnpx electron .\n```\n\n### After install\n\nStep 1 — Connect any LLM (local llama.cpp or remote API)  \nStep 2 — Start delegating\n\n## Your No-Hassle Ownership Promise\n\n100% source-available. No subscriptions. No usage caps. No data sharing.\nInstall it, run it, modify it — it’s yours.\n\n## Frequently Asked Questions\n\n**How much hardware do I need?**  \n8 GB RAM minimum (runs well), 16 GB+ ideal for faster inference. Works on most modern laptops/desktops.\n\n**How fast can I expect real results?**  \nWorkflow velocity and delegation confidence build in 7–30 days of consistent use. Results scale with your task volume.\n\n**Is it fully local?**  \nCore agent, memory, tools, and execution run 100% on your machine. LLM inference can be local (llama.cpp) or remote (your choice for speed/privacy balance).\n\n**How do I extend it?**\nBuild custom workflow nodes, add tool integrations, or create new agent configurations. Everything is modular and documented.\n\n**Who is this really for?**\nAnyone who codes by vibe, runs automations, or has more high-leverage tasks than time — and wants to stop paying specialists to do what their own machine can handle.\n\nInstall Sulla Desktop today.  \nYou deserve an assistant that scales with you, not against you.\n\n— Jonathon Byrdziak  \nCoeur d’Alene, Idaho  \nFounder, Sulla Desktop\n\n## License\n\nForked from Rancher Desktop\u003ca href=\"https://github.com/rancher-sandbox/rancher-desktop\" target=\"_blank\" rel=\"noopener noreferrer nofollow\"\u003e\u003c/a\u003e\nLicensed under Apache 2.0 with the [Commons Clause](LICENSE) restriction. See [LICENSE](LICENSE) for details.\n\n**In short:** You can use, modify, and fork Sulla Desktop freely — including for internal commercial use. You **cannot** rebrand, white-label, or resell it as your own product. See the [Trademark Policy](TRADEMARK.md) for branding requirements.\n\nOriginal copyright: © Rancher Labs, Inc. and contributors.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmerchantprotocol%2Fsulla-desktop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmerchantprotocol%2Fsulla-desktop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmerchantprotocol%2Fsulla-desktop/lists"}