@knightcodeai/cli 0.17.3 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1293 -0
- package/README.md +2 -2
- package/dist/bundle/chunks/anthropic-messages-A2IH2IY3.js +6 -0
- package/dist/bundle/chunks/anthropic.js +101 -0
- package/dist/bundle/chunks/azure-openai-responses-XZILQZOG.js +2 -0
- package/dist/bundle/chunks/bedrock-converse-stream.js +89 -0
- package/dist/bundle/chunks/chunk-4CRI7BMY.js +2 -0
- package/dist/bundle/chunks/chunk-57BPR4HF.js +2 -0
- package/dist/bundle/chunks/chunk-A5LJINMT.js +2 -0
- package/dist/bundle/chunks/chunk-AANBXVWQ.js +2 -0
- package/dist/bundle/chunks/chunk-ACHHEROF.js +7 -0
- package/dist/bundle/chunks/chunk-AFR2OW6S.js +108 -0
- package/dist/bundle/chunks/chunk-AHB7JV5B.js +2 -0
- package/dist/bundle/chunks/chunk-B2FT7RH5.js +2 -0
- package/dist/bundle/chunks/chunk-BRKUE2MD.js +2 -0
- package/dist/bundle/chunks/chunk-DKOURXGU.js +2 -0
- package/dist/bundle/chunks/chunk-DVFCXHT4.js +2 -0
- package/dist/bundle/chunks/chunk-EPYT326Y.js +30 -0
- package/dist/bundle/chunks/chunk-ETOMYYZC.js +2 -0
- package/dist/bundle/chunks/chunk-FA32X2UJ.js +7 -0
- package/dist/bundle/chunks/chunk-FHM6KUY3.js +44 -0
- package/dist/bundle/chunks/chunk-FO7CEQB3.js +11 -0
- package/dist/bundle/chunks/chunk-GHVXUCGU.js +130 -0
- package/dist/bundle/chunks/chunk-HHWP56PR.js +2 -0
- package/dist/bundle/chunks/chunk-HSL72VZI.js +2 -0
- package/dist/bundle/chunks/chunk-HUQB436V.js +2 -0
- package/dist/bundle/chunks/chunk-HWXGL4YB.js +2 -0
- package/dist/bundle/chunks/chunk-KQKUEQJA.js +6 -0
- package/dist/bundle/chunks/chunk-M5GCRGV6.js +1333 -0
- package/dist/bundle/chunks/chunk-MB4QRS7Y.js +9 -0
- package/dist/bundle/chunks/chunk-MXIWLMNT.js +8 -0
- package/dist/bundle/chunks/chunk-N6VDWLND.js +2 -0
- package/dist/bundle/chunks/chunk-NCIBB66G.js +2 -0
- package/dist/bundle/chunks/chunk-NDQ5OW6U.js +2 -0
- package/dist/bundle/chunks/chunk-NNCIIYD6.js +2 -0
- package/dist/bundle/chunks/chunk-O6JSP6YG.js +6 -0
- package/dist/bundle/chunks/chunk-OFST7FDG.js +2 -0
- package/dist/bundle/chunks/chunk-SPAUY3RD.js +12 -0
- package/dist/bundle/chunks/chunk-U5XE4RWR.js +2 -0
- package/dist/bundle/chunks/chunk-UZWP3NHW.js +2 -0
- package/dist/bundle/chunks/chunk-V5ANFNKF.js +11 -0
- package/dist/bundle/chunks/chunk-VJJ6J35N.js +20 -0
- package/dist/bundle/chunks/chunk-XIRAUXOE.js +58 -0
- package/dist/bundle/chunks/chunk-ZW7FVRHT.js +31 -0
- package/dist/bundle/chunks/cli-6ZTWO6GL.js +51 -0
- package/dist/bundle/chunks/cloudflare-workers-ai-system-one-6E2UM7IG.js +2 -0
- package/dist/bundle/chunks/codemode-worker.js +478 -0
- package/dist/bundle/chunks/dist-DKI7Q6GY.js +13 -0
- package/dist/bundle/chunks/easter-egg-3d-FDCGDUF3.js +2 -0
- package/dist/bundle/chunks/execute-VSDU5VSN.js +499 -0
- package/dist/bundle/chunks/github-copilot.js +2 -0
- package/dist/bundle/chunks/google-generative-ai-CSWR3ORZ.js +2 -0
- package/dist/bundle/chunks/google-vertex-QIDRFOFB.js +2 -0
- package/dist/bundle/chunks/image-resize-worker.js +2 -0
- package/dist/bundle/chunks/jiti-loader-BXVX3Y2R.js +21 -0
- package/dist/bundle/chunks/jiti-static-loader-NNBCFAO5.js +2 -0
- package/dist/bundle/chunks/kimi-coding.js +2 -0
- package/dist/bundle/chunks/knightcode-messages-3GNOTMSI.js +8 -0
- package/dist/bundle/chunks/lib-IHWMWJDR.js +9 -0
- package/dist/bundle/chunks/llama-cpp-classify-HRPRKOZA.js +22 -0
- package/dist/bundle/chunks/meta.js +2 -0
- package/dist/bundle/chunks/mistral-conversations-46TK5OBA.js +5 -0
- package/dist/bundle/chunks/multipart-parser-VTTMF2EO.js +3 -0
- package/dist/bundle/chunks/node-7S3GFMOZ.js +16 -0
- package/dist/bundle/chunks/node-MAEICQNS.js +2 -0
- package/dist/bundle/chunks/openai-chatgpt.js +101 -0
- package/dist/bundle/chunks/openai-codex-responses-IT7VEKUU.js +10 -0
- package/dist/bundle/chunks/openai-codex.js +101 -0
- package/dist/bundle/chunks/openai-completions-LOKIW33V.js +7 -0
- package/dist/bundle/chunks/openai-decisions-4F3LWHMG.js +5 -0
- package/dist/bundle/chunks/openai-responses-OK36GJXP.js +3 -0
- package/dist/bundle/chunks/openrouter-images-ZI7LLZ4Y.js +2 -0
- package/dist/bundle/chunks/openrouter.js +101 -0
- package/dist/bundle/chunks/radius.js +101 -0
- package/dist/bundle/chunks/runtime-RMPIV5AR.js +2 -0
- package/dist/bundle/chunks/src-ETRMT73D.js +4 -0
- package/dist/bundle/chunks/typesafe-system-one-J2CJBWEH.js +2 -0
- package/dist/bundle/chunks/virtual-modules-EGJP3AJA.js +2 -0
- package/dist/bundle/chunks/xai.js +2 -0
- package/dist/bundle/cli-runtime.js +3 -0
- package/dist/bundle/cli.js +5 -0
- package/dist/bundle/native/darwin/prebuilds/darwin-arm64/darwin-platform.node +0 -0
- package/dist/bundle/native/darwin/prebuilds/darwin-x64/darwin-platform.node +0 -0
- package/dist/bundle/native/linux/prebuilds/linux-arm64/linux-platform-x11.node +0 -0
- package/dist/bundle/native/linux/prebuilds/linux-x64/linux-platform-x11.node +0 -0
- package/dist/bundle/native/win32/prebuilds/win32-arm64/win32-platform.node +0 -0
- package/dist/bundle/native/win32/prebuilds/win32-x64/win32-platform.node +0 -0
- package/dist/core/export-html/template.css +1015 -0
- package/dist/core/export-html/template.html +55 -0
- package/dist/core/export-html/template.js +1929 -0
- package/dist/core/export-html/vendor/highlight.min.js +1213 -0
- package/dist/core/export-html/vendor/marked.min.js +78 -0
- package/dist/modes/interactive/theme/dark.json +74 -0
- package/dist/modes/interactive/theme/light.json +74 -0
- package/dist/modes/interactive/theme/system-theme.ts +579 -0
- package/dist/modes/interactive/theme/theme-controller.ts +253 -0
- package/dist/modes/interactive/theme/theme-schema.ts +145 -0
- package/dist/modes/interactive/theme/theme-tokens.ts +145 -0
- package/dist/modes/interactive/theme/theme.ts +1076 -0
- package/docs/app-server.md +479 -0
- package/docs/app-server.schema.json +8128 -0
- package/docs/cli-integration.md +106 -0
- package/docs/cli.md +393 -0
- package/docs/codemode.md +230 -0
- package/docs/compaction.md +463 -0
- package/docs/configuration.md +48 -0
- package/docs/containerization.md +143 -0
- package/docs/custom-provider.md +173 -0
- package/docs/desktop.md +73 -0
- package/docs/docs.json +236 -0
- package/docs/environment-variables.md +138 -0
- package/docs/extensions.md +314 -0
- package/docs/how-knightcode-works.md +49 -0
- package/docs/images/doom-extension.png +0 -0
- package/docs/images/interactive-mode.png +0 -0
- package/docs/images/tree-view.png +0 -0
- package/docs/index.md +39 -0
- package/docs/json.md +226 -0
- package/docs/keybindings.md +197 -0
- package/docs/llama-cpp.md +121 -0
- package/docs/mcp.md +272 -0
- package/docs/message-types.md +279 -0
- package/docs/models-configuration.md +187 -0
- package/docs/models.md +221 -0
- package/docs/nvidia-rtx-llama-cpp.md +96 -0
- package/docs/packages.md +129 -0
- package/docs/plan-mode.md +121 -0
- package/docs/prompt-templates.md +59 -0
- package/docs/providers.md +282 -0
- package/docs/quickstart.md +128 -0
- package/docs/remote.md +87 -0
- package/docs/rpc-commands.md +860 -0
- package/docs/rpc-extension-ui.md +214 -0
- package/docs/rpc.md +193 -0
- package/docs/sdk.md +197 -0
- package/docs/security.md +99 -0
- package/docs/session-format.md +358 -0
- package/docs/sessions.md +135 -0
- package/docs/settings.md +220 -0
- package/docs/shell-aliases.md +93 -0
- package/docs/skills.md +93 -0
- package/docs/slash-commands.md +78 -0
- package/docs/terminal-setup.md +242 -0
- package/docs/termux.md +117 -0
- package/docs/themes.md +140 -0
- package/docs/tmux.md +55 -0
- package/docs/tui.md +125 -0
- package/docs/usage.md +167 -0
- package/docs/virtual-models.md +114 -0
- package/docs/windows.md +67 -0
- package/examples/README.md +36 -0
- package/examples/extensions/README.md +214 -0
- package/examples/extensions/auto-commit-on-exit.ts +55 -0
- package/examples/extensions/bash-spawn-hook.ts +30 -0
- package/examples/extensions/bookmark.ts +50 -0
- package/examples/extensions/border-status-editor.ts +151 -0
- package/examples/extensions/built-in-tool-renderer.ts +225 -0
- package/examples/extensions/claude-rules.ts +89 -0
- package/examples/extensions/commands.ts +72 -0
- package/examples/extensions/confirm-destructive.ts +60 -0
- package/examples/extensions/custom-compaction.ts +118 -0
- package/examples/extensions/custom-footer.ts +66 -0
- package/examples/extensions/custom-header.ts +73 -0
- package/examples/extensions/custom-provider-anthropic/index.ts +617 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
- package/examples/extensions/custom-provider-anthropic/package.json +19 -0
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +399 -0
- package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
- package/examples/extensions/debug-provider.ts +90 -0
- package/examples/extensions/dirty-repo-guard.ts +56 -0
- package/examples/extensions/doom-overlay/README.md +46 -0
- package/examples/extensions/doom-overlay/doom/build.sh +152 -0
- package/examples/extensions/doom-overlay/doom/doomgeneric_knightcode.c +72 -0
- package/examples/extensions/doom-overlay/doom-component.ts +132 -0
- package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
- package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
- package/examples/extensions/doom-overlay/index.ts +74 -0
- package/examples/extensions/doom-overlay/wad-finder.ts +55 -0
- package/examples/extensions/dynamic-resources/SKILL.md +8 -0
- package/examples/extensions/dynamic-resources/dynamic.json +75 -0
- package/examples/extensions/dynamic-resources/dynamic.md +5 -0
- package/examples/extensions/dynamic-resources/index.ts +15 -0
- package/examples/extensions/dynamic-tools.ts +74 -0
- package/examples/extensions/entry-renderer.ts +41 -0
- package/examples/extensions/event-bus.ts +43 -0
- package/examples/extensions/file-trigger.ts +41 -0
- package/examples/extensions/git-checkpoint.ts +53 -0
- package/examples/extensions/git-merge-and-resolve.ts +115 -0
- package/examples/extensions/github-issue-autocomplete.ts +185 -0
- package/examples/extensions/gondolin/index.ts +531 -0
- package/examples/extensions/gondolin/package-lock.json +185 -0
- package/examples/extensions/gondolin/package.json +19 -0
- package/examples/extensions/handoff.ts +190 -0
- package/examples/extensions/hello.ts +26 -0
- package/examples/extensions/hidden-thinking-label.ts +53 -0
- package/examples/extensions/inline-bash.ts +94 -0
- package/examples/extensions/input-transform-streaming.ts +39 -0
- package/examples/extensions/input-transform.ts +43 -0
- package/examples/extensions/interactive-shell.ts +196 -0
- package/examples/extensions/jev-router.ts +113 -0
- package/examples/extensions/mac-system-theme.ts +47 -0
- package/examples/extensions/message-renderer.ts +59 -0
- package/examples/extensions/minimal-mode.ts +353 -0
- package/examples/extensions/modal-editor.ts +85 -0
- package/examples/extensions/model-status.ts +31 -0
- package/examples/extensions/notify.ts +57 -0
- package/examples/extensions/overlay-qa-tests.ts +1450 -0
- package/examples/extensions/overlay-test.ts +153 -0
- package/examples/extensions/permission-gate.ts +34 -0
- package/examples/extensions/pirate.ts +47 -0
- package/examples/extensions/plan-mode/README.md +66 -0
- package/examples/extensions/plan-mode/index.ts +387 -0
- package/examples/extensions/plan-mode/utils.ts +168 -0
- package/examples/extensions/preset.ts +436 -0
- package/examples/extensions/project-trust.ts +64 -0
- package/examples/extensions/prompt-customizer.ts +49 -0
- package/examples/extensions/protected-paths.ts +30 -0
- package/examples/extensions/provider-payload.ts +18 -0
- package/examples/extensions/qna.ts +118 -0
- package/examples/extensions/question.ts +278 -0
- package/examples/extensions/questionnaire.ts +440 -0
- package/examples/extensions/rainbow-editor.ts +88 -0
- package/examples/extensions/reload-runtime.ts +37 -0
- package/examples/extensions/rpc-demo.ts +118 -0
- package/examples/extensions/sandbox/index.ts +321 -0
- package/examples/extensions/sandbox/package-lock.json +92 -0
- package/examples/extensions/sandbox/package.json +19 -0
- package/examples/extensions/send-user-message.ts +97 -0
- package/examples/extensions/session-name.ts +27 -0
- package/examples/extensions/shutdown-command.ts +63 -0
- package/examples/extensions/snake.ts +343 -0
- package/examples/extensions/space-invaders.ts +560 -0
- package/examples/extensions/ssh.ts +220 -0
- package/examples/extensions/status-line.ts +32 -0
- package/examples/extensions/structured-output.ts +65 -0
- package/examples/extensions/subagent/README.md +177 -0
- package/examples/extensions/subagent/agents/planner.md +37 -0
- package/examples/extensions/subagent/agents/reviewer.md +35 -0
- package/examples/extensions/subagent/agents/scout.md +50 -0
- package/examples/extensions/subagent/agents/worker.md +24 -0
- package/examples/extensions/subagent/agents.ts +157 -0
- package/examples/extensions/subagent/index.ts +1010 -0
- package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
- package/examples/extensions/subagent/prompts/implement.md +10 -0
- package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
- package/examples/extensions/summarize.ts +199 -0
- package/examples/extensions/system-prompt-header.ts +17 -0
- package/examples/extensions/tic-tac-toe.ts +1004 -0
- package/examples/extensions/timed-confirm.ts +70 -0
- package/examples/extensions/titlebar-spinner.ts +58 -0
- package/examples/extensions/todo.ts +294 -0
- package/examples/extensions/tool-override.ts +144 -0
- package/examples/extensions/tools.ts +146 -0
- package/examples/extensions/trigger-compact.ts +50 -0
- package/examples/extensions/truncated-tool.ts +195 -0
- package/examples/extensions/widget-placement.ts +9 -0
- package/examples/extensions/with-deps/index.ts +32 -0
- package/examples/extensions/with-deps/package-lock.json +31 -0
- package/examples/extensions/with-deps/package.json +22 -0
- package/examples/extensions/working-indicator.ts +121 -0
- package/examples/extensions/working-message-test.ts +25 -0
- package/examples/rpc-client.ts +35 -0
- package/examples/rpc-extension-ui.ts +661 -0
- package/examples/sdk/01-minimal.ts +26 -0
- package/examples/sdk/02-custom-model.ts +49 -0
- package/examples/sdk/03-custom-prompt.ts +70 -0
- package/examples/sdk/04-skills.ts +55 -0
- package/examples/sdk/05-tools.ts +48 -0
- package/examples/sdk/06-extensions.ts +94 -0
- package/examples/sdk/07-context-files.ts +42 -0
- package/examples/sdk/08-prompt-templates.ts +51 -0
- package/examples/sdk/09-api-keys-and-oauth.ts +34 -0
- package/examples/sdk/10-settings.ts +53 -0
- package/examples/sdk/11-sessions.ts +52 -0
- package/examples/sdk/12-full-control.ts +74 -0
- package/examples/sdk/13-session-runtime.ts +67 -0
- package/examples/sdk/14-codemode-mcp.ts +61 -0
- package/examples/sdk/README.md +141 -0
- package/package.json +15 -15
- package/bin/knightcode +0 -62
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
# Providers
|
|
2
|
+
|
|
3
|
+
Most hosted providers support one or both of these authentication methods:
|
|
4
|
+
|
|
5
|
+
- Sign in through a browser or device flow backed by OAuth.
|
|
6
|
+
- Provide an API key.
|
|
7
|
+
|
|
8
|
+
Use `/login [provider]` to see the methods supported by a provider. Amazon Bedrock and Google Vertex AI can also use ambient cloud credentials.
|
|
9
|
+
|
|
10
|
+
## Authenticate interactively
|
|
11
|
+
|
|
12
|
+
Run `/login` and select a provider. KnightCode guides you through its OAuth or API-key flow and saves the resulting credential in [`auth.json`](configuration.md#agent-directory).
|
|
13
|
+
|
|
14
|
+
On a remote or headless machine, an OAuth callback may not reach the local process. When prompted, paste the final redirect URL or authorization code back into KnightCode.
|
|
15
|
+
|
|
16
|
+
Run `/logout` and select a provider to remove its stored credential. This does not unset environment variables, remove authentication from `models.json`, or revoke the credential at the provider.
|
|
17
|
+
|
|
18
|
+
`auth.json` can contain API keys and OAuth tokens. Keep it private and do not commit it.
|
|
19
|
+
|
|
20
|
+
## Check subscription usage
|
|
21
|
+
|
|
22
|
+
Run `/usage` in the interactive terminal to see remaining allowance and reset
|
|
23
|
+
times reported by connected Claude (`anthropic`), OpenAI Codex (legacy)
|
|
24
|
+
(`openai-codex`) and Grok (`xai`) subscription sign-ins. For Grok, run `/login xai`
|
|
25
|
+
and choose "Sign in with SuperGrok or X Premium". The figures cover the whole
|
|
26
|
+
account, not just the current KnightCode session. Other subscription sign-ins,
|
|
27
|
+
including the current `openai` ChatGPT sign-in, are listed as unsupported.
|
|
28
|
+
|
|
29
|
+
Claude shows extra usage first. KnightCode draws from extra usage rather than
|
|
30
|
+
Claude's plan limits. The extra-usage percentage is account-wide and includes
|
|
31
|
+
usage outside KnightCode; it does not measure this client's consumption alone.
|
|
32
|
+
The plan windows are shown only for reference. Codex windows describe the plan
|
|
33
|
+
allowance. Accounts with purchased credits can keep working at 0% remaining.
|
|
34
|
+
|
|
35
|
+
Grok shows the weekly or monthly credit pool and, when reported, the Grok Build
|
|
36
|
+
and API shares. These product lines are shares of the same pool, not separate
|
|
37
|
+
allowances. Accounts with purchased credits or pay-as-you-go can keep working
|
|
38
|
+
at 0% remaining. An xAI API key is billed separately and is not shown.
|
|
39
|
+
|
|
40
|
+
`unavailable` means the provider did not report a valid value. A window whose
|
|
41
|
+
reset has passed asks you to run `/usage` again instead of assuming the allowance
|
|
42
|
+
has refilled. Each opening fetches once; there is no polling or Refresh key.
|
|
43
|
+
Rate-limited providers are not requested again until their cooldown expires.
|
|
44
|
+
|
|
45
|
+
The panel is read-only: it never buys credits or changes provider settings.
|
|
46
|
+
It is available only in the interactive terminal, not RPC, print, JSON, or IDE
|
|
47
|
+
engine sessions. It uses your configured credential store and the existing
|
|
48
|
+
OAuth refresh path. Usage requests go only to the providers' fixed usage
|
|
49
|
+
endpoints, not a configured model endpoint.
|
|
50
|
+
|
|
51
|
+
Disable it with `"extensions": ["-builtin:usage"]` in settings, or disable all
|
|
52
|
+
extensions with `--no-extensions`.
|
|
53
|
+
|
|
54
|
+
## Use an API key from the environment
|
|
55
|
+
|
|
56
|
+
Environment variables are useful in CI and anywhere KnightCode should not store the key. Set the variable before starting KnightCode:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
export ANTHROPIC_API_KEY=sk-ant-...
|
|
60
|
+
knightcode
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
This table covers providers with a single primary API-key variable. Providers that need additional configuration or support ambient credentials are covered under [Provider Specific Config](#provider-specific-config).
|
|
64
|
+
|
|
65
|
+
| Provider | Environment variable |
|
|
66
|
+
|---|---|
|
|
67
|
+
| Anthropic | `ANTHROPIC_API_KEY` |
|
|
68
|
+
| AgentRouter | `AGENTROUTER_API_KEY` |
|
|
69
|
+
| Ant Ling | `ANT_LING_API_KEY` |
|
|
70
|
+
| OpenAI | `OPENAI_API_KEY` |
|
|
71
|
+
| DeepSeek | `DEEPSEEK_API_KEY` |
|
|
72
|
+
| NVIDIA NIM | `NVIDIA_API_KEY` |
|
|
73
|
+
| Google Gemini | `GEMINI_API_KEY` |
|
|
74
|
+
| GitHub Copilot | `COPILOT_GITHUB_TOKEN` |
|
|
75
|
+
| Mistral | `MISTRAL_API_KEY` |
|
|
76
|
+
| Groq | `GROQ_API_KEY` |
|
|
77
|
+
| Cerebras | `CEREBRAS_API_KEY` |
|
|
78
|
+
| xAI | `XAI_API_KEY` |
|
|
79
|
+
| OpenRouter | `OPENROUTER_API_KEY` |
|
|
80
|
+
| Vercel AI Gateway | `AI_GATEWAY_API_KEY` |
|
|
81
|
+
| ZAI Coding Plan (Global) | `ZAI_API_KEY` |
|
|
82
|
+
| ZAI Coding Plan (China) | `ZAI_CODING_CN_API_KEY` |
|
|
83
|
+
| OpenCode Zen and Go | `OPENCODE_API_KEY` |
|
|
84
|
+
| Radius | `RADIUS_API_KEY` |
|
|
85
|
+
| TypeSafe ([classifier models](models.md#use-classifier-models)) | `TYPESAFE_API_KEY` |
|
|
86
|
+
| Hugging Face | `HF_TOKEN` |
|
|
87
|
+
| Fireworks | `FIREWORKS_API_KEY` |
|
|
88
|
+
| Together AI | `TOGETHER_API_KEY` |
|
|
89
|
+
| Baseten | `BASETEN_API_KEY` |
|
|
90
|
+
| Kimi For Coding | `KIMI_API_KEY` |
|
|
91
|
+
| Meta | `META_API_KEY` |
|
|
92
|
+
| MiniMax | `MINIMAX_API_KEY` |
|
|
93
|
+
| MiniMax (China) | `MINIMAX_CN_API_KEY` |
|
|
94
|
+
| Moonshot AI (Global and China) | `MOONSHOT_API_KEY` |
|
|
95
|
+
| Qwen Token Plan and Individual | `QWEN_TOKEN_PLAN_API_KEY` |
|
|
96
|
+
| Qwen Token Plan (China) | `QWEN_TOKEN_PLAN_CN_API_KEY` |
|
|
97
|
+
| Xiaomi MiMo | `XIAOMI_API_KEY` |
|
|
98
|
+
| Xiaomi MiMo Token Plan (China) | `XIAOMI_TOKEN_PLAN_CN_API_KEY` |
|
|
99
|
+
| Xiaomi MiMo Token Plan (Amsterdam) | `XIAOMI_TOKEN_PLAN_AMS_API_KEY` |
|
|
100
|
+
| Xiaomi MiMo Token Plan (Singapore) | `XIAOMI_TOKEN_PLAN_SGP_API_KEY` |
|
|
101
|
+
|
|
102
|
+
Anthropic also recognizes `ANTHROPIC_OAUTH_TOKEN` as an API credential and `ANTHROPIC_AUTH_TOKEN` as bearer authentication.
|
|
103
|
+
|
|
104
|
+
With no key or token set, Anthropic uses workload identity federation when `ANTHROPIC_FEDERATION_RULE_ID`, `ANTHROPIC_ORGANIZATION_ID` and `ANTHROPIC_IDENTITY_TOKEN_FILE` are set: the Anthropic SDK exchanges the identity token for a short-lived access token and refreshes it itself (re-reading the identity token file, so keep that file fresh for long sessions). `ANTHROPIC_SERVICE_ACCOUNT_ID` and `ANTHROPIC_WORKSPACE_ID` are passed through when set.
|
|
105
|
+
|
|
106
|
+
## Load an API key from a command
|
|
107
|
+
|
|
108
|
+
To use a secret manager without writing the resolved key to disk, set a provider's `key` in `auth.json` to a command prefixed with `!`:
|
|
109
|
+
|
|
110
|
+
```json
|
|
111
|
+
{
|
|
112
|
+
"anthropic": {
|
|
113
|
+
"type": "api_key",
|
|
114
|
+
"key": "!security find-generic-password -ws 'anthropic'"
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
KnightCode runs the command when the key is first needed and caches its standard output for the process lifetime. Empty output, a timeout, or a nonzero exit leaves the key unresolved until KnightCode restarts.
|
|
120
|
+
|
|
121
|
+
## Provider Specific Config
|
|
122
|
+
|
|
123
|
+
The providers below have additional setup, need additional settings, or can use credentials supplied by their platform.
|
|
124
|
+
|
|
125
|
+
A stored API-key credential can include an `env` object. Its values take priority over the process environment for that provider:
|
|
126
|
+
|
|
127
|
+
```json
|
|
128
|
+
{
|
|
129
|
+
"cloudflare-workers-ai": {
|
|
130
|
+
"type": "api_key",
|
|
131
|
+
"key": "...",
|
|
132
|
+
"env": {
|
|
133
|
+
"CLOUDFLARE_ACCOUNT_ID": "account-id"
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Radius
|
|
140
|
+
|
|
141
|
+
Radius is a service crafted for KnightCode by the builders of KnightCode, Earendil Works. It provides a customizable AI gateway with organization-level controls and analytics built in, and artifacts for sharing what you create with KnightCode.
|
|
142
|
+
|
|
143
|
+
To get started, run `/login radius` in KnightCode. This adds Radius as a provider, and its models appear in `/model` like any other provider's.
|
|
144
|
+
|
|
145
|
+
Radius also has an MCP server, so KnightCode can manage Radius for you.
|
|
146
|
+
|
|
147
|
+
Radius is currently in early alpha and evolving quickly. See [radius.earendil.com](https://radius.earendil.com) for more.
|
|
148
|
+
|
|
149
|
+
Radius authentication uses its gateway catalog and caches refreshed model metadata for later offline startup. A custom Radius gateway configured in `models.json` uses its own catalog rather than inheriting the public `radius.pi.dev` catalog.
|
|
150
|
+
|
|
151
|
+
### OpenRouter
|
|
152
|
+
|
|
153
|
+
Authenticate with `/login openrouter` or `OPENROUTER_API_KEY`.
|
|
154
|
+
|
|
155
|
+
With a key, KnightCode lists only the OpenRouter chat models that key may use, with the key's context size, max output, and prices. These come from OpenRouter's `/models/user` endpoint and reflect guardrails and provider restrictions set in OpenRouter. Image and classifier models are not filtered.
|
|
156
|
+
|
|
157
|
+
KnightCode refreshes the list in the background at startup in interactive mode, when `/model` opens, after `/login`, and on `knightcode update --models`. The last list is saved and used offline and in `knightcode -p` and RPC mode. After switching keys outside `/login`, the previous key's list stays until the next refresh.
|
|
158
|
+
|
|
159
|
+
Regional endpoints filter models to their region. To use one, set the base URL in [`models.json`](models.md#configure-a-compatible-endpoint):
|
|
160
|
+
|
|
161
|
+
```json
|
|
162
|
+
{
|
|
163
|
+
"providers": {
|
|
164
|
+
"openrouter": { "baseUrl": "https://us.openrouter.ai/api/v1" }
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
If the base URL rejects the key at `/models/user` or does not have that endpoint, for example a proxy configured as the OpenRouter base URL, KnightCode lists every OpenRouter model.
|
|
170
|
+
|
|
171
|
+
### Azure OpenAI
|
|
172
|
+
|
|
173
|
+
The provider ID is `azure` (formerly `azure-openai-responses`). Use it as the key in `auth.json`, `models.json`, and `settings.json`, and in model references such as `--model azure/gpt-5.4`.
|
|
174
|
+
|
|
175
|
+
The `azure` provider serves OpenAI models through the Responses API and Microsoft Foundry models through Chat Completions, such as `azure/deepseek-v4-pro`.
|
|
176
|
+
|
|
177
|
+
Set an API key plus either a base URL or resource name:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
export AZURE_OPENAI_API_KEY=...
|
|
181
|
+
export AZURE_OPENAI_BASE_URL=https://your-resource.ai.azure.com
|
|
182
|
+
# Or:
|
|
183
|
+
export AZURE_OPENAI_RESOURCE_NAME=your-resource
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Resource root URLs under `ai.azure.com`, `cognitiveservices.azure.com`, and `openai.azure.com` are normalized to the OpenAI API path.
|
|
187
|
+
|
|
188
|
+
KnightCode sends the model ID as the deployment name. If a deployment has a different name, map it with `AZURE_OPENAI_DEPLOYMENT_NAME_MAP`. The map applies to both the Responses API and Foundry Chat Completions:
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
export AZURE_OPENAI_DEPLOYMENT_NAME_MAP=gpt-5.4=my-gpt-deployment,deepseek-v4-pro=my-deepseek
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
`AZURE_OPENAI_API_VERSION` overrides the API version for OpenAI models (default `v1`).
|
|
195
|
+
|
|
196
|
+
To use a Foundry model that KnightCode does not include, add it under `azure` in [`models.json`](models.md#configure-a-compatible-endpoint) with `api: "openai-completions"`. Custom models require a `baseUrl`; `AZURE_OPENAI_BASE_URL` and `AZURE_OPENAI_RESOURCE_NAME` take priority over it when set:
|
|
197
|
+
|
|
198
|
+
```json
|
|
199
|
+
{
|
|
200
|
+
"providers": {
|
|
201
|
+
"azure": {
|
|
202
|
+
"baseUrl": "https://your-resource.services.ai.azure.com",
|
|
203
|
+
"models": [
|
|
204
|
+
{ "id": "your-deployment", "api": "openai-completions" }
|
|
205
|
+
]
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### Amazon Bedrock
|
|
212
|
+
|
|
213
|
+
Bedrock can use a bearer token or an ambient AWS credential source:
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
# Named profile
|
|
217
|
+
export AWS_PROFILE=your-profile
|
|
218
|
+
|
|
219
|
+
# IAM keys
|
|
220
|
+
export AWS_ACCESS_KEY_ID=AKIA...
|
|
221
|
+
export AWS_SECRET_ACCESS_KEY=...
|
|
222
|
+
# Required for temporary credentials
|
|
223
|
+
export AWS_SESSION_TOKEN=...
|
|
224
|
+
|
|
225
|
+
# Bedrock bearer token
|
|
226
|
+
export AWS_BEARER_TOKEN_BEDROCK=...
|
|
227
|
+
|
|
228
|
+
# Region, when not supplied by the profile or AWS SDK configuration
|
|
229
|
+
export AWS_REGION=us-west-2
|
|
230
|
+
# AWS_DEFAULT_REGION is also supported
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
KnightCode also supports ECS task credentials and IRSA through the standard `AWS_CONTAINER_CREDENTIALS_*` and `AWS_WEB_IDENTITY_TOKEN_FILE` variables.
|
|
234
|
+
|
|
235
|
+
### Cloudflare AI Gateway
|
|
236
|
+
|
|
237
|
+
The gateway requires a token, account ID, and gateway ID:
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
export CLOUDFLARE_API_KEY=...
|
|
241
|
+
export CLOUDFLARE_ACCOUNT_ID=...
|
|
242
|
+
export CLOUDFLARE_GATEWAY_ID=...
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
The account and gateway IDs can come from the process environment or the credential's `env` object in `auth.json`.
|
|
246
|
+
|
|
247
|
+
`CLOUDFLARE_API_KEY` authenticates KnightCode to the gateway. Upstream access can use Cloudflare unified billing, credentials stored in the gateway, or an `Authorization` header configured for the provider in `models.json`.
|
|
248
|
+
|
|
249
|
+
### Cloudflare Workers AI
|
|
250
|
+
|
|
251
|
+
Workers AI requires a token and account ID:
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
export CLOUDFLARE_API_KEY=...
|
|
255
|
+
export CLOUDFLARE_ACCOUNT_ID=...
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
The account ID can also be stored in the credential's `env` object.
|
|
259
|
+
|
|
260
|
+
### Google Vertex AI
|
|
261
|
+
|
|
262
|
+
Use a Google Cloud API key:
|
|
263
|
+
|
|
264
|
+
```bash
|
|
265
|
+
export GOOGLE_CLOUD_API_KEY=...
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
To use Application Default Credentials, configure a project and location:
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
export GOOGLE_CLOUD_PROJECT=your-project
|
|
272
|
+
# GCLOUD_PROJECT is also supported
|
|
273
|
+
export GOOGLE_CLOUD_LOCATION=us-central1
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
Then authenticate:
|
|
277
|
+
|
|
278
|
+
```bash
|
|
279
|
+
gcloud auth application-default login
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
To use a service-account key file instead, set `GOOGLE_APPLICATION_CREDENTIALS` along with the project and location.
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# Quickstart
|
|
2
|
+
|
|
3
|
+
KnightCode runs in your terminal and works with files on your machine. To use it, you need access to a model through a supported provider. This can be a subscription, an API key, or a local model.
|
|
4
|
+
|
|
5
|
+
For native Windows setup, read [Windows Setup](windows.md). For Android, read [Termux Setup](termux.md).
|
|
6
|
+
|
|
7
|
+
## 1. Install KnightCode
|
|
8
|
+
|
|
9
|
+
On macOS or Linux, you can use the installer. It installs Node.js 22.19 or newer if Node is missing or older, then installs KnightCode for your user:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
curl -fsSL https://knightcode.dev/install.sh | sh
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Alternatively, install KnightCode from npm. This requires Node.js 22.19 or newer:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install -g --ignore-scripts @knightcodeai/cli
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
KnightCode does not require dependency lifecycle scripts for a normal npm installation.
|
|
22
|
+
|
|
23
|
+
Verify the installation:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
knightcode --version
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Supported installations download updates in the background during interactive
|
|
30
|
+
sessions. When the green **Restart for vX.Y.Z** notice appears above the input,
|
|
31
|
+
exit and relaunch when convenient. You can also run `knightcode update` manually. See
|
|
32
|
+
[Updating KnightCode](cli.md#update-knightcode-or-packages) for supported installs
|
|
33
|
+
and how to disable automatic downloads.
|
|
34
|
+
|
|
35
|
+
## 2. Start KnightCode
|
|
36
|
+
|
|
37
|
+
Change to the folder you want KnightCode to work with, then start it:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
cd /path/to/folder
|
|
41
|
+
knightcode
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
The working folder helps KnightCode discover relevant files, instructions, and configuration. KnightCode also uses it to group saved sessions.
|
|
45
|
+
|
|
46
|
+
<p align="center"><img src="images/interactive-mode.png" alt="KnightCode running in a terminal with a conversation, input editor, and status footer" width="750"></p>
|
|
47
|
+
|
|
48
|
+
The interface shows your conversation, an editor for prompts and commands, and a footer with the current folder, model, and session status. See [Use KnightCode in the terminal](usage.md) to learn how to add files, run commands, direct ongoing work, and manage results.
|
|
49
|
+
|
|
50
|
+
## 3. Choose a model
|
|
51
|
+
|
|
52
|
+
A **model** generates KnightCode's responses. A **provider** is the service or account KnightCode uses to access that model.
|
|
53
|
+
|
|
54
|
+
In KnightCode, run:
|
|
55
|
+
|
|
56
|
+
```text
|
|
57
|
+
/login
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Choose a provider, then follow the prompts to use a subscription or store an API key. Run `/model` afterward if you want to select a different available model.
|
|
61
|
+
|
|
62
|
+
See [Choose a model and provider](models.md) for supported providers, environment-variable authentication, local models, and custom endpoints.
|
|
63
|
+
|
|
64
|
+
## 4. Give KnightCode a task
|
|
65
|
+
|
|
66
|
+
KnightCode shows each file read, search, command, and edit it performs. It does not ask before every tool call.
|
|
67
|
+
|
|
68
|
+
Enter a task that matches your work, for example:
|
|
69
|
+
|
|
70
|
+
```text
|
|
71
|
+
Summarize @meeting-notes.md and save the action items to action-items.md.
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
```text
|
|
75
|
+
Explain how this repository is structured and how to run its checks.
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
```text
|
|
79
|
+
Compare @previous.csv with @current.csv and summarize the important changes.
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Type `@` in the editor to search for a file instead of entering its full path. When KnightCode finishes, review its response and any changed files. Use version control or backups for important work. For untrusted or unattended work, use a container or another sandbox. See [Security](security.md).
|
|
83
|
+
|
|
84
|
+
## Continue later
|
|
85
|
+
|
|
86
|
+
KnightCode saves sessions automatically. Exit KnightCode, then resume the most recent session for the same working folder with:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
knightcode --continue
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Use `/resume` to choose another saved session. See [Continue or branch a session](sessions.md) for session naming, branching, compaction, export, and sharing.
|
|
93
|
+
|
|
94
|
+
## Next steps
|
|
95
|
+
|
|
96
|
+
- [Use KnightCode interactively](usage.md) to learn input, commands, shortcuts, and queued messages.
|
|
97
|
+
- [Add instructions](configuration.md#context-files) that KnightCode should follow whenever it works in a folder.
|
|
98
|
+
- [Choose a model and provider](models.md).
|
|
99
|
+
|
|
100
|
+
### Choose how to customize KnightCode
|
|
101
|
+
|
|
102
|
+
Start with the least powerful mechanism that meets your need:
|
|
103
|
+
|
|
104
|
+
| Need | Start with |
|
|
105
|
+
|---|---|
|
|
106
|
+
| Give KnightCode persistent instructions for a folder | [`AGENTS.md`](configuration.md#context-files) |
|
|
107
|
+
| Reuse a prompt from the `/` menu | [Prompt template](prompt-templates.md) |
|
|
108
|
+
| Add task-specific instructions and supporting files | [Skill](skills.md) |
|
|
109
|
+
| Add executable tools, commands, or event handlers | [Extension](extensions.md) |
|
|
110
|
+
| Build a custom terminal component | [Terminal UI](tui.md) |
|
|
111
|
+
| Connect an unsupported model service | [Custom provider](custom-provider.md) |
|
|
112
|
+
| Install or distribute several resources | [KnightCode package](packages.md) |
|
|
113
|
+
|
|
114
|
+
## Uninstall KnightCode
|
|
115
|
+
|
|
116
|
+
If you installed KnightCode with npm, run:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
npm uninstall -g @knightcodeai/cli
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
If you used the installer, run it again and choose **Uninstall KnightCode**:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
curl -fsSL https://knightcode.dev/install.sh | sh
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Neither method removes configuration, credentials, sessions, or installed KnightCode packages from `~/.knightcode/agent/`.
|
package/docs/remote.md
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Remote sessions
|
|
2
|
+
|
|
3
|
+
`/remote` publishes the session running in your terminal to the web, so you can
|
|
4
|
+
watch it and reply from another device. The terminal keeps working normally.
|
|
5
|
+
|
|
6
|
+
## Getting started
|
|
7
|
+
|
|
8
|
+
Run `/remote`. The first time, a sign-in screen opens your browser on the
|
|
9
|
+
approval page and shows an eight-character code: sign in with GitHub, check the
|
|
10
|
+
page shows the same code, and approve. Escape cancels. The credential is stored
|
|
11
|
+
in `~/.knightcode/remote-auth.json` and reused afterwards, and the screen also
|
|
12
|
+
prints the URL for a headless box where nothing launched. Once the browser
|
|
13
|
+
approves, the screen confirms it and continues on enter, or by itself a few
|
|
14
|
+
seconds later.
|
|
15
|
+
|
|
16
|
+
Once signed in, `/remote` prints a link. You do not have to copy it: open
|
|
17
|
+
<https://remote.knightcode.dev> on your phone and the session appears in the
|
|
18
|
+
list.
|
|
19
|
+
|
|
20
|
+
## The web app
|
|
21
|
+
|
|
22
|
+
The list shows every session you have published, newest first, with its state:
|
|
23
|
+
**Working** while a turn is running in the terminal, **Connected** while the
|
|
24
|
+
terminal is attached and idle, **Disconnected** once it has gone. Filter it to
|
|
25
|
+
active or past sessions from the menu on the right.
|
|
26
|
+
|
|
27
|
+
Open a session to read the transcript. Runs of tool calls are folded into one
|
|
28
|
+
line such as _Ran 2 commands, created a file_; tap it to list the calls, and
|
|
29
|
+
tap a call to see what it did — the command and its output, the file and its
|
|
30
|
+
content, the diff an edit made.
|
|
31
|
+
|
|
32
|
+
The composer sends replies to the terminal. Type `/` to list the slash commands
|
|
33
|
+
the terminal can run from a message: extension commands, skills and prompt
|
|
34
|
+
templates. Built-in commands that open a terminal UI, such as `/model`, are not
|
|
35
|
+
offered.
|
|
36
|
+
|
|
37
|
+
The menu in the session's top-right corner copies the link or deletes the
|
|
38
|
+
session from the relay.
|
|
39
|
+
|
|
40
|
+
## Commands
|
|
41
|
+
|
|
42
|
+
| Command | Effect |
|
|
43
|
+
| --- | --- |
|
|
44
|
+
| `/remote` | Toggle publishing: start and print the link, or pause. Pausing keeps the room readable, and the next `/remote` resumes the same link |
|
|
45
|
+
| `/remote status` | Show the link and how many viewers are connected |
|
|
46
|
+
| `/remote stop` | Stop publishing and delete the room |
|
|
47
|
+
| `/remote logout` | Revoke the stored account credential and delete it locally |
|
|
48
|
+
|
|
49
|
+
`/remote` runs in the interactive terminal only. In `--print`, RPC and JSON
|
|
50
|
+
modes it reports that and does nothing.
|
|
51
|
+
|
|
52
|
+
## What the remote can and cannot do
|
|
53
|
+
|
|
54
|
+
A viewer can read the transcript, send prompts, run the slash commands listed
|
|
55
|
+
above, and stop the current turn. Prompts arrive as ordinary user messages and
|
|
56
|
+
appear in your terminal; `/remote` itself is never offered to a viewer.
|
|
57
|
+
|
|
58
|
+
A viewer cannot end your session, quit KnightCode, switch sessions, or change
|
|
59
|
+
model. Closing the browser tab, losing signal, or losing the relay does nothing
|
|
60
|
+
to the terminal. Your session ends only when you end it.
|
|
61
|
+
|
|
62
|
+
If the relay becomes unreachable the command does not fail: it reconnects with
|
|
63
|
+
backoff indefinitely, the footer shows `remote retrying`, and the agent carries
|
|
64
|
+
on working.
|
|
65
|
+
|
|
66
|
+
## Privacy and retention
|
|
67
|
+
|
|
68
|
+
Room contents pass through and are briefly stored by the relay so a device that
|
|
69
|
+
reconnects can catch up. That includes tool output, which can contain secrets if
|
|
70
|
+
a command prints them. Nothing is redacted: anything visible in your terminal is
|
|
71
|
+
visible in the room while it lives. Only the account that created a room can
|
|
72
|
+
read it.
|
|
73
|
+
|
|
74
|
+
A room stays readable as a past session for 30 days after the terminal
|
|
75
|
+
disconnects, and is deleted then, on `/remote stop`, or when you delete it from
|
|
76
|
+
the web app. Stored history is capped at 8 MB per room; older content is
|
|
77
|
+
dropped as the session grows. Images are not mirrored in either direction — an
|
|
78
|
+
image in the transcript appears as a placeholder recording its type and size.
|
|
79
|
+
|
|
80
|
+
## Configuration
|
|
81
|
+
|
|
82
|
+
| Environment variable | Default | Effect |
|
|
83
|
+
| --- | --- | --- |
|
|
84
|
+
| `KNIGHTCODE_REMOTE_RELAY` | `https://remote.knightcode.dev` | Relay origin to publish to |
|
|
85
|
+
| `KNIGHTCODE_REMOTE_CONFIG_DIR` | `~/.knightcode` | Directory holding `remote-auth.json` |
|
|
86
|
+
|
|
87
|
+
`/remote` refuses to start when `KNIGHTCODE_OFFLINE` is set.
|