{"id":43452217,"url":"https://github.com/everruns/bashkit","last_synced_at":"2026-04-14T06:08:17.142Z","repository":{"id":335772561,"uuid":"1146339724","full_name":"everruns/bashkit","owner":"everruns","description":"Virtual Bash interpreter with a virtual file system for multi-tenant environments.","archived":false,"fork":false,"pushed_at":"2026-04-13T20:54:43.000Z","size":9018,"stargazers_count":116,"open_issues_count":17,"forks_count":9,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-13T21:20:51.452Z","etag":null,"topics":["agents","bash","everruns"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/everruns.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-01-31T00:05:52.000Z","updated_at":"2026-04-13T19:23:59.000Z","dependencies_parsed_at":null,"dependency_job_id":"9076f3aa-2380-48b7-968e-949156ec1385","html_url":"https://github.com/everruns/bashkit","commit_stats":null,"previous_names":["everruns/bashkit"],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/everruns/bashkit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/everruns%2Fbashkit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/everruns%2Fbashkit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/everruns%2Fbashkit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/everruns%2Fbashkit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/everruns","download_url":"https://codeload.github.com/everruns/bashkit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/everruns%2Fbashkit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31782872,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T02:24:21.117Z","status":"ssl_error","status_checked_at":"2026-04-14T02:24:20.627Z","response_time":153,"last_error":"SSL_read: 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":["agents","bash","everruns"],"created_at":"2026-02-03T02:19:13.350Z","updated_at":"2026-04-14T06:08:17.136Z","avatar_url":"https://github.com/everruns.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Bashkit\n\n[![CI](https://github.com/everruns/bashkit/actions/workflows/ci.yml/badge.svg)](https://github.com/everruns/bashkit/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![Crates.io](https://img.shields.io/crates/v/bashkit.svg)](https://crates.io/crates/bashkit)\n[![docs.rs](https://img.shields.io/docsrs/bashkit)](https://docs.rs/bashkit)\n[![Repo: Agent Friendly](https://img.shields.io/badge/Repo-Agent%20Friendly-blue)](AGENTS.md)\n\nAwesomely fast virtual sandbox with bash and file system. Written in Rust.\n\n## Features\n\n- **Secure by default** - No process spawning, no filesystem access, no network access unless explicitly enabled. [250+ threats](specs/006-threat-model.md) analyzed and mitigated\n- **POSIX compliant** - Substantial IEEE 1003.1-2024 Shell Command Language compliance\n- **Sandboxed, in-process execution** - All 160 commands reimplemented in Rust, no `fork`/`exec`\n- **Virtual filesystem** - InMemoryFs, OverlayFs, MountableFs with optional RealFs backend (`realfs` feature)\n- **Resource limits** - Command count, loop iterations, function depth, output size, filesystem size, parser fuel\n- **Network allowlist** - HTTP access denied by default, per-domain control\n- **Multi-tenant isolation** - Each interpreter instance is fully independent\n- **Custom builtins** - Extend with domain-specific commands\n- **LLM tool contract** - `BashTool` with discovery metadata, streaming output, and system prompts\n- **Scripted tool orchestration** - Compose ToolDef+callback pairs into multi-tool bash scripts (`scripted_tool` feature)\n- **MCP server** - Model Context Protocol endpoint via `bashkit mcp`\n- **Async-first** - Built on tokio\n- **Language bindings** - Python (PyO3) and JavaScript/TypeScript (NAPI-RS) for Node.js, Bun, and Deno\n- **Experimental: Git support** - Virtual git operations on the virtual filesystem (`git` feature)\n- **Experimental: Python support** - Embedded Python interpreter via [Monty](https://github.com/pydantic/monty) (`python` feature)\n- **Experimental: TypeScript support** - Embedded TypeScript interpreter via [ZapCode](https://github.com/TheUncharted/zapcode) (`typescript` feature)\n\n## Install\n\n```bash\ncargo add bashkit\n```\n\nOr add to `Cargo.toml`:\n\n```toml\n[dependencies]\nbashkit = \"0.1\"\n```\n\nOptional features:\n\n```bash\ncargo add bashkit --features git              # Virtual git operations\ncargo add bashkit --features python           # Embedded Python interpreter\ncargo add bashkit --features typescript       # Embedded TypeScript interpreter\ncargo add bashkit --features realfs           # Real filesystem backend\ncargo add bashkit --features scripted_tool    # Tool orchestration framework\n```\n\n## Quick Start\n\n```rust\nuse bashkit::Bash;\n\n#[tokio::main]\nasync fn main() -\u003e anyhow::Result\u003c()\u003e {\n    let mut bash = Bash::new();\n    let result = bash.exec(\"echo hello world\").await?;\n    println!(\"{}\", result.stdout); // \"hello world\\n\"\n    Ok(())\n}\n```\n\n## LLM Tool Contract\n\n`BashTool` follows the toolkit-library contract: builder for reusable config,\nimmutable tool metadata for discovery, and single-use executions for each call.\n\n```rust\nuse bashkit::{BashTool, Tool};\nuse futures::StreamExt;\n\n# #[tokio::main]\n# async fn main() -\u003e anyhow::Result\u003c()\u003e {\nlet tool = BashTool::builder()\n    .username(\"agent\")\n    .hostname(\"sandbox\")\n    .build();\n\nprintln!(\"{}\", tool.description());\nprintln!(\"{}\", tool.system_prompt());\n\nlet execution = tool.execution(serde_json::json!({\n    \"commands\": \"printf 'hello\\nworld\\n'\"\n}))?;\nlet mut stream = execution.output_stream().expect(\"stream available\");\n\nlet handle = tokio::spawn(async move { execution.execute().await });\nwhile let Some(chunk) = stream.next().await {\n    println!(\"{}: {}\", chunk.kind, chunk.data);\n}\n\nlet output = handle.await??;\nassert_eq!(output.result[\"stdout\"], \"hello\\nworld\\n\");\n# Ok(())\n# }\n```\n\n## Overview\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://www.youtube.com/watch?v=0rIGX7mSlMg\"\u003e\n    \u003cimg src=\"assets/overview-thumb.jpg\" alt=\"Watch the overview video\" width=\"600\"\u003e\n    \u003cbr\u003e\n    \u003cstrong\u003e▶ Watch the 10-minute overview\u003c/strong\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n## Built-in Commands (160)\n\n| Category | Commands |\n|----------|----------|\n| Core | `echo`, `printf`, `cat`, `nl`, `read`, `mapfile`, `readarray` |\n| Navigation | `cd`, `pwd`, `ls`, `tree`, `find`, `pushd`, `popd`, `dirs` |\n| Flow control | `true`, `false`, `exit`, `return`, `break`, `continue`, `test`, `[` |\n| Variables | `export`, `set`, `unset`, `local`, `shift`, `source`, `.`, `eval`, `readonly`, `times`, `declare`, `typeset`, `let`, `alias`, `unalias` |\n| Shell | `bash`, `sh` (virtual re-invocation), `:`, `trap`, `caller`, `getopts`, `shopt`, `command`, `type`, `which`, `hash`, `compgen`, `fc`, `help` |\n| Text processing | `grep`, `rg`, `sed`, `awk`, `jq`, `head`, `tail`, `sort`, `uniq`, `cut`, `tr`, `wc`, `paste`, `column`, `diff`, `comm`, `strings`, `tac`, `rev`, `seq`, `expr`, `fold`, `expand`, `unexpand`, `join`, `iconv` |\n| File operations | `mkdir`, `mktemp`, `mkfifo`, `rm`, `cp`, `mv`, `touch`, `chmod`, `chown`, `ln`, `rmdir`, `realpath`, `readlink`, `split` |\n| File inspection | `file`, `stat`, `less` |\n| Archives | `tar`, `gzip`, `gunzip`, `zip`, `unzip` |\n| Byte tools | `od`, `xxd`, `hexdump`, `base64` |\n| Checksums | `md5sum`, `sha1sum`, `sha256sum` |\n| Utilities | `sleep`, `date`, `basename`, `dirname`, `timeout`, `wait`, `watch`, `yes`, `kill`, `bc`, `clear` |\n| Disk | `df`, `du` |\n| Pipeline | `xargs`, `tee` |\n| System info | `whoami`, `hostname`, `uname`, `id`, `env`, `printenv`, `history` |\n| Data formats | `csv`, `json`, `yaml`, `tomlq`, `template`, `envsubst` |\n| Network | `curl`, `wget` (requires allowlist), `http` |\n| DevOps | `assert`, `dotenv`, `glob`, `log`, `retry`, `semver`, `verify`, `parallel`, `patch` |\n| Experimental | `python`, `python3` (requires `python` feature), `ts`, `typescript`, `node`, `deno`, `bun` (requires `typescript` feature), `git` (requires `git` feature) |\n\n## Shell Features\n\n- Variables and parameter expansion (`$VAR`, `${VAR:-default}`, `${#VAR}`, `${var@Q}`, case conversion `${var^^}`)\n- Command substitution (`$(cmd)`, `` `cmd` ``)\n- Arithmetic expansion (`$((1 + 2))`, `declare -i`, `let`)\n- Pipelines and redirections (`|`, `\u003e`, `\u003e\u003e`, `\u003c`, `\u003c\u003c\u003c`, `2\u003e\u00261`, `\u0026\u003e`)\n- Control flow (`if`/`elif`/`else`, `for`, `while`, `until`, `case` with `;;`/`;\u0026`/`;;\u0026`, `select`)\n- Functions (POSIX and bash-style) with dynamic scoping, FUNCNAME stack, `caller`\n- Indexed arrays (`arr=(a b c)`, `${arr[@]}`, `${#arr[@]}`, slicing, `+=`)\n- Associative arrays (`declare -A map=([key]=val)`)\n- Nameref variables (`declare -n`)\n- Brace expansion (`{a,b,c}`, `{1..10}`, `{01..05}`)\n- Glob expansion (`*`, `?`) and extended globs (`@()`, `?()`, `*()`, `+()`, `!()`)\n- Glob options (`dotglob`, `nullglob`, `failglob`, `nocaseglob`, `globstar`)\n- Here documents (`\u003c\u003cEOF`, `\u003c\u003c-EOF` with tab stripping, `\u003c\u003c\u003c` here-strings)\n- Process substitution (`\u003c(cmd)`, `\u003e(cmd)`)\n- Coprocesses (`coproc`)\n- Background execution (`\u0026`) with `wait`\n- Shell options (`set -euxo pipefail`, `shopt`)\n- Alias expansion\n- Trap handling (`trap cmd EXIT`, `trap cmd ERR`)\n- `[[ ]]` conditionals with regex matching (`=~`, BASH_REMATCH)\n\n## Configuration\n\n```rust\nuse bashkit::{Bash, ExecutionLimits, InMemoryFs};\nuse std::sync::Arc;\n\nlet limits = ExecutionLimits::new()\n    .max_commands(1000)\n    .max_loop_iterations(10000)\n    .max_function_depth(100);\n\nlet mut bash = Bash::builder()\n    .fs(Arc::new(InMemoryFs::new()))\n    .env(\"HOME\", \"/home/user\")\n    .cwd(\"/home/user\")\n    .limits(limits)\n    .build();\n```\n\n### Virtual Identity\n\nConfigure the virtual username and hostname for `whoami`, `hostname`, `id`, and `uname`:\n\n```rust\nlet mut bash = Bash::builder()\n    .username(\"deploy\")      // Sets whoami, id, and $USER env var\n    .hostname(\"my-server\")   // Sets hostname, uname -n\n    .build();\n\n// whoami → \"deploy\"\n// hostname → \"my-server\"\n// id → \"uid=1000(deploy) gid=1000(deploy)...\"\n// echo $USER → \"deploy\"\n```\n\n## Experimental: Git Support\n\nEnable the `git` feature for virtual git operations on the virtual filesystem.\nAll git data lives in the VFS — no host filesystem access.\n\n```toml\n[dependencies]\nbashkit = { version = \"0.1\", features = [\"git\"] }\n```\n\n```rust\nuse bashkit::{Bash, GitConfig};\n\nlet mut bash = Bash::builder()\n    .git(GitConfig::new()\n        .author(\"Deploy Bot\", \"deploy@example.com\"))\n    .build();\n\n// Local operations: init, add, commit, status, log\n// Branch operations: branch, checkout, diff, reset\n// Remote operations: remote add/remove, clone/push/pull/fetch (virtual mode)\n```\n\nSee [specs/010-git-support.md](specs/010-git-support.md) for the full specification.\n\n## Experimental: Python Support\n\nEnable the `python` feature to embed the [Monty](https://github.com/pydantic/monty) Python interpreter (pure Rust, Python 3.12).\nPython code runs in-memory with configurable resource limits and VFS bridging — files created\nby bash are readable from Python and vice versa.\n\n```toml\n[dependencies]\nbashkit = { version = \"0.1\", features = [\"python\"] }\n```\n\n```rust\nuse bashkit::Bash;\n\nlet mut bash = Bash::builder().python().build();\n\n// Inline code\nbash.exec(\"python3 -c \\\"print(2 ** 10)\\\"\").await?;\n\n// Script files from VFS\nbash.exec(\"python3 /tmp/script.py\").await?;\n\n// VFS bridging: pathlib.Path operations work with the virtual filesystem\nbash.exec(r#\"python3 -c \"\nfrom pathlib import Path\nPath('/tmp/data.txt').write_text('hello from python')\n\"\"#).await?;\nbash.exec(\"cat /tmp/data.txt\").await?; // \"hello from python\"\n```\n\nStdlib modules: `math`, `re`, `pathlib`, `os` (getenv/environ), `sys`, `typing`.\nLimitations: no `open()` (use `pathlib.Path`), no network, no classes, no third-party imports.\nSee [crates/bashkit/docs/python.md](crates/bashkit/docs/python.md) for the full guide.\n\n## Experimental: TypeScript Support\n\nEnable the `typescript` feature to embed the [ZapCode](https://github.com/TheUncharted/zapcode) TypeScript interpreter (pure Rust, no V8).\nTypeScript code runs in-memory with configurable resource limits and VFS bridging via external function suspend/resume.\n\n```toml\n[dependencies]\nbashkit = { version = \"0.1\", features = [\"typescript\"] }\n```\n\n```rust\nuse bashkit::Bash;\n\nlet mut bash = Bash::builder().typescript().build();\n\n// Inline code (ts, node, deno, bun aliases all work)\nbash.exec(\"ts -c \\\"console.log(2 ** 10)\\\"\").await?;\nbash.exec(\"node -e \\\"console.log('hello')\\\"\").await?;\n\n// Script files from VFS\nbash.exec(\"ts /tmp/script.ts\").await?;\n\n// VFS bridging: readFile/writeFile async functions\nbash.exec(r#\"ts -c \"await writeFile('/tmp/data.txt', 'hello from ts')\"#).await?;\nbash.exec(\"cat /tmp/data.txt\").await?; // \"hello from ts\"\n```\n\nCompat aliases (`node`, `deno`, `bun`) and unsupported-mode hints are configurable:\n\n```rust\nuse bashkit::{Bash, TypeScriptConfig};\n\n// Only ts/typescript, no compat aliases\nlet bash = Bash::builder()\n    .typescript_with_config(TypeScriptConfig::default().compat_aliases(false))\n    .build();\n```\n\nLimitations: no `import`/`require`, no `eval()`, no network, no `process`/`Deno`/`Bun` globals.\nSee [crates/bashkit/docs/typescript.md](crates/bashkit/docs/typescript.md) for the full guide.\n\n## Virtual Filesystem\n\n```rust\nuse bashkit::{InMemoryFs, OverlayFs, MountableFs, FileSystem};\nuse std::sync::Arc;\n\n// Layer filesystems\nlet base = Arc::new(InMemoryFs::new());\nlet overlay = Arc::new(OverlayFs::new(base));\n\n// Mount points\nlet mut mountable = MountableFs::new(Arc::new(InMemoryFs::new()));\nmountable.mount(\"/data\", Arc::new(InMemoryFs::new()));\n```\n\n## CLI Usage\n\n```bash\n# Run a script\nbashkit run script.sh\n\n# Interactive REPL\nbashkit repl\n\n# MCP server (Model Context Protocol)\nbashkit mcp\n\n# Mount real filesystem (read-only or read-write)\nbashkit run script.sh --mount-ro /data\nbashkit run script.sh --mount-rw /workspace\n```\n\n## Development\n\n```bash\njust build        # Build project\njust test         # Run tests\njust check        # fmt + clippy + test\njust pre-pr       # Pre-PR checks\n```\n\n## LLM Eval Results\n\nBashkit includes an [eval harness](crates/bashkit-eval/) that measures how well LLMs use bashkit as a bash tool in agentic workloads — 58 tasks across 15 categories.\n\n| Model | Score | Tasks Passed | Tool Call Success | Duration |\n|-------|-------|-------------|-------------------|----------|\n| Claude Haiku 4.5 | **97%** | **54/58** | 88% | 8.6 min |\n| Claude Sonnet 4.6 | 93% | 48/58 | 85% | 20.5 min |\n| Claude Opus 4.6 | 91% | 50/58 | 88% | 20.1 min |\n| GPT-5.3-Codex | 91% | 51/58 | 83% | 19.6 min |\n| GPT-5.2 | 77% | 41/58 | 67% | 7.0 min |\n\n**Delta from v0.1.7** (on shared 37 tasks): Haiku 98%→100%, Opus 93%→96%, GPT-5.2 86%→86% (3 more tasks). Interpreter fixes unblocked `json_to_csv_export` and `script_function_lib` across models. See the [detailed analysis](crates/bashkit-eval/README.md#results).\n\n```bash\njust eval                    # Run eval with default model\njust eval-save               # Run and save results\n```\n\n## Benchmarks\n\nBashkit includes a benchmark tool to compare performance against bash and just-bash.\n\n```bash\njust bench              # Quick benchmark run\njust bench --save       # Save results with system identifier\njust bench-verbose      # Detailed output\njust bench-list         # List all benchmarks\n```\n\nSee [crates/bashkit-bench/README.md](crates/bashkit-bench/README.md) for methodology and assumptions.\n\n## Language Bindings\n\n### Python\n\nPython bindings with LangChain integration are available in [crates/bashkit-python](crates/bashkit-python/README.md).\n\n```python\nfrom bashkit import BashTool\n\ntool = BashTool()\nprint(tool.description())\nprint(tool.help())\nresult = await tool.execute(\"echo 'Hello, World!'\")\nprint(result.stdout)\n```\n\n### JavaScript / TypeScript\n\nNAPI-RS bindings for Node.js, Bun, and Deno. Available as `@everruns/bashkit` on npm.\n\n```typescript\nimport { BashTool } from '@everruns/bashkit';\n\nconst tool = new BashTool({ username: 'agent', hostname: 'sandbox' });\nconst result = await tool.execute(\"echo 'Hello, World!'\");\nconsole.log(result.stdout);\n\n// Direct VFS access\nawait tool.writeFile('/tmp/data.txt', 'hello');\nconst content = await tool.readFile('/tmp/data.txt');\n```\n\nPlatform matrix: macOS (x86_64, aarch64), Linux (x86_64, aarch64), Windows (x86_64), WASM.\nSee [crates/bashkit-js](crates/bashkit-js/) for details.\n\n## Security\n\nBashkit is built for running untrusted scripts from AI agents and users. Security is a core design goal, not an afterthought.\n\n### Defense in Depth\n\n| Layer | Protection |\n|-------|------------|\n| **No process spawning** | All 160 commands are reimplemented in Rust — no `fork`, `exec`, or shell escape |\n| **Virtual filesystem** | Scripts see an in-memory FS by default; no host filesystem access unless explicitly mounted |\n| **Network allowlist** | HTTP access is denied by default; each domain must be explicitly allowed |\n| **Resource limits** | Configurable caps on commands (10K), loop iterations (100K), function depth (100), output (10MB), input (10MB) |\n| **Filesystem limits** | Max total bytes (100MB), max file size (10MB), max file count (10K) — prevents zip bombs, tar bombs, and append floods |\n| **Parser limits** | Timeout (5s), fuel budget (100K ops), AST depth (100) — prevents pathological input from hanging the interpreter |\n| **Multi-tenant isolation** | Each `Bash` instance is fully isolated — no shared state between tenants |\n| **Panic recovery** | All builtins wrapped in `catch_unwind` — a panic in one command doesn't crash the host |\n| **Path traversal prevention** | RealFs backend canonicalizes paths to prevent `../../etc/passwd` escapes |\n| **Unicode security** | 68 byte-boundary tests across builtins; zero-width character rejection in VFS paths |\n\n### Threat Model\n\n60+ identified threats across 11 categories (DoS, sandbox escape, info disclosure, injection, network, isolation, internal errors, git, logging, Python, Unicode) — each with a stable ID, mitigation status, and test coverage.\n\nSee the [threat model](specs/006-threat-model.md) for the full analysis and [security policy](SECURITY.md) for reporting vulnerabilities.\n\n## Other Virtual Bash Implementations\n\n- **[just-bash](https://github.com/vercel-labs/just-bash)** (TypeScript, Apache-2.0) — Virtual bash interpreter for AI agents by Vercel Labs. Custom recursive descent parser, 75+ reimplemented commands (including full awk/sed/jq), in-memory VFS, defense-in-depth sandboxing, AST transform plugins. Runs in Node.js and browser.\n- **[gbash](https://github.com/ewhauser/gbash)** (Go, Apache-2.0) — Deterministic, sandbox-only bash runtime for AI agents. Delegates parsing to `mvdan/sh`. Registry-backed commands, policy enforcement, structured tracing, JSON-RPC server mode.\n\n## Acknowledgments\n\nBashkit is an independent implementation that draws design inspiration from several open source projects:\n\n- **[just-bash](https://github.com/vercel-labs/just-bash)** (Vercel Labs, Apache-2.0) — Pioneered the idea of a virtual bash interpreter for AI-powered environments. Bashkit's sandboxing architecture and multi-tenant design was inspired by their approach.\n- **[Oils](https://github.com/oilshell/oil)** (Andy Chu, Apache-2.0) — Comprehensive bash compatibility testing approach inspired our spec test methodology.\n- **[One True AWK](https://github.com/onetrueawk/awk)** (Lucent Technologies) — AWK language semantics reference for our awk builtin.\n- **[jq](https://github.com/jqlang/jq)** (Stephen Dolan, MIT) — jq query syntax and behavior reference. Our implementation uses the [jaq](https://github.com/01mf02/jaq) Rust crates.\n\nNo code was copied from any of these projects. See [NOTICE](NOTICE) for full details.\n\n## Contributing\n\nThe best way to contribute is to [open an issue](https://github.com/everruns/bashkit/issues) — bug reports, feature requests, and questions all help improve bashkit. If you'd like to contribute code, see [CONTRIBUTING.md](CONTRIBUTING.md) for setup and workflow details.\n\n## Ecosystem\n\nBashkit is part of the [Everruns](https://everruns.com) ecosystem.\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feverruns%2Fbashkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feverruns%2Fbashkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feverruns%2Fbashkit/lists"}