{"id":48736868,"url":"https://github.com/tavakkoliamirmohammad/tash-shell","last_synced_at":"2026-04-19T00:13:49.129Z","repository":{"id":84204586,"uuid":"429740850","full_name":"tavakkoliamirmohammad/tash-shell","owner":"tavakkoliamirmohammad","description":" A modern Unix shell written in C++ — pipes, redirection, job control, scripting, aliases, and command substitution.","archived":false,"fork":false,"pushed_at":"2026-04-12T04:04:39.000Z","size":142,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-04-12T04:23:21.812Z","etag":null,"topics":["cli","cpp","unix","unix-shell"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tavakkoliamirmohammad.png","metadata":{"files":{"readme":"README.md","changelog":"history.cpp","contributing":null,"funding":null,"license":null,"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":null,"dco":null,"cla":null}},"created_at":"2021-11-19T09:30:55.000Z","updated_at":"2026-04-12T03:26:19.000Z","dependencies_parsed_at":"2023-05-23T23:00:34.374Z","dependency_job_id":null,"html_url":"https://github.com/tavakkoliamirmohammad/tash-shell","commit_stats":null,"previous_names":["tavakkoliamirmohammad/tash-shell"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/tavakkoliamirmohammad/tash-shell","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tavakkoliamirmohammad%2Ftash-shell","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tavakkoliamirmohammad%2Ftash-shell/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tavakkoliamirmohammad%2Ftash-shell/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tavakkoliamirmohammad%2Ftash-shell/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tavakkoliamirmohammad","download_url":"https://codeload.github.com/tavakkoliamirmohammad/tash-shell/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tavakkoliamirmohammad%2Ftash-shell/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31704492,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-11T21:17:31.016Z","status":"online","status_checked_at":"2026-04-12T02:00:06.763Z","response_time":58,"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":["cli","cpp","unix","unix-shell"],"created_at":"2026-04-12T05:01:32.525Z","updated_at":"2026-04-19T00:13:49.114Z","avatar_url":"https://github.com/tavakkoliamirmohammad.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tash — A Modern Unix Shell\n\nA feature-rich Unix shell written in C++ with syntax highlighting, autosuggestions, smart completions, and a Catppuccin color palette. Built as a deep exploration of systems programming — from `fork`/`exec` to signal handling to interactive line editing.\n\n[![GitHub stars](https://img.shields.io/github/stars/tavakkoliamirmohammad/tash-shell?style=social)](https://github.com/tavakkoliamirmohammad/tash-shell/stargazers)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Build](https://github.com/tavakkoliamirmohammad/tash-shell/actions/workflows/build.yml/badge.svg)](https://github.com/tavakkoliamirmohammad/tash-shell/actions)\n[![Tests](https://img.shields.io/badge/tests-779%20passing-brightgreen)](https://github.com/tavakkoliamirmohammad/tash-shell/actions)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/tavakkoliamirmohammad/tash-shell/pulls)\n\n\u003c!-- TODO: Replace with actual screenshot/GIF of tash in action --\u003e\n![tash demo](docs/screenshot.png)\n\n## Highlights\n\n- **Syntax highlighting** — commands glow green if valid, red if not, as you type\n- **Autosuggestions** — gray ghost text from history, press `Right` to accept\n- **\"Did you mean?\"** — typo `gti` suggests `git` via Damerau-Levenshtein distance\n- **Smart completions** — Tab completes builtins, PATH commands, git/docker subcommands, `$VAR` names, plus **1,700+ commands** via Fish + Fig/Amazon Q completion providers and `--help` parsing as a fallback\n- **Configurable themes** — 5 bundled palettes (Catppuccin Mocha/Latte, Tokyo Night, Dracula, Nord), switch live with `theme set \u003cname\u003e`\n- **Plugin architecture** — completion, prompt, history, and hook providers with a priority-based registry (Starship prompt, SQLite history, AI error recovery, safety net, alias reminders…)\n- **AI powered** — `@ai` generates commands, explains errors, writes scripts; `?` suffix routes natural-language questions; automatic AI error recovery on failed commands (Gemini, OpenAI, or Ollama)\n- **Smart history** — SQLite-backed with context (cwd, exit code, duration, hostname); `history --here`, `history --failed`, `history stats`; Atuin bridge\n- **Structured pipelines** — `|\u003e` operator with `where`, `sort-by`, `select`, `to-table`, `to-json`, `to-csv` for JSON data\n- **Block-style output + rich rendering** — collapsible command blocks, OSC 8 clickable URLs, auto-detected tables with Unicode box-drawing\n- **Safety net** — destructive-command detection (`rm -rf /`, `git push --force`, `dd`, `mkfs`…) with confirm prompts\n- **Sessions + config sync** — save/restore named sessions (cwd, aliases, env); git-based config sync across machines\n- **POSIX coverage** — heredocs (`\u003c\u003c`, `\u003c\u003c-`, quoted), subshells `(cmd; cmd)`, per-segment pipeline redirections, `trap` for signals + EXIT\n- **779 automated tests** — Google Test suite (24 unit + 41 integration files) plus libFuzzer parser harness with coverage gate\n\n## Features\n\n| Category | Features |\n|----------|----------|\n| **Interactive** | Syntax highlighting, autosuggestions (ghost text), `Tab` completion, `Right` to accept hint, `Alt+Right` to accept one word, `Alt+.` to insert last argument |\n| **Completions** | Builtins, PATH, `$VAR`, **Fish** completions (1,056 commands), **Fig/Amazon Q** specs (715 commands), `--help` parsing fallback, `cd`/`pushd` dirs-only, `kill`/`bgkill`/`bgstop`/`bgstart` PID list |\n| **Execution** | Pipes (`\\|`), command substitution (`$(cmd)`), script execution (`tash script.sh`), **subshells** `(cmd; cmd)`, **structured `\\|\u003e`** pipelines for JSON |\n| **Redirection** | stdout (`\u003e`, `\u003e\u003e`), stdin (`\u003c`), stderr (`2\u003e`, `2\u003e\u00261`), **heredocs** (`\u003c\u003c`, `\u003c\u003c-`, `\u003c\u003c'DELIM'`), per-segment pipeline redirections |\n| **Operators** | `\u0026\u0026` (and), `\\|\\|` (or), `;` (sequential), `\\|\u003e` (structured) |\n| **Variables** | `$VAR`, `${VAR}`, `$?` (exit status), `$$` (PID), `export`, `unset` |\n| **Expansion** | Glob (`*`, `?`, `[...]`), tilde (`~`), command substitution (`$(...)`) |\n| **Navigation** | `cd`, `cd -`, `pushd`/`popd`/`dirs`, **auto-cd** (type directory name), **`z`** (frecency jump) |\n| **Job Control** | `bg`, `fg`, `bglist`, `bgkill`, `bgstop`, `bgstart`, POSIX **`trap`** (signals + EXIT) |\n| **Aliases** | `alias ll='ls -la'`, `unalias`, expansion before execution, **smart reminders** when you forget to use one |\n| **History** | **SQLite-backed** `~/.tash/history.db` with context (cwd, exit code, duration, hostname), `history --here`, `history --failed`, `history stats`, Atuin bridge, dedup, ignore-space, `!!`, `!n`, arrow navigation |\n| **Multiline** | Auto-continue on unclosed quotes or trailing `\\|`/`\u0026\u0026`, backslash continuation |\n| **Prompt** | Two-line prompt with git branch, dirty/clean status (`+*?`), exit code indicator (green/red `❯`), command duration; **Starship** auto-integration; built-in block-style output with collapsible command blocks |\n| **Themes** | 5 bundled palettes (Catppuccin Mocha/Latte, Tokyo Night, Dracula, Nord); `theme list`, `theme set \u003cname\u003e`, `theme preview`; TOML theme files |\n| **Rich output** | OSC 8 **clickable URLs**, auto-detected tables rendered with Unicode box-drawing, markdown export |\n| **AI** | `@ai \u003canything\u003e` — multi-provider (Gemini/OpenAI/Ollama), streaming output, conversation memory, `@ai config`; **`?` suffix** routes natural-language queries (`find all python files?`); **automatic error recovery** — AI explains failed commands and suggests a one-keypress fix |\n| **Clipboard** | `copy`/`paste` builtins via OSC 52, works over SSH and inside tmux; pbcopy/xclip/wl-copy fallbacks; multi-line paste confirmation |\n| **Sessions** | `tash --persist \u003cname\u003e` / `--attach` / `--sessions` / `--kill` — save/restore cwd, aliases, and env vars |\n| **Config** | `~/.tashrc` loaded on startup, XDG-aware paths (`~/.tash/`, `$XDG_CONFIG_HOME`), **git-based config sync** across machines (`tash sync init/remote/push/pull/diff`) |\n| **Plugin system** | `ICompletionProvider`, `IPromptProvider`, `IHistoryProvider`, `IHookProvider` — priority-based registry dispatches to all registered providers |\n| **Safety** | **Destructive-command detection** (`rm -rf /`, `git push --force`, `dd`, `mkfs`, `chmod -R 777`…), Ctrl+D protection (double-press), bracketed paste, SIGINT handling |\n| **Tooling** | `tash --benchmark` startup profiler, `explain \u003ccmd\u003e` inline docs for 30+ commands, built-in fuzzy finder (no fzf dependency) |\n| **Platform** | Linux (Ubuntu, Fedora, Alpine) and macOS (Intel + ARM) |\n\n## Quick Start\n\n```sh\n# Build\ncmake -B build \u0026\u0026 cmake --build build\n\n# Run\n./build/tash.out\n```\n\n### Prerequisites\n\n- **libcurl 7.61+** (required — powers AI features) and **libsqlite3** (optional — for smart history) — available out of the box on every supported platform: AlmaLinux 8+, Alpine 3.19+, Ubuntu 22.04+, macOS 14+\n- The build system fetches [replxx](https://github.com/AmokHuginnsson/replxx), [nlohmann/json](https://github.com/nlohmann/json), and [Google Test](https://github.com/google/googletest) automatically via CMake FetchContent\n\n```sh\n# Ubuntu/Debian\nsudo apt install libcurl4-openssl-dev libsqlite3-dev nlohmann-json3-dev\n\n# Fedora/RHEL/Rocky/Alma\nsudo dnf install libcurl-devel sqlite-devel json-devel\n\n# Alpine\napk add curl-dev sqlite-dev nlohmann-json\n\n# Arch\nsudo pacman -S curl sqlite nlohmann-json\n\n# macOS — included with Xcode Command Line Tools\nxcode-select --install\n```\n\n\u003e `install.sh` runs the right `apt`/`dnf`/`apk`/`pacman`/`brew` command automatically when it falls back to a source build, so most users don't need to run any of the above by hand.\n\n### Install System-Wide\n\nLatest tagged release (stable):\n\n```sh\ncurl -sSL https://raw.githubusercontent.com/tavakkoliamirmohammad/tash-shell/master/install.sh | bash\n```\n\nRolling snapshot of the latest `master` build (bleeding edge):\n\n```sh\ncurl -sSL https://raw.githubusercontent.com/tavakkoliamirmohammad/tash-shell/master/install.sh | TASH_USE_MASTER=1 bash\n```\n\nPrebuilt binaries are published for:\n\n| Artifact | Runs on |\n|---|---|\n| `tash-linux-amd64` | Ubuntu 20.04+, Debian 11+, Fedora 30+, RHEL/Rocky/Alma 8+, Amazon Linux 2023, Arch (glibc ≥ 2.28) |\n| `tash-linux-arm64` | Same distros on arm64 — Raspberry Pi 64-bit, AWS Graviton, ARM servers |\n| `tash-macos-arm64` | Apple Silicon (M1/M2/M3/M4), macOS 14+ — also used on Intel Macs via Rosetta 2 |\n\nAny other platform falls back to a source build (`install.sh` auto-installs the needed dev headers first).\n\nOr download the binary directly from the [`master-latest` pre-release](https://github.com/tavakkoliamirmohammad/tash-shell/releases/tag/master-latest) — refreshed on every push to `master`.\n\nOr with Homebrew (latest tagged release, or `--HEAD` for bleeding-edge master):\n```sh\nbrew install --formula Formula/tash.rb         # stable\nbrew install --HEAD --formula Formula/tash.rb  # latest master\n```\n\nAfter install, verify which features got compiled in:\n```sh\ntash --version\n# tash 2.0.0\n# features: +ai +sqlite-history +fish-completion +fig-completion +manpage-completion +clipboard +themes +trap +heredocs +subshells\n```\nA `-ai` or `-sqlite-history` token means the dev headers weren't present at build time — `install.sh` will flag this and tell you what to install.\n\n## Usage\n\n```\n╭─ amir in ~/projects/tash on  master [*?]\n❯ ls | grep cpp | wc -l\n       6\n\n╭─ amir in ~/projects/tash on  master\n❯ gti status\ngti: No such file or directory\ntash: did you mean 'git'?\n\n╭─ amir in ~/projects/tash on  master\n❯ echo \"today is $(date +%A)\"\ntoday is Friday\n\n╭─ amir in ~/projects/tash on  master took 3.2s\n❯ /tmp                          # auto-cd: just type a directory\n/private/tmp\n\n╭─ amir in /private/tmp on  master\n❯ z proj                        # frecency jump to most-visited match\n/Users/amir/projects\n\n╭─ amir in ~/projects on  master\n❯ export NAME=world \u0026\u0026 echo $NAME\nworld\n```\n\n### AI Features\n\nTash includes AI features with support for **Google Gemini** (free), **OpenAI**, and **Ollama** (local). Just type `@ai` followed by anything in natural language.\n\n```\n╭─ amir in ~/projects on  master\n❯ @ai find all files larger than 100MB\ntash ai ─\nfind . -type f -size +100M\n\n╭─ amir in ~/projects on  master\n❯ gcc -o main main.c\nmain.c:1:10: fatal error: 'stdio.h' file not found\n\n╭─ amir in ~/projects on  master [1]\n❯ @ai explain this error\ntash ai ─\nThe compiler can't find 'stdio.h'. Install the development headers:\n  sudo apt install build-essential    # Linux\n  xcode-select --install              # macOS\n\n╭─ amir in ~/projects on  master\n❯ @ai what does tar -xzvf archive.tar.gz\ntash ai ─\n  -x  extract files from archive\n  -z  decompress through gzip\n  -v  verbose — list files as they're extracted\n  -f  use the specified archive file\n\n╭─ amir in ~/projects on  master\n❯ @ai write a script to backup my home directory\ntash ai ─\n  #!/bin/bash\n  tar -czf /tmp/home_backup_$(date +%F).tar.gz ~/\n  echo \"Backup complete\"\n\n╭─ amir in ~/projects on  master\n❯ @ai how do I set up SSH keys for GitHub\ntash ai ─\n  1. Generate key: ssh-keygen -t ed25519 -C \"you@email.com\"\n  2. Start agent: eval \"$(ssh-agent -s)\"\n  3. Add key: ssh-add ~/.ssh/id_ed25519\n  4. Copy public key: cat ~/.ssh/id_ed25519.pub\n  5. Go to GitHub → Settings → SSH Keys → New SSH Key → paste\n```\n\n| Command | Description |\n|---------|-------------|\n| `@ai \u003canything\u003e` | Ask the AI anything — commands, explanations, scripts, guidance. It figures out what you need. |\n| `@ai config` | Configure provider, model, API keys, and view status. |\n| `@ai clear` | Clear conversation history. |\n| `@ai on` / `@ai off` | Enable or disable AI features. |\n\n#### Setting Up a Provider\n\nRun `@ai config` to interactively choose your provider and set API keys:\n\n**Gemini (free):**\n1. Go to [aistudio.google.com/apikey](https://aistudio.google.com/apikey)\n2. Sign in, click \"Create API Key\", copy it\n3. Run `@ai config` → option 3 → paste key\n\n**OpenAI:**\n1. Go to [platform.openai.com/api-keys](https://platform.openai.com/api-keys)\n2. Create an API key\n3. Run `@ai config` → option 1 → type `openai` → option 3 → paste key\n\n**Ollama (local, free):**\n1. Install Ollama: [ollama.com](https://ollama.com)\n2. Run `ollama serve` and `ollama pull qwen3.5:0.8b`\n3. Run `@ai config` → option 1 → type `ollama`\n\n#### Conversation Memory\n\nThe AI remembers context within a session — ask follow-up questions naturally:\n\n```\n❯ @ai find files larger than 100MB\n❯ @ai now delete them\n❯ @ai clear     # reset conversation when done\n```\n\n## Keyboard Shortcuts\n\n| Key | Action |\n|-----|--------|\n| `Tab` | Complete command, file, git/docker subcommand, or `$VAR` |\n| `Right` | Accept the gray autosuggestion (at end of line) |\n| `Alt+Right` | Accept one word from the autosuggestion |\n| `Alt+.` | Insert the last argument of the previous command |\n| `Up/Down` | Navigate command history |\n| `Ctrl+R` | Reverse search through history |\n| `Ctrl+L` | Clear screen |\n| `Ctrl+C` | Cancel current input / kill foreground process |\n| `Ctrl+D` | Exit shell (press twice) |\n\n## Built-in Commands\n\n| Command | Description |\n|---------|-------------|\n| `cd [dir]` | Change directory. `cd -` returns to previous. `cd ~` goes home. |\n| `z \u003cpattern\u003e` | Jump to most-visited directory matching pattern (frecency). |\n| `pwd` | Print current directory. |\n| `exit` | Exit the shell. |\n| `history` | Show command history. `!!` repeats last, `!n` repeats nth. |\n| `export VAR=val` | Set environment variable. No args lists all. |\n| `unset VAR` | Remove environment variable. |\n| `alias name='cmd'` | Create alias. No args lists all. |\n| `unalias name` | Remove alias. |\n| `source file` | Execute file in current shell (`. file` also works). |\n| `which cmd` | Find command location or identify builtins. |\n| `type cmd` | Same as `which`. |\n| `clear` | Clear screen (Ctrl+L also works). |\n| `bg cmd` | Run command in background. |\n| `fg [n]` | Bring background job to foreground. |\n| `bglist` | List background jobs. |\n| `bgkill n` | Kill background job n. |\n| `bgstop n` | Stop background job n. |\n| `bgstart n` | Resume background job n. |\n| `pushd dir` | Push directory onto stack and cd. |\n| `popd` | Pop directory from stack and cd. |\n| `dirs` | Show directory stack. |\n| `trap 'cmd' SIG...` | POSIX signal/EXIT handler. `trap` lists, `trap - SIG` resets, `trap '' SIG` ignores. Recognizes EXIT, HUP, INT, QUIT, TERM, USR1, USR2. |\n| `theme list\\|set \u003cname\u003e\\|preview` | List, switch, or preview color themes. |\n| `explain \u003ccmd\u003e [args]` | Explain a command and its flags (built-in docs for 30+ commands). |\n| `copy [text]` / `paste` | Clipboard via OSC 52 (or `pbcopy`/`xclip`/`wl-copy` fallback). Pipe in or out. |\n| `linkify` / `table` / `block` | Rich output helpers — hyperlink URLs, render tables, collapsible command blocks. |\n| `session save\\|list\\|rm\\|load \u003cname\u003e` | Persist and restore shell state (cwd, aliases, env). |\n| `config [get\\|set\\|sync...]` | Manage config and git-based config sync across machines. |\n| `@ai \u003cquestion\u003e` | AI-powered assistant — ask anything in natural language. |\n| `\u003cquestion\u003e?` | Trailing `?` routes a natural-language query to the AI (e.g., `find all python files larger than 1MB?`). |\n\n## Configuration\n\ntash reads a small JSON config at `~/.tash/config.json` (or `$TASH_DATA_HOME/config.json` / `$XDG_DATA_HOME/tash/config.json` when those are set). The file is optional; unknown fields are ignored, so it stays forward-compatible.\n\n```json\n{\n  \"plugins\":  { \"disabled\": [\"safety\", \"fish\"] },\n  \"log_level\": \"info\"\n}\n```\n\n- `plugins.disabled` — list of bundled provider names to skip during startup (e.g. `safety`, `alias-suggest`, `ai-error-recovery`, `fish`, `fig`, `manpage`, `starship`, `sqlite-history`). Unknown names print a warning and are ignored.\n- `log_level` — default log verbosity. `TASH_LOG_LEVEL` in the environment overrides this field.\n\n## Architecture\n\n```\nInput → Replxx (highlighting + hints + completion)\n  → History Expansion (!! / !n)\n  → @ai interception (→ LLM API if AI command)\n  → Multiline Continuation (unclosed quotes, trailing |/\u0026\u0026)\n  → Parse Operators (\u0026\u0026, ||, ;)\n  → For each command:\n      Expand Variables ($VAR, $?, $$)\n      → Command Substitution $(...)\n      → Parse Redirections (\u003e, \u003e\u003e, \u003c, 2\u003e, 2\u003e\u00261)\n      → Tokenize → Strip Quotes → Expand Aliases\n      → Expand Globs → Auto-cd check\n      → Dispatch: Builtin table | Background | Pipeline | fork/exec\n      → \"Did you mean?\" on exit code 127\n```\n\n## Color Palette\n\nTash uses the [Catppuccin Mocha](https://catppuccin.com) palette — a warm, soothing dark theme:\n\n| Element | Color | Catppuccin Name |\n|---------|-------|-----------------|\n| Valid command | `#a6e3a1` | Green |\n| Builtin command | `#94e2d5` | Teal |\n| Invalid command | `#f38ba8` | Red |\n| Strings | `#f9e2af` | Yellow |\n| Variables | `#89dceb` | Sky |\n| Operators | `#cba6f7` | Mauve |\n| Redirections | `#fab387` | Peach |\n| Comments | `#6c7086` | Overlay0 |\n| Banner | `#b4befe` | Lavender |\n| Git branch | `#cba6f7` | Mauve |\n| Prompt arrow (ok) | `#a6e3a1` | Green |\n| Prompt arrow (err) | `#f38ba8` | Red |\n\n## Testing\n\n```sh\ncmake -B build -DBUILD_TESTS=ON\ncmake --build build\nctest --test-dir build --output-on-failure -V\n```\n\n779 tests across 65 test files (24 unit + 41 integration) using Google Test:\n- **Core shell** — tokenizer, parser, variable/command expansion, redirections, heredocs, subshells, per-segment pipeline redirections, operators, aliases, auto-cd, `z` frecency, glob edges, unicode paths\n- **Builtins** — full matrix of the builtin dispatch table, plus focused suites for `cd`, `source`, `pushd/popd`, `history`, `trap`, `session`, `copy`/`paste`, `explain`, `theme`, `config sync`\n- **Process \u0026 signals** — fork/exec, job control edges, SIGCHLD stress (many short jobs, cap-fill-and-drain), signal handling robustness\n- **Plugins** — registry dispatch/priority/dedup, Fish + Fig completion parsers, man-page `--help` fallback, SQLite history (record, search, migration, large history), themes, Starship, alias reminders, safety hook, AI error recovery\n- **UI** — fuzzy finder scoring, inline docs, block renderer, rich output (OSC 8 + tables), startup benchmark, clipboard (base64 + OSC 52 + multi-line detection)\n- **AI** — parser, key management, Gemini/OpenAI/Ollama JSON builders/parsers, LLM factory, rate limiter, retry logic, context suggestions, `?` suffix routing, live-provider smoke tests\n- **Property + stress** — parser property tests, bulletproofing pass (stress + unicode + property), libFuzzer parser harness with a coverage threshold gate in CI\n\n## Contributing\n\nContributions are welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for how to get started.\n\nIf you find Tash useful, please consider giving it a star — it helps others discover the project.\n\n## License\n\nMIT License — Copyright (c) 2020 Amir Mohammad Tavakkoli\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftavakkoliamirmohammad%2Ftash-shell","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftavakkoliamirmohammad%2Ftash-shell","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftavakkoliamirmohammad%2Ftash-shell/lists"}