[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-3021":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":23,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":29,"readmeContent":30,"aiSummary":31,"trendingCount":16,"starSnapshotCount":16,"syncStatus":32,"lastSyncTime":33,"discoverSource":34},3021,"kimiflare","sinameraji\u002Fkimiflare","sinameraji","Terminal based coding agent & harness running on your own Cloudflare account. No middleman.","https:\u002F\u002Fkimiflare.com",null,"TypeScript",155,14,1,9,0,6,18,3.53,"MIT License",false,"main",true,[25,26,27,28],"agents","ai","kimi-k26","vibe-coding","2026-06-12 02:00:45","\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Flogo.png\" alt=\"kimiflare\" width=\"180\">\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fkimiflare\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002Fkimiflare?style=flat-square&color=cb3837\" alt=\"npm version\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fkimiflare\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fdm\u002Fkimiflare?style=flat-square&color=cb3837\" alt=\"npm downloads\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fsinameraji\u002Fkimiflare\u002Fblob\u002Fmain\u002FLICENSE\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fsinameraji\u002Fkimiflare?style=flat-square&color=2ea44f\" alt=\"license\">\u003C\u002Fa>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fnode-%3E%3D20-339933?style=flat-square&logo=nodedotjs&logoColor=white\" alt=\"Node.js >= 20\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Ftypescript-5.7-3178c6?style=flat-square&logo=typescript&logoColor=white\" alt=\"TypeScript\">\n  \u003Ca href=\"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fworkers-ai\u002Fmodels\u002Fkimi-k2\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpowered%20by-Kimi%20K2.6-f59e0b?style=flat-square\" alt=\"Powered by Kimi K2.6\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cstrong>A terminal coding agent powered by \u003Ca href=\"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fworkers-ai\u002Fmodels\u002Fkimi-k2\">Kimi K2.6\u003C\u002Fa> on \u003Ca href=\"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fworkers-ai\u002F\">Cloudflare Workers AI\u003C\u002Fa> — with optional routing through your own \u003Ca href=\"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fai-gateway\u002F\">AI Gateway\u003C\u002Fa> for first-class observability, caching, and authoritative cost.\u003C\u002Fstrong>\u003Cbr>\n  All on your Cloudflare account.\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fscreenshot.png\" alt=\"kimiflare TUI\" width=\"900\">\n\u003C\u002Fp>\n\n## How it works\n\nYou bring your own Cloudflare **Account ID** + **API Token**. KimiFlare calls **Workers AI** directly by default — fastest path, fewest moving parts. You can optionally turn on routing through an **AI Gateway** in your account (provisioned or reused on first run) for observability, caching, and cost reporting. Either way, nothing leaves your Cloudflare tenancy.\n\nWith AI Gateway enabled you get this for free:\n\n- **Per-request logs** with full payload, latency, and status — visible in the Cloudflare dashboard\n- **Response caching** with configurable TTL (`\u002Fgateway cache-ttl \u003Cseconds>`)\n- **Authoritative per-turn cost** pulled from the Gateway logs API — no estimates\n- **Cache-hit ratio and per-feature cost breakdown** in `\u002Fcost`\n- **Auto-tagging** of every request with `feature` \u002F `sessionId` \u002F `turnIdx` metadata for downstream attribution\n\n## What to remember\n\n- **262k context window** — Read entire modules, large configs, and full stack traces without the model losing track.\n- **Image understanding** — Drop image paths (PNG, JPG, WebP, GIF, BMP up to 5 MB) into any prompt. Great for UI reviews, diagrams, and screenshots.\n- **Plan \u002F Edit \u002F Auto modes** — `plan` is a whitelist-only research mode: only read-only tools (read, glob, grep, web search, GitHub read-only, browser fetch) are allowed. Writes, edits, mutating bash, MCP tools, and LSP renames are all blocked. `edit` (default) prompts per mutating call. `auto` approves everything for trusted tasks.\n- **Windows support** — OS-aware shell auto-detects `cmd.exe` \u002F PowerShell on Windows, `bash` on Unix. The `bash` tool works out of the box on all platforms.\n- **Message queuing** — Submit multiple messages while the agent is busy; they queue and auto-drain. Escape interrupts the current turn but preserves the queue.\n- **Smart permission modal** — Denying a tool opens inline feedback so you can tell the agent what to do instead. Keyboard-native navigation (`↑\u002F↓`, `j\u002Fk`, `Alt+1\u002F2\u002F3`).\n- **Loop guardrails** — Agent hard-stops when all tools in a turn are blocked, preventing infinite token-burning cycles.\n- **Persistent all-time cost history** — Append-only `history.jsonl` tracks daily usage forever, so `\u002Fcost` shows true all-time and monthly totals that survive across sessions and version updates.\n- **Live, gateway-confirmed cost tracking** — Status bar shows a fast local estimate (`≈$0.12`) that flips to the real, Cloudflare-billed number once the AI Gateway log reconciles. Per-turn latency renders next to cost.\n- **LSP + MCP** — Semantic code intelligence (hover, go-to-definition, references, diagnostics) via Language Server Protocol. Extend with external tools via Model Context Protocol.\n- **Local structured memory** — SQLite + embeddings cross-session memory. The agent recalls facts, instructions, and preferences across sessions via `remember`, `recall`, and `forget` tools.\n- **Web search, GitHub, and headless browser** — Research the web, read GitHub repos, and fetch JavaScript-rendered pages without leaving your terminal.\n\n## Recently shipped\n\n- **OS-aware shell with Windows support** — Auto-detects `cmd.exe`, PowerShell, or bash based on platform. Override with `KIMIFLARE_SHELL` or `\u002Fshell`.\n- **Smart permission modal with inline feedback** — Deny a tool and immediately tell the agent what to do instead. Keyboard-native navigation with `↑\u002F↓`, `j\u002Fk`, `Alt+1\u002F2\u002F3`.\n- **True message queuing** — Enter queues messages while the agent is busy; Escape interrupts and auto-drains the queue.\n- **Hard-stop loop guardrail** — Stops token-burning cycles when all tools in a turn are blocked.\n- **Persistent all-time usage history** — `history.jsonl` tracks daily usage forever; `\u002Fcost` shows true all-time and monthly totals.\n- **Humanized Cloudflare API errors** — Actionable error codes and structured error display instead of raw JSON dumps.\n- **429 rate limit retry** — Automatic backoff and retry when Cloudflare rate-limits requests.\n- **Tool state visualization** — Queued, rejected, and cancelled tools are clearly labeled in the TUI.\n- **Paste preview placeholders** — Pasted content shows a snippet preview with sequential IDs instead of random hashes.\n- **Headless SDK** — Programmatic `createAgentSession` API and JSONL-over-stdio RPC mode for building on top of KimiFlare.\n\nSee the full changelog at [github.com\u002Fsinameraji\u002Fkimiflare\u002Freleases](https:\u002F\u002Fgithub.com\u002Fsinameraji\u002Fkimiflare\u002Freleases).\n\n## Quick start\n\n```sh\nnpm install -g kimiflare\nkimiflare\n```\n\nOn first run, an interactive onboarding wizard collects your Cloudflare credentials and provisions (or picks) an AI Gateway. That's it.\n\nOr run without installing:\n\n```sh\nnpx kimiflare\n```\n\nRequires Node.js ≥ 20.\n\n### Cloudflare API token\n\nThe onboarding wizard provisions or picks an AI Gateway in your account. Your Cloudflare API token needs:\n\n- `Workers AI:Read`\n- `AI Gateway:Read` (to list gateways)\n- `AI Gateway:Edit` (to create gateways)\n\nEdit your token at: https:\u002F\u002Fdash.cloudflare.com\u002Fprofile\u002Fapi-tokens\n\nOnce configured, `\u002Fcost` shows the Gateway-confirmed totals, cache hit ratio, per-feature breakdown, and direct dashboard links to each request log. `\u002Fgateway status` shows the current TTL, skip-cache flag, metadata tags, and live cache-hit ratio.\n\n### Model\n\nKimiFlare runs on **Kimi K2.6** via Cloudflare Workers AI — no API key needed beyond your Cloudflare token:\n\n- `@cf\u002Fmoonshotai\u002Fkimi-k2.6` — 262k context, reasoning, tools\n\n`@cf\u002Fmoonshotai\u002Fkimi-k2.5` is also available for older sessions.\n\n### One-shot mode\n\n```sh\nkimiflare -p \"summarize PLAN.md\"                    # stream answer to stdout\nkimiflare -p \"...\" --dangerously-allow-all          # auto-approve mutating tools (for scripts)\nkimiflare -p \"...\" --reasoning                      # include chain-of-thought in stderr\n```\n\n### Headless SDK\n\nUse KimiFlare programmatically from your own application — no TUI required.\n\n```ts\nimport { createAgentSession } from \"kimiflare\u002Fsdk\";\n\nconst { session } = await createAgentSession({\n  cwd: \"\u002Fpath\u002Fto\u002Fproject\",\n  config: {\n    accountId: process.env.CLOUDFLARE_ACCOUNT_ID,\n    apiToken: process.env.CLOUDFLARE_API_TOKEN,\n    aiGatewayId: process.env.CLOUDFLARE_AI_GATEWAY_ID,\n    model: \"@cf\u002Fmoonshotai\u002Fkimi-k2.6\",\n  },\n});\n\n\u002F\u002F Stream every event: text deltas, tool calls, tasks, usage\nsession.subscribe((event) => {\n  console.log(event.type, event);\n});\n\n\u002F\u002F Send a prompt\nawait session.prompt(\"Refactor auth to JWT + Redis\");\n\n\u002F\u002F Mid-flight correction while the agent is still running\nawait session.steer(\"Use Redis instead of in-memory store\");\n\n\u002F\u002F After the turn finishes\nawait session.followUp(\"Also add unit tests\");\n\n\u002F\u002F Clean up\nsession.dispose();\n```\n\n**Key features:**\n- `subscribe()` — receive typed events (`text_delta`, `tool_call`, `tool_result`, `task_update`, `usage`, `warning`, `error`, `done`, etc.)\n- `prompt()` \u002F `steer()` \u002F `followUp()` — full conversation lifecycle\n- `pause()` \u002F `resume()` — graceful preemption\n- `getStatus()` \u002F `getUsage()` — inspect session state\n- Custom `permissionHandler` — decide programmatically whether to allow mutating tools\n- Optional `memoryEnabled`, `lspEnabled`, `costAttribution` flags\n\n#### SDK Authentication\n\nThe SDK needs a Cloudflare **Account ID**, **API Token**, and AI Gateway ID. Credentials are resolved in this priority order:\n\n1. **Explicit `config` object** (recommended for apps)\n2. **Environment variables**: `CLOUDFLARE_ACCOUNT_ID` \u002F `CF_ACCOUNT_ID`, `CLOUDFLARE_API_TOKEN` \u002F `CF_API_TOKEN`\n3. **Config file**: `~\u002F.config\u002Fkimiflare\u002Fconfig.json`\n\n**For Electron \u002F desktop apps**, we recommend storing credentials in the OS keychain (e.g. Electron `safeStorage` or `keytar`) and passing them explicitly:\n\n```ts\nimport { createAgentSession } from \"kimiflare\u002Fsdk\";\n\nconst accountId = await keytar.getPassword(\"kimiflare\", \"accountId\");\nconst apiToken = await keytar.getPassword(\"kimiflare\", \"apiToken\");\n\nconst { session } = await createAgentSession({\n  cwd: projectPath,\n  config: { accountId, apiToken },\n});\n```\n\n#### RPC mode (subprocess)\n\nIf you need process isolation or a non-Node consumer, run KimiFlare in JSONL-over-stdio RPC mode:\n\n```sh\nnode bin\u002Fkimiflare.mjs --mode rpc\n```\n\n```ts\nimport { spawn } from \"node:child_process\";\n\nconst proc = spawn(\"npx\", [\"kimiflare\", \"--mode\", \"rpc\"], {\n  cwd: projectPath,\n  stdio: [\"pipe\", \"pipe\", \"pipe\"],\n});\n\n\u002F\u002F Read events\nproc.stdout.on(\"data\", (chunk) => {\n  for (const line of chunk.toString().split(\"\\n\")) {\n    if (!line.trim()) continue;\n    const event = JSON.parse(line);\n    console.log(event.type, event);\n  }\n});\n\n\u002F\u002F Send commands\nproc.stdin.write(JSON.stringify({ type: \"new_session\" }) + \"\\n\");\nproc.stdin.write(JSON.stringify({ type: \"prompt\", message: \"Hello\" }) + \"\\n\");\n\n\u002F\u002F Resolve a permission request\nproc.stdin.write(\n  JSON.stringify({ type: \"resolve_permission\", requestId: \"req_0\", decision: \"allow\" }) + \"\\n\"\n);\n```\n\n### Image understanding\n\n```sh\nkimiflare\n› fix the layout bug in this screenshot docs\u002Fbug.png\n› convert this mockup design.png to Tailwind HTML\n```\n\n## Slash commands\n\n| Command | Effect |\n|---------|--------|\n| `\u002Fmode edit\\|plan\\|auto` | Switch permission mode |\n| `\u002Fshell auto\\|bash\\|cmd\\|powershell` | Show or set the shell for the bash tool |\n| `\u002Fthinking low\\|medium\\|high` | Reasoning effort (persists) |\n| `\u002Ftheme` | Interactive theme picker (`Ctrl+T`) |\n| `\u002Fresume` | Pick a past conversation to restore |\n| `\u002Fcompact` | Summarize older turns to free context |\n| `\u002Finit` | Scan repo and write `KIMI.md` project context |\n| `\u002Fmemory` | Show memory stats and search |\n| `\u002Fmcp list` \u002F `\u002Fmcp reload` | Manage MCP servers |\n| `\u002Freasoning` | Toggle chain-of-thought display |\n| `\u002Fcost` | Show Gateway-confirmed cost, cache hit ratio, and per-feature breakdown |\n| `\u002Fgateway status` | Show AI Gateway config and live cache-hit ratio |\n| `\u002Fupdate` | Check for updates |\n| `\u002Fhelp` | List all commands |\n\n## Keyboard shortcuts\n\n| Shortcut | Action |\n|----------|--------|\n| `Ctrl+C` \u002F `Esc` | Interrupt current turn when busy; exit when idle |\n| `Ctrl+R` | Toggle reasoning display |\n| `Ctrl+O` | Toggle verbose tool output |\n| `Ctrl+T` | Open theme picker |\n| `Shift+Tab` | Cycle mode (edit → plan → auto) |\n| `↑` \u002F `↓` | Walk prompt history |\n\n## Logs\n\nKimiFlare writes structured JSON logs of agent-side activity (tool calls,\npermission decisions, MCP\u002FLSP lifecycle, session events, errors) to\n`~\u002F.config\u002Fkimiflare\u002Flogs\u002F\u003Cdate>.jsonl`, one file per day, with 7-day\nretention pruned automatically at startup.\n\nThe logs deliberately exclude prompts and completions — those live in\n[Cloudflare AI Gateway](https:\u002F\u002Fdevelopers.cloudflare.com\u002Fai-gateway\u002F)\nalready, and each log entry includes the Gateway `request_id` so you\ncan join them when you need the network side.\n\n```sh\nkimiflare logs path             # today's file\nkimiflare logs dir              # log directory\nkimiflare logs prune            # delete files older than 7 days\n\n# Tail this session's activity, formatted:\ntail -f $(kimiflare logs path) | jq\n\n# Find the slowest tool calls in the last day:\njq -r 'select(.event == \"tool:end\") | \"\\(.data.duration_ms)\\t\\(.data.tool)\"' \\\n  $(kimiflare logs path) | sort -rn | head\n```\n\nDisable the file sink entirely with `KIMIFLARE_LOG_SINK=off`. The\nseparate `KIMIFLARE_LOG_LEVEL` env var (default `off`) controls stderr\noutput — independent of the file sink.\n\n### Shipping to an OpenTelemetry collector\n\nIf you set `KIMIFLARE_OTEL_ENDPOINT`, KimiFlare also ships each log\nentry to that endpoint over [OTLP\u002FHTTP](https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Fspecs\u002Fotlp\u002F)\nso it lands in Datadog, Honeycomb, Grafana Loki, an internal collector,\nor any other backend that speaks OTel. Batched every 5 s (or every\n100 entries, whichever first) and best-effort — never blocks the agent\nloop.\n\n```sh\n# Full path:\nexport KIMIFLARE_OTEL_ENDPOINT=\"https:\u002F\u002Fotel.example.com\u002Fv1\u002Flogs\"\n# Or just the base URL (we auto-append \u002Fv1\u002Flogs):\nexport KIMIFLARE_OTEL_ENDPOINT=\"https:\u002F\u002Fotel.example.com\"\n\n# Optional headers (comma-separated key=value pairs) — e.g. for auth:\nexport KIMIFLARE_OTEL_HEADERS=\"Authorization=Bearer xyz,X-Tenant=acme\"\n```\n\nEach log entry maps to one OTel `LogRecord`. Correlation IDs\n(`session_id`, `turn_id`, `request_id`) become record attributes,\n`data.*` fields are flattened to attributes with type-preserving\nencoding, and a `service.name=kimiflare` + `service.version` pair sits\non the resource. The same `request_id` joins to Cloudflare AI Gateway's\nper-request log without any extra work.\n\n## Hooks\n\nKimiFlare can fire shell commands at five points in an agent turn,\nconfigured per-project (`.kimiflare\u002Fsettings.json`) or globally\n(`~\u002F.config\u002Fkimiflare\u002Fsettings.json`):\n\n| Event              | Fires when                                      | Veto? |\n|--------------------|-------------------------------------------------|-------|\n| `PreToolUse`       | A tool call is about to run                     | Yes   |\n| `PostToolUse`      | A tool call just finished                       | No    |\n| `UserPromptSubmit` | You hit Enter on a prompt                       | Yes   |\n| `Stop`             | A turn ended cleanly                            | No    |\n| `PreCompact`       | Auto-compaction is about to run                 | No    |\n\nHooks receive the event payload as JSON on stdin **and** as\n`KIMIFLARE_HOOK_*` env vars (for shell-one-liner ergonomics).\nNon-zero exit on a veto event cancels the underlying action and\nsurfaces the hook's stdout as the rejection reason.\n\n### Browse + enable from the TUI\n\n```text\n\u002Fhooks                            # list configured hooks\n\u002Fhooks recommended                # list starter hooks shipped with kimiflare\n\u002Fhooks enable stop-bell           # enable one (writes to .kimiflare\u002Fsettings.json)\n\u002Fhooks enable stop-bell global    # ...or the global file\n\u002Fhooks disable stop-bell\n\u002Fhooks path                       # print settings.json paths\n\u002Fhooks reload                     # re-read settings.json after a manual edit\n```\n\nThe recommended catalog includes terminal bells \u002F macOS notifications\non `Stop`, secret-file guards on `PreToolUse` (e.g. block edits to\n`*.env`), auto-format-with-prettier on `PostToolUse`, and a tool-call\naudit log. All ship disabled — `\u002Fhooks recommended` lists them.\n\n### Schema example\n\n```json\n{\n  \"hooks\": {\n    \"PreToolUse\": [\n      {\n        \"id\": \"no-secrets\",\n        \"matcher\": \"^(edit|write)$\",\n        \"command\": \"case \\\"$KIMIFLARE_HOOK_PATH\\\" in *.env|*.pem) echo 'blocked'; exit 1;; esac\"\n      }\n    ],\n    \"PostToolUse\": [\n      {\n        \"id\": \"format-ts\",\n        \"matcher\": \"^(edit|write)$\",\n        \"command\": \"npx --no-install prettier --write \\\"$KIMIFLARE_HOOK_PATH\\\" >\u002Fdev\u002Fnull 2>&1 || true\"\n      }\n    ],\n    \"Stop\": [\n      { \"id\": \"bell\", \"command\": \"printf '\\\\a'\" }\n    ]\n  }\n}\n```\n\nPer-hook fields:\n- `command` (required) — the shell command.\n- `matcher` (optional) — anchored regex matched against the tool name\n  for `PreToolUse` \u002F `PostToolUse`. Ignored for other events.\n- `id` (optional) — stable handle for `\u002Fhooks enable|disable`.\n  Auto-derived from `event + command` when omitted.\n- `enabled` (default `true`) — set `false` to keep a hook in config\n  but skip it.\n- `timeoutMs` (default `30000`) — hard kill if the hook hangs.\n- `description` (optional) — shown by `\u002Fhooks list`.\n\nHooks are always-on infrastructure: they fire whether the TUI is open\nor kimiflare is running in `--print` mode. They also fire for tool\ncalls generated from inside the Code Mode sandbox (heavy-tier turns),\nbecause hook firing lives on the `ToolExecutor` itself — every call\npath uses the same plumbing.\n\nWhen intent classification has assigned a tier, hook payloads include\nit as `tier: \"light\" | \"medium\" | \"heavy\"` (on `UserPromptSubmit`,\n`PreToolUse`, `PostToolUse`) and as `$KIMIFLARE_HOOK_TIER`. Useful for\n\"skip auto-format on light turns\" or \"audit every heavy-turn write.\"\n\nSDK consumers opt in to hooks with `enableHooks: true` on\n`createAgentSession`. Default is off because the SDK is a primitive,\nnot the TUI.\n\n## Development\n\n```sh\ngit clone https:\u002F\u002Fgithub.com\u002Fsinameraji\u002Fkimiflare\ncd kimiflare\nnpm install\nnpm run build\nnpm link\n```\n\nScripts:\n- `npm run build` — bundle with tsup\n- `npm run dev` — run via tsx\n- `npm run typecheck` — `tsc --noEmit`\n- `npm test` — run tests\n\n## Contributing\n\n1. Fork the repository\n2. Create a branch: `git checkout -b feat\u002Fyour-feature`\n3. Make your changes\n4. Run `npm run typecheck` and `npm run build`\n5. Commit with [Conventional Commits](https:\u002F\u002Fwww.conventionalcommits.org\u002F)\n6. Open a Pull Request\n\n---\n\nBuilt by [Sina Meraji](https:\u002F\u002Fgithub.com\u002Fsinameraji) and [contributors](https:\u002F\u002Fgithub.com\u002Fsinameraji\u002Fkimiflare\u002Fgraphs\u002Fcontributors) · MIT License\n","Kimiflare 是一个基于终端的编码代理工具，直接运行在用户自己的 Cloudflare 账户上，无需中间商。其核心功能包括通过 Cloudflare Workers AI 提供的 Kimi K2.6 模型支持代码编写与调试，并可选地通过 AI Gateway 实现更高级别的监控、缓存和成本管理。该工具特别适合需要高安全性和隐私保护的开发场景，如处理敏感数据或进行内部项目开发时使用。Kimiflare 采用 TypeScript 编写，支持图像理解及多种工作模式（计划\u002F编辑\u002F自动），并提供高达262k的上下文窗口，能够处理大型配置文件或完整的堆栈跟踪信息。",2,"2026-06-11 02:52:12","CREATED_QUERY"]