{"id":48464344,"url":"https://github.com/tiyagents/tiycode","last_synced_at":"2026-04-23T09:04:51.766Z","repository":{"id":349461672,"uuid":"1179035864","full_name":"TiyAgents/tiycode","owner":"TiyAgents","description":"TiyCode is an AI-first desktop coding agent. 一款践行 AI First 理念的桌面版 Vibe-Coding Agent","archived":false,"fork":false,"pushed_at":"2026-04-14T09:22:37.000Z","size":18132,"stargazers_count":3,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-04-14T11:11:48.980Z","etag":null,"topics":["agent","anthropic","claude","gemini","openai","vibe-coding"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TiyAgents.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-03-11T16:12:00.000Z","updated_at":"2026-04-14T07:02:57.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/TiyAgents/tiycode","commit_stats":null,"previous_names":["tiyagents/tiycode"],"tags_count":45,"template":false,"template_full_name":null,"purl":"pkg:github/TiyAgents/tiycode","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TiyAgents%2Ftiycode","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TiyAgents%2Ftiycode/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TiyAgents%2Ftiycode/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TiyAgents%2Ftiycode/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TiyAgents","download_url":"https://codeload.github.com/TiyAgents/tiycode/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TiyAgents%2Ftiycode/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31799411,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T11:13:53.975Z","status":"ssl_error","status_checked_at":"2026-04-14T11:13:53.299Z","response_time":153,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["agent","anthropic","claude","gemini","openai","vibe-coding"],"created_at":"2026-04-07T04:03:01.657Z","updated_at":"2026-04-14T14:00:57.297Z","avatar_url":"https://github.com/TiyAgents.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./public/app-icon.png\" alt=\"TiyCode logo\" width=\"120\" /\u003e\n  \u003ch1\u003eTiyCode\u003c/h1\u003e\n  \u003cp\u003e\u003cstrong\u003eAn AI-first desktop coding agent.\u003c/strong\u003e\u003c/p\u003e\n  \u003cp\u003eDesigned for a new coding collaboration paradigm. Humans express goals, constraints, and feedback through conversation, while agents take the lead in understanding, execution, and forward progress.\u003c/p\u003e\n  \u003cp\u003e\n    \u003ca href=\"./README_zh.md\"\u003e简体中文\u003c/a\u003e\n  \u003c/p\u003e\n  \u003cbr /\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/e0f3fdb3-58a9-4216-ac6f-f67bb95ee4e5\" alt=\"TiyCode screenshot\" width=\"960\" /\u003e\n\u003c/div\u003e\n\n## Why TiyCode\n\nTiyCode \u003csub\u003e/taɪ koʊd/\u003c/sub\u003e is built for people who want coding to feel native to the AI era. Conversation is not a companion to the workflow here, but the starting point of it. You define goals, constraints, and feedback. The agent understands context, uses tools, and drives execution forward inside a real workspace.\n\nAround that collaboration model, TiyCode brings together Agent Profiles, workspace-based threads, code review, version control, terminal workflows, and an extensible runtime in one local-first desktop product.\n\n## Highlights\n\n- **AI-first coding collaboration.** TiyCode is designed around the idea that humans express intent through conversation while agents take the lead in execution.\n- **Agent Profiles.** Mix models from different providers, tune response style, language, and custom instructions, and switch profiles flexibly for different kinds of work.\n- **Three-tier model architecture.** Each profile supports a Primary model for core reasoning, an Auxiliary model for helper tasks, and a Lightweight model for fast operations — with automatic fallback chains across tiers.\n- **Multi-provider support.** Connect to 13+ LLM providers out of the box — OpenAI, Anthropic, Google, Ollama, xAI, Groq, OpenRouter, DeepSeek, MiniMax, Kimi, and more — or add any OpenAI-compatible endpoint as a custom provider.\n- **Workspace-centered execution.** Threads stay grounded in the local workspace and connect naturally to code review, version control, repository inspection, and terminal workflows.\n- **Real-time execution streaming.** A rich thread stream event system delivers live updates — message deltas, tool calls, reasoning steps, subagent progress, and plan updates — all rendered through purpose-built AI Elements components.\n- **Operator-friendly experience.** Slash commands, smart conversation titles, context compression controls, and commit message generation help the product feel fast and practical in day-to-day use.\n- **Bilingual interface.** Full i18n coverage with English and Simplified Chinese, switchable at any time.\n- **Extensible by design.** Plugins, MCP servers, and Skills are treated as first-class building blocks through the `Extensions Center`.\n- **Built-in runtime path.** The main execution flow is `Frontend -\u003e Rust Core -\u003e BuiltInAgentRuntime -\u003e tiycore -\u003e LLM`.\n\n## Tech Stack\n\n- **Desktop shell:** Tauri 2\n- **Frontend:** React 19, TypeScript, Vite\n- **Backend / native core:** Rust\n- **AI runtime:** [`tiycore`](https://github.com/TiyAgents/tiycore)\n- **UI foundation:** Tailwind CSS v4, shadcn/ui (Radix UI primitives), Vercel AI SDK (UI types), Lucide React icons, Motion animations\n- **Terminal:** xterm.js with addon-fit\n- **Code highlighting:** Shiki\n- **Persistence:** SQLite\n\n## Quick Start\n\n### Install via Homebrew (macOS)\n\n```bash\nbrew tap TiyAgents/tap\nbrew install --cask tiycode\n```\n\nTo upgrade later:\n\n```bash\nbrew upgrade tiycode\n```\n\n### Download from GitHub Releases\n\nPre-built binaries for macOS, Windows, and Linux are available on the [Releases](https://github.com/TiyAgents/tiycode/releases) page.\n\n### Build from Source\n\n#### Prerequisites\n\nBefore running the app, make sure your environment has the toolchain needed for a Tauri 2 project:\n\n- Node.js and npm\n- Rust toolchain\n- Platform dependencies required by Tauri\n\n#### Run in development\n\n```bash\nnpm install\nnpm run dev\n```\n\n#### Run the web UI only\n\n```bash\nnpm install\nnpm run dev:web\n```\n\n#### Build\n\n```bash\nnpm run build\n```\n\n#### Type-check the frontend\n\n```bash\nnpm run typecheck\n```\n\n#### Run Rust tests\n\n```bash\ncargo test --manifest-path src-tauri/Cargo.toml\n```\n\n## Shell Environment Setup\n\nTiyCode's built-in agent shell may launch as a **non-interactive, non-login** shell. In this mode, only minimal system paths (e.g. `/usr/bin:/bin`) are available. Tools installed via version managers — such as `node`, `npm`, `bun`, `cargo`, or `go` — will not be found unless you configure your shell startup files correctly.\n\n### How Shell Config Files Are Loaded\n\nDifferent shell invocation modes load different config files. The table below shows which files are sourced in each mode:\n\n**Zsh (macOS default / Linux)**\n\n| File | Non-interactive | Login | Interactive | Interactive + Login |\n|------|:-:|:-:|:-:|:-:|\n| `~/.zshenv` | ✅ | ✅ | ✅ | ✅ |\n| `~/.zprofile` | ❌ | ✅ | ❌ | ✅ |\n| `~/.zshrc` | ❌ | ❌ | ✅ | ✅ |\n\n**Bash (Linux default)**\n\n| File | Non-interactive | Login | Interactive | Interactive + Login |\n|------|:-:|:-:|:-:|:-:|\n| `~/.bashrc` | ❌ | ❌ | ✅ | ❌ ¹ |\n| `~/.bash_profile` | ❌ | ✅ | ❌ | ✅ |\n| `$BASH_ENV` | ✅ | ❌ | ❌ | ❌ |\n\n\u003csub\u003e¹ Most distros source `~/.bashrc` from `~/.bash_profile`, so in practice it runs for login shells too.\u003c/sub\u003e\n\nTiyCode's agent shell falls into the **non-interactive** column — only `~/.zshenv` (zsh) or `$BASH_ENV` (bash) is guaranteed to load.\n\n### Fix: Ensure Environment Variables Load for All Shell Modes\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003emacOS / Linux (Zsh)\u003c/strong\u003e\u003c/summary\u003e\n\n1. **Move all `export` statements and PATH modifications** from `~/.zshrc` into `~/.zprofile`. Keep interactive-only settings (aliases, completions, oh-my-zsh, themes, prompt) in `~/.zshrc`.\n\n2. **Source `~/.zprofile` from `~/.zshenv`** so that non-interactive shells also get the environment:\n\n```bash\n# ~/.zshenv\nif [ -z \"$__ZPROFILE_LOADED\" ] \u0026\u0026 [ -f \"$HOME/.zprofile\" ]; then\n  export __ZPROFILE_LOADED=1\n  source \"$HOME/.zprofile\"\nfi\n```\n\nThe `__ZPROFILE_LOADED` guard prevents double-loading in login + interactive shells.\n\nCommon items to move into `~/.zprofile`:\n\n```bash\n# ~/.zprofile — examples\neval \"$(/opt/homebrew/bin/brew shellenv)\"           # Homebrew (macOS)\nexport NVM_DIR=\"$HOME/.nvm\"                         # nvm (Node.js)\n[ -s \"$NVM_DIR/nvm.sh\" ] \u0026\u0026 \\. \"$NVM_DIR/nvm.sh\"\nexport BUN_INSTALL=\"$HOME/.bun\"                     # Bun\nexport PATH=\"$BUN_INSTALL/bin:$PATH\"\n. \"$HOME/.local/bin/env\"                            # Rust / Cargo\nexport PATH=\"/usr/local/go/bin:$PATH\"               # Go\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eLinux (Bash)\u003c/strong\u003e\u003c/summary\u003e\n\n1. Keep environment variables in `~/.bash_profile` (or `~/.profile`).\n2. Set `BASH_ENV` to point to a file that sources your profile:\n\n```bash\n# ~/.bash_profile — add at the top:\nexport BASH_ENV=\"$HOME/.bash_env\"\n```\n\n```bash\n# ~/.bash_env — new file\nif [ -z \"$__BASH_PROFILE_LOADED\" ] \u0026\u0026 [ -f \"$HOME/.bash_profile\" ]; then\n  export __BASH_PROFILE_LOADED=1\n  source \"$HOME/.bash_profile\"\nfi\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eWindows (PowerShell)\u003c/strong\u003e\u003c/summary\u003e\n\nOn Windows, TiyCode typically inherits the system and user environment variables set via **System Settings \u003e Environment Variables**. If you installed Node.js, Rust, or other tools via their official installers, they should already be on PATH.\n\nIf you use a version manager like **nvm-windows**, **fnm**, or **volta**, make sure the shim directory is added to your **User PATH** in system environment variables — not only in a PowerShell profile.\n\nTo verify your current PATH in PowerShell:\n\n```powershell\n$env:PATH -split ';'\n```\n\n\u003c/details\u003e\n\n### Verify After Configuration\n\nAfter updating your shell config files, **restart TiyCode** (a full quit + relaunch, not just a new thread) and ask the agent to run:\n\n```\necho $PATH\nwhich \u003cyour-tool\u003e   # e.g. node, cargo, go, bun, python ...\n```\n\nIf the output includes the expected paths and the tool is found, your environment is correctly configured.\n\n## Architecture at a Glance\n\nTiyCode separates UI rendering, desktop orchestration, and agent execution into distinct layers:\n\n```mermaid\nflowchart LR\n  UI[React + TypeScript UI] --\u003e TAURI[Tauri Rust Core]\n  TAURI --\u003e RUNTIME[BuiltInAgentRuntime]\n  RUNTIME --\u003e CORE[tiycore]\n  TAURI --\u003e TOOLS[Workspace / Git / Terminal]\n  TAURI --\u003e EXT[Extension Host]\n  EXT --\u003e PLUGINS[Plugins / MCP / Skills]\n  CORE --\u003e LLM[LLM Providers]\n  TAURI --\u003e DB[(SQLite)]\n  UI -.-\u003e|Thread Stream| TAURI\n```\n\nAt a high level:\n\n1. The **React UI** handles workbench rendering, thread interactions, and streaming updates. AI Elements components render messages, code blocks, reasoning, tool calls, and plans in a purpose-built thread surface.\n2. The **Rust core** is the source of truth for system access, policy decisions, persistence, and performance-sensitive local operations. All settings, threads, and provider configurations are persisted in SQLite.\n3. The **built-in runtime** manages agent sessions, helper orchestration, tool profiles, and event folding. The three-tier model plan (Primary / Auxiliary / Lightweight) is resolved from Agent Profiles at run time.\n4. The **extension host** integrates plugin, MCP, and skill capabilities into the desktop product model, governed by tool gateways, policy checks, and approval boundaries.\n\n## Repository Structure\n\n```text\nsrc/\n  app/           app bootstrap, routing, providers (theme, language), and global styles\n  modules/       domain modules: workbench shell, settings center, marketplace, extensions center\n  features/      platform-facing capabilities: terminal (xterm.js), system metadata\n  components/    AI Elements — message, code-block, reasoning, plan, tool, confirmation, etc.\n  shared/        reusable UI primitives (shadcn/ui), helpers, types, and config\n  services/\n    bridge/      Tauri invoke commands (settings, agents, threads, git, terminal, extensions)\n    thread-stream/  real-time event streaming between Rust core and React UI\n  i18n/          internationalization — English and Simplified Chinese locale files\nsrc-tauri/\n  src/commands/    Rust command modules\n  src/extensions/  extension host, registries, and runtime integration\n  migrations/      database migrations\n  tests/           Rust integration tests\npublic/            static assets\n```\n\n## Development Commands\n\n```bash\nnpm run dev        # Start the full Tauri desktop app\nnpm run dev:web    # Start the Vite frontend only\nnpm run build      # Build the desktop app\nnpm run build:web  # Type-check and bundle web assets\nnpm run typecheck  # Run TypeScript validation\ncargo test --manifest-path src-tauri/Cargo.toml\ncargo fmt --manifest-path src-tauri/Cargo.toml\n```\n\n## Extensions Model\n\nTiyCode treats extensibility as a first-class part of the desktop workbench.\n\n- **Plugins** provide locally installed extension packages with hooks, tools, commands, and skill packs.\n- **MCP** is modeled as its own extension category and managed by the Rust host.\n- **Skills** act as reusable agent capability assets and are indexed from builtin, workspace, or plugin sources.\n\nThese capabilities are surfaced through the `Extensions Center`, while runtime access is still governed by the host through tool gateways, policy checks, approvals, and audit boundaries.\n\n## Current Project Status\n\nThe repository already contains a substantial desktop shell, workbench UI, settings center, built-in runtime path, Git drawer, and extension architecture. At the same time, it should still be read as an actively evolving project rather than a polished end-user release with a fully documented packaged distribution flow.\n\nThat means the best use cases today are:\n\n1. Evaluating the architecture and product direction.\n2. Running the desktop app locally from source.\n3. Extending the workbench, runtime, or extension system as a contributor.\n\n## License\n\nThis project is licensed under the Apache License 2.0. See `LICENSE` for details.\n\n## Acknowledgements\n\nThis project was inspired by the following projects and tools:\n\n- [pi-mono](https://github.com/badlogic/pi-mono)\n- [nanobot](https://github.com/HKUDS/nanobot)\n- [lobe-icons](https://github.com/lobehub/lobe-icons)\n- Codex\n- ClaudeCode\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftiyagents%2Ftiycode","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftiyagents%2Ftiycode","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftiyagents%2Ftiycode/lists"}