kward 0.80.0 → 0.81.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +40 -0
- data/Gemfile.lock +2 -2
- data/README.md +1 -1
- data/doc/composer.md +5 -8
- data/doc/configuration.md +13 -3
- data/doc/permissions.md +1 -1
- data/doc/rpc.md +2 -1
- data/doc/sandboxing.md +4 -4
- data/doc/security.md +6 -9
- data/doc/shell.md +161 -196
- data/doc/skills.md +19 -5
- data/doc/tabs.md +1 -1
- data/doc/usage.md +6 -5
- data/lib/kward/agent.rb +11 -6
- data/lib/kward/ansi.rb +9 -1
- data/lib/kward/cli/commands.rb +7 -0
- data/lib/kward/cli/interactive_turn.rb +1 -1
- data/lib/kward/cli/memory_commands.rb +2 -2
- data/lib/kward/cli/plugins.rb +1 -1
- data/lib/kward/cli/project_skills.rb +99 -0
- data/lib/kward/cli/project_skills_commands.rb +87 -0
- data/lib/kward/cli/prompt_interface.rb +54 -4
- data/lib/kward/cli/rendering.rb +28 -2
- data/lib/kward/cli/runtime_helpers.rb +157 -19
- data/lib/kward/cli/sessions.rb +6 -4
- data/lib/kward/cli/settings.rb +1 -1
- data/lib/kward/cli/slash_commands.rb +7 -1
- data/lib/kward/cli/tabs.rb +4 -1
- data/lib/kward/cli.rb +21 -1
- data/lib/kward/compactor.rb +7 -2
- data/lib/kward/config_files.rb +30 -9
- data/lib/kward/conversation.rb +8 -5
- data/lib/kward/ekwsh.rb +37 -16
- data/lib/kward/hooks/audit_log.rb +5 -2
- data/lib/kward/interactive_pty_runner.rb +88 -22
- data/lib/kward/plugin_registry.rb +20 -13
- data/lib/kward/prompt_interface/composer_controller.rb +13 -1
- data/lib/kward/prompt_interface/editor/controller.rb +4 -0
- data/lib/kward/prompt_interface/editor/syntax_highlighter.rb +35 -10
- data/lib/kward/prompt_interface/key_handler.rb +78 -43
- data/lib/kward/prompt_interface/overlay_renderer.rb +12 -0
- data/lib/kward/prompt_interface/screen.rb +5 -0
- data/lib/kward/prompt_interface.rb +93 -21
- data/lib/kward/prompts/commands.rb +2 -0
- data/lib/kward/prompts/templates.rb +11 -6
- data/lib/kward/prompts.rb +6 -6
- data/lib/kward/rpc/server.rb +1 -0
- data/lib/kward/session_store.rb +3 -2
- data/lib/kward/skills/registry.rb +67 -12
- data/lib/kward/skills/trust_coordinator.rb +45 -0
- data/lib/kward/skills/trust_store.rb +107 -0
- data/lib/kward/telemetry/logger.rb +5 -2
- data/lib/kward/version.rb +1 -1
- metadata +5 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d2033aa9b07468c6668842a3b0ba51ef73cb0c1c58db95927c1159668129e345
|
|
4
|
+
data.tar.gz: 0f7c86a02ccf5e76f01adf3a8d654b3bd559ef27c93f6479dfd6724401427435
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 934c63dbcde19c9eba5dbdfb843a5cbb82a873d73371746d3db19c5698c27aa53ecef3820bb7099a928e077f05d04178190e4ddafef3ff8ed9e82aa7233c2d75
|
|
7
|
+
data.tar.gz: 05ac5a0a3a695f9b49c56059915e642511c85f0dcaa68e406f0b470763b589497a92950416a0f7eddb2a69b304c9b7f6bcef3bcbea49cedd8032b06871c3cfba
|
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,46 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to Kward will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [Unreleased]
|
|
6
|
+
|
|
7
|
+
## [0.81.0] - 2026-08-20
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- Added `capture <command>` inside `/shell` and `/capture <command>` in the normal composer for bounded, sanitized, transcript-friendly command execution.
|
|
12
|
+
- Added Tab completion for shell commands and paths when the normal interactive prompt input begins with `!`.
|
|
13
|
+
- Added workspace-scoped, digest-aware project skill trust decisions with interactive Allow, Deny, and Review prompts plus `/skills` and `kward skills` management commands.
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- Displayed packaged plugins with their folder name in the startup plugin list, such as `folder/plugin.rb`.
|
|
18
|
+
- Added a frozen composer display for line-oriented Git PTY commands while preserving the full-terminal handoff for full-screen programs.
|
|
19
|
+
- Changed external `/shell` commands and one-shot `!command` input to use interactive PTY terminal handoff by default, while retaining `pty` and `/pty` for compatibility.
|
|
20
|
+
- Made aliases configured in `ekwsh.yml` available to leading-`!` execution and command completion.
|
|
21
|
+
- Removed interactive PTY start and exit-status messages while retaining the submitted command echo.
|
|
22
|
+
- Changed shell and leading-`!` completion so the candidate list appears in an interactive overlay while repeated Tab presses cycle through candidates in the composer.
|
|
23
|
+
- Removed the `Tab` and `Shift+Tab` reasoning-effort shortcuts so the composer keeps its normal completion behavior.
|
|
24
|
+
|
|
25
|
+
### Fixed
|
|
26
|
+
|
|
27
|
+
- Refreshed composer status immediately after reasoning selection and interactive PTY commands, so reasoning levels and Git branch state no longer remain stale until the next input.
|
|
28
|
+
- Prevented composer flicker during interactive prompt, bang-command, and slash-command submission by deferring the submitted composer's repaint to the next command state.
|
|
29
|
+
- Preserved the busy composer while writing normal-turn transcript output so user-submission rendering does not clear it.
|
|
30
|
+
- Bound CSI-u `Ctrl+Q` input to close the read-only `/git diff` viewer, matching the existing raw-key binding and ESC behavior.
|
|
31
|
+
- Routed leading-`!` commands and aliases resolving to `kward edit <filename>` into the integrated editor instead of spawning a nested Kward process.
|
|
32
|
+
- Preserved safe, line-oriented PTY output such as `ls` by redrawing it into the transient transcript when returning from `/shell`, `!command`, or `/pty`, while leaving full-screen and keyboard-driven sessions terminal-owned.
|
|
33
|
+
- Removed legacy `pty` and `capture` mode markers from configured aliases expanded by `!command`, preventing valid aliases such as `glog: pty git log` from failing with status 127.
|
|
34
|
+
- Hardened interactive PTY cleanup, final-output draining, input EOF handling, resize propagation, and stopped-child recovery so terminal handoff reliably returns control to Kward.
|
|
35
|
+
- Normalized binary-tagged UTF-8 shell output before transcript rendering, preventing interactive `!` commands such as `tree` from crashing the composer.
|
|
36
|
+
- Deferred interactive warning output until startup transcript replay completes, keeping Runtime diagnostics visible instead of immediately overwriting them with the replayed transcript.
|
|
37
|
+
|
|
38
|
+
## [0.80.1] - 2026-07-27
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- Avoided repeated full-buffer syntax scans while rendering generic-language editor lines, keeping Python and other supported languages responsive during cursor movement.
|
|
43
|
+
- Routed interactive configuration, plugin, skill, compaction, memory, and logging warnings through synchronized `Runtime>` output so diagnostics cannot corrupt the terminal layout.
|
|
44
|
+
|
|
5
45
|
## [0.80.0] - 2026-07-27
|
|
6
46
|
|
|
7
47
|
### Added
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
kward (0.
|
|
4
|
+
kward (0.81.0)
|
|
5
5
|
base64
|
|
6
6
|
nokogiri
|
|
7
7
|
tiktoken_ruby
|
|
@@ -146,7 +146,7 @@ CHECKSUMS
|
|
|
146
146
|
html-proofer (5.2.1) sha256=fdd958a7cbf9c3255fb96fe7cfc4e611f64e2706e469488a3326309ad007d2fd
|
|
147
147
|
io-event (1.16.2) sha256=9f9cb0a96ea5c3850a672606c65f27bc96d7621399ef6196acbfe2be0cd1279c
|
|
148
148
|
json (2.19.9) sha256=9b9025b7cdddafa38d316eca0b2358488e42d417045c1b90d216a9fefe46b79a
|
|
149
|
-
kward (0.
|
|
149
|
+
kward (0.81.0)
|
|
150
150
|
logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
|
|
151
151
|
metrics (0.15.0) sha256=61ded5bac95118e995b1bc9ed4a5f19bc9814928a312a85b200abbdac9039072
|
|
152
152
|
minitest (6.0.6) sha256=153ea36d1d987a62942382b61075745042a2b3123b1cd48f4c3675af9cc7d6f1
|
data/README.md
CHANGED
|
@@ -72,7 +72,7 @@ Work safely:
|
|
|
72
72
|
Everyday workflows:
|
|
73
73
|
|
|
74
74
|
- [Sessions](doc/session-management.md): resume, clone, fork, rewind, compact, and navigate saved work.
|
|
75
|
-
- [Interactive composer](doc/composer.md): use multiline input, completion, history, files, reasoning
|
|
75
|
+
- [Interactive composer](doc/composer.md): use multiline input, completion, history, files, reasoning selection, busy input, and images.
|
|
76
76
|
- [Tabs](doc/tabs.md): keep several conversations open and run work in another tab.
|
|
77
77
|
- [Project files](doc/files.md): browse, search, mention, open, and edit workspace files.
|
|
78
78
|
- [Integrated editor](doc/editor.md): open files from the shell or composer, edit in-place, and choose editor keybindings.
|
data/doc/composer.md
CHANGED
|
@@ -38,7 +38,7 @@ The composer supports familiar line-editing keys:
|
|
|
38
38
|
| `Alt+D` | Delete the word after the cursor |
|
|
39
39
|
| `Ctrl+U` / `Ctrl+K` | Kill from the cursor to the start or end of the line |
|
|
40
40
|
| `Ctrl+Y` | Yank the most recently killed composer text |
|
|
41
|
-
| `Ctrl+L` | Redraw the terminal UI |
|
|
41
|
+
| `Ctrl+L` | Redraw the terminal UI and remove transient current-view output |
|
|
42
42
|
| `Ctrl+D` | Delete at the cursor, or exit when the composer is empty |
|
|
43
43
|
|
|
44
44
|
These are composer bindings. The integrated editor, shell, Git view, file browser, and plugin interfaces have their own keymaps.
|
|
@@ -115,15 +115,12 @@ History survives restarts. It contains submitted prompt text and successful `$pa
|
|
|
115
115
|
|
|
116
116
|
## Change reasoning effort
|
|
117
117
|
|
|
118
|
-
|
|
118
|
+
The composer status line shows the current provider, model, and reasoning effort. Use `/reasoning` or `/model` to choose the reasoning effort explicitly.
|
|
119
119
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
Tab is context-sensitive:
|
|
120
|
+
Tab follows the normal completion behavior:
|
|
123
121
|
|
|
124
122
|
- in slash or `@path` completion, it accepts the selected match,
|
|
125
123
|
- in `$path` completion, it opens the selected file,
|
|
126
|
-
- otherwise, it changes reasoning effort,
|
|
127
124
|
- in other modal interfaces, it follows that interface's own controls.
|
|
128
125
|
|
|
129
126
|
## Work with tabs
|
|
@@ -214,6 +211,6 @@ If rendering becomes corrupted after resize or after an external program writes
|
|
|
214
211
|
/redraw
|
|
215
212
|
```
|
|
216
213
|
|
|
217
|
-
You can also press `Ctrl+L
|
|
214
|
+
You can also press `Ctrl+L`; it rebuilds the durable current-tab view without deleting the conversation transcript, removing transient shell output. If a shortcut never reaches Kward, prefer its slash-command equivalent or change `composer.tab_keybindings` in `/settings`.
|
|
218
215
|
|
|
219
|
-
|
|
216
|
+
External commands inside `/shell` and one-shot `!command` input receive an interactive PTY by default, so full-screen programs such as Vim or `less` temporarily own the terminal. Use `capture <command>` inside `/shell` or `/capture <command>` from the normal composer when output should remain in Kward's transcript instead.
|
data/doc/configuration.md
CHANGED
|
@@ -81,7 +81,17 @@ long-polling adapter and setup instructions.
|
|
|
81
81
|
|
|
82
82
|
### Project skills
|
|
83
83
|
|
|
84
|
-
Kward loads user-level skills
|
|
84
|
+
Kward loads user-level skills automatically. Project-level skills require an explicit workspace trust decision. In the interactive TUI, Kward asks when a new or changed skill appears; use `/skills status`, `/skills trust`, `/skills untrust`, and `/new` to inspect, manage, and activate decisions.
|
|
85
|
+
|
|
86
|
+
For non-interactive use:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
kward --working-directory /path/to/project skills status
|
|
90
|
+
kward --working-directory /path/to/project skills review
|
|
91
|
+
kward --working-directory /path/to/project skills trust
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Trust records are stored in `~/.kward/trusted_project_skills.json`. The legacy global override remains available:
|
|
85
95
|
|
|
86
96
|
```json
|
|
87
97
|
{
|
|
@@ -176,7 +186,7 @@ aliases:
|
|
|
176
186
|
|
|
177
187
|
`env` values are applied when shell mode starts, after Kward's conservative color defaults. Keys must look like environment variable names (`A_Z`, digits after the first character, and underscores); invalid keys are ignored. Values are converted to strings.
|
|
178
188
|
|
|
179
|
-
`aliases` expand the first word of a command once. For example, `ll lib` runs `ls -la lib`. Built-in `ekwsh` commands such as `cd`, `pwd`, `export`, `unset`, `alias`, `clear`, `pty`, and `exit` take precedence over aliases. Run `alias` inside `ekwsh` to list configured aliases. Aliases
|
|
189
|
+
`aliases` expand the first word of a command once. For example, `ll lib` runs `ls -la lib`. Configured aliases are available both inside `/shell` and after the normal composer's `!` prefix, including command-name Tab completion. Built-in `ekwsh` commands such as `cd`, `pwd`, `export`, `unset`, `alias`, `capture`, `clear`, `pty`, and `exit` take precedence over aliases inside `/shell`. External commands receive an interactive PTY by default. An alias value can begin with `capture` when its `/shell` output should use the configured timeout, output limit, and transcript sanitization. Leading-`!` alias invocations are always interactive, so Kward removes a leading `capture` or legacy `pty` mode marker from the expanded alias before execution. Run `alias` inside `ekwsh` to list configured aliases. Aliases created at runtime with that built-in belong only to the current `/shell` session and are not available to `!command` input.
|
|
180
190
|
|
|
181
191
|
## Provider and model settings
|
|
182
192
|
|
|
@@ -355,7 +365,7 @@ The busy composer shows a short Ctrl+C cancellation hint by default. To hide it:
|
|
|
355
365
|
|
|
356
366
|
This only hides the hint text; Ctrl+C still stops the current running response.
|
|
357
367
|
|
|
358
|
-
In the normal composer prompt,
|
|
368
|
+
In the normal composer prompt, choose reasoning effort with `/reasoning` or `/model`; `Tab` keeps its normal file and slash-command completion behavior.
|
|
359
369
|
|
|
360
370
|
`tab_keybindings` controls how the composer handles tab navigation shortcuts:
|
|
361
371
|
|
data/doc/permissions.md
CHANGED
|
@@ -175,7 +175,7 @@ The policy runs before Kward dispatches a model-requested tool. It does not cons
|
|
|
175
175
|
|
|
176
176
|
- a permitted shell command can access files, processes, credentials, and network services available to your user account;
|
|
177
177
|
- command-text rules are useful review controls, not a reliable way to enforce network destinations or all subprocess behavior;
|
|
178
|
-
- direct commands that you type yourself—`!command`, `/shell`, and `/pty`—are treated as your actions and are outside this first policy scope;
|
|
178
|
+
- direct commands that you type yourself—`!command`, `/capture`, `/shell`, and `/pty`—are treated as your actions and are outside this first policy scope;
|
|
179
179
|
- plugins, hooks, and MCP servers are trusted local extensions with their own process access.
|
|
180
180
|
|
|
181
181
|
For sensitive work, use a restricted operating-system account, container, virtual machine, or disposable checkout. [Command sandboxing](sandboxing.md) is a separate, opt-in operating-system boundary for model-requested `run_shell_command` workers. It can add filesystem and child-network restrictions, but does not cover Kward's host process, extensions, or direct interactive commands.
|
data/doc/rpc.md
CHANGED
|
@@ -76,6 +76,7 @@ Read `capabilities` at runtime instead of assuming every feature is available. I
|
|
|
76
76
|
- `memory`: opt-in structured memory support, interactive prompt injection only, JSON/JSONL local storage, and dedicated `memory/*` methods.
|
|
77
77
|
- `commands`: supported `commands/list` capability for prompt, skill, and plugin command sources, plus plugin execution through `commands/run` or plugin slash turns.
|
|
78
78
|
- `skillCapture`: capture a reviewed personal `SKILL.md` from any saved session’s active branch through `skills/captureSessions`, `skills/captureDraft`, and `skills/saveCapturedDraft`.
|
|
79
|
+
- `projectSkillTrust`: explicitly unsupported over RPC. RPC clients cannot answer the interactive Allow/Deny/Review decision, so project skills remain skipped unless the global `skills.trust_project` override is enabled.
|
|
79
80
|
- `mcp`: local stdio MCP server support through the shared `mcpServers` config. RPC exposes MCP tools to turns and advertises discovery with `methods: ["tools/list", "mcp/status"]`, `toolMetadata: true`, and `serverStatus: true`. It does not support MCP resources, prompts, sampling, or Streamable HTTP.
|
|
80
81
|
- `startupResources`: supported startup resource listing for context, skills, prompts, and plugins.
|
|
81
82
|
- `extensionUi`: question bridge support via `ui/question` and `ui/answerQuestion`, plus plugin footer updates via `ui/footer`; other UI primitives are explicitly unsupported.
|
|
@@ -83,7 +84,7 @@ Read `capabilities` at runtime instead of assuming every feature is available. I
|
|
|
83
84
|
- `security`: trusted-local behavior and optional per-turn tool approval. By default, RPC turns have no workspace mutation guard or tool approval, so shell commands and file changes can run. Clients can inspect file-tool guardrails through `capabilities.events.tools.workspaceGuardrails` and `runtime/state.workspaceGuardrailsEnabled`. `security.sandbox` reports the command sandbox mode, enforcement backend, and filesystem and network capabilities; session pinning and one-time elevation are unsupported. See [Command sandboxing](sandboxing.md) for the boundary and its limits.
|
|
84
85
|
- `export`: supported transcript export formats. Currently `markdown` and `html`; default is `markdown`.
|
|
85
86
|
- `starterPack`: explicitly unsupported (`supported: false`, reason `cliOnlyInstallCommand`). Use `kward init` from the shell.
|
|
86
|
-
- `shell`: explicitly unsupported (`supported: false`, reason `interactiveTuiOnly`) because `/shell
|
|
87
|
+
- `shell`: explicitly unsupported (`supported: false`, reason `interactiveTuiOnly`) because `/shell`, `!command`, `/capture`, and PTY handoff require the local TUI. Model-requested `run_shell_command` tools remain bounded, captured, and noninteractive over RPC.
|
|
87
88
|
- `logging`: local redacted telemetry, its directory and enabled categories, `logging/stats` and `logging/tokenCsv`, bucketed `usageCsv` support, JSONL storage, and 10 MB rotation with manual retention. Logs contain redacted metadata only. Configuration uses the `logging` key and `KWARD_LOGGING` environment prefix.
|
|
88
89
|
|
|
89
90
|
### `shutdown`
|
data/doc/sandboxing.md
CHANGED
|
@@ -77,9 +77,9 @@ worker. The strict agent also disables configured MCP clients and lifecycle
|
|
|
77
77
|
hooks because they run in the Kward host process rather than inside the command
|
|
78
78
|
sandbox.
|
|
79
79
|
|
|
80
|
-
This does not contain the
|
|
81
|
-
those are user-directed host-process operations. Generic
|
|
82
|
-
commands still cannot write Git metadata. Active worktree tabs additionally
|
|
80
|
+
This does not contain the user-directed `/shell`, `!command`, `/capture`, or
|
|
81
|
+
`/pty` features; those are user-directed host-process operations. Generic
|
|
82
|
+
model-requested shell commands still cannot write Git metadata. Active worktree tabs additionally
|
|
83
83
|
expose a narrow `git_commit` tool for explicit agent-requested commits; it runs
|
|
84
84
|
through the trusted host-side Git workflow rather than widening the shell
|
|
85
85
|
sandbox. The interactive `/git` flow remains available for manual review and
|
|
@@ -111,7 +111,7 @@ It does not sandbox:
|
|
|
111
111
|
- the Kward Ruby host process;
|
|
112
112
|
- model-provider, search-provider, or RPC traffic;
|
|
113
113
|
- trusted Ruby plugins;
|
|
114
|
-
- MCP servers, lifecycle hooks, `/shell`, `!command`, or `/pty`.
|
|
114
|
+
- MCP servers, lifecycle hooks, `/shell`, `!command`, `/capture`, or `/pty`.
|
|
115
115
|
|
|
116
116
|
Sandboxed command workers receive a minimal environment: Kward preserves only
|
|
117
117
|
basic terminal, locale, and path variables, then supplies a private `HOME` and
|
data/doc/security.md
CHANGED
|
@@ -56,8 +56,9 @@ Kward's built-in file tools normally resolve paths inside the active workspace.
|
|
|
56
56
|
|
|
57
57
|
These protections reduce accidental edits. They do not contain the whole process:
|
|
58
58
|
|
|
59
|
-
- With `sandbox.mode: off` (the default), `run_shell_command`, `!command`, `/shell`, and `/pty` run with your user permissions.
|
|
60
|
-
- A non-off [command sandbox](sandboxing.md) restricts only model-requested `run_shell_command` workers and their descendants. It does not cover `!command`, `/shell`, or `/pty`.
|
|
59
|
+
- With `sandbox.mode: off` (the default), `run_shell_command`, `!command`, `/capture`, `/shell`, and `/pty` run with your user permissions.
|
|
60
|
+
- A non-off [command sandbox](sandboxing.md) restricts only model-requested `run_shell_command` workers and their descendants. It does not cover `!command`, `/capture`, `/shell`, or `/pty`.
|
|
61
|
+
- External `/shell` commands, `!command`, and `/pty` forward child output directly to your terminal so interactive programs work. This bypasses transcript control-sequence sanitization; run only commands you trust with terminal access. `capture <command>` and `/capture <command>` sanitize their captured output.
|
|
61
62
|
- Plugins, command hooks, and MCP servers are local processes with the same general operating-system access.
|
|
62
63
|
- Read-before-edit applies to Kward's file tools, not to arbitrary shell commands or extension code.
|
|
63
64
|
|
|
@@ -67,7 +68,7 @@ You can disable the file boundary with `tools.workspace_guardrails: false`, but
|
|
|
67
68
|
|
|
68
69
|
A worktree-backed tab uses its linked worktree as the active workspace and requires an OS-enforced `workspace_write` command sandbox. If the platform cannot provide filesystem enforcement, Kward refuses to activate the worktree rather than running model-requested shell commands unrestricted.
|
|
69
70
|
|
|
70
|
-
The strict worktree agent disables configured MCP clients and lifecycle hooks for that tab because those extensions run outside the command-worker sandbox. The interactive `/shell`, `!command`, and `/pty` features remain host-process features and are not covered by the worktree boundary. Use them only when you intentionally want to run a user-directed command outside the model command sandbox.
|
|
71
|
+
The strict worktree agent disables configured MCP clients and lifecycle hooks for that tab because those extensions run outside the command-worker sandbox. The interactive `/shell`, `!command`, `/capture`, and `/pty` features remain host-process features and are not covered by the worktree boundary. Use them only when you intentionally want to run a user-directed command outside the model command sandbox.
|
|
71
72
|
|
|
72
73
|
Git worktrees share repository metadata. Kward keeps Git metadata protection enabled for generic model-requested commands. Active worktree tabs provide a narrow host-side `git_commit` tool for explicit agent commits; the interactive `/git` flow remains the manual review, staging, and commit path.
|
|
73
74
|
|
|
@@ -95,13 +96,9 @@ A repository-level `AGENTS.md` is guidance for the model, not executable code. K
|
|
|
95
96
|
|
|
96
97
|
### Project skills
|
|
97
98
|
|
|
98
|
-
Project skills under `.kward/skills/` and `.agents/skills/`
|
|
99
|
+
Project skills under `.kward/skills/` and `.agents/skills/` require an explicit trust decision. In the interactive TUI, Kward asks for `Allow`, `Deny`, or `Review` when a new or changed skill appears. Review shows bounded `SKILL.md` content and lists referenced resources without executing them. Decisions are stored per canonical workspace and skill digest in `~/.kward/trusted_project_skills.json`, so changes require another review.
|
|
99
100
|
|
|
100
|
-
|
|
101
|
-
/settings → Tools & Search → Trust project skills
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
This setting trusts project skills generally; it is not a per-repository digest. A skill's `allowed-tools` metadata does not grant permissions or constrain tools in Kward.
|
|
101
|
+
Use `/skills status`, `/skills trust`, `/skills untrust`, or the non-interactive `kward skills` command to manage the records. The legacy `skills.trust_project` setting remains a global override. A skill's `allowed-tools` metadata does not grant permissions or constrain tools in Kward.
|
|
105
102
|
|
|
106
103
|
### Workspace hooks
|
|
107
104
|
|