kward 0.74.0 → 0.75.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 +35 -0
- data/Gemfile.lock +2 -2
- data/README.md +4 -2
- data/Rakefile +18 -0
- data/doc/configuration.md +56 -3
- data/doc/extensibility.md +6 -19
- data/doc/getting-started.md +1 -1
- data/doc/lifecycle-hooks.md +424 -0
- data/doc/memory.md +1 -1
- data/doc/personas.md +2 -2
- data/doc/plugins.md +1 -1
- data/doc/releasing.md +7 -15
- data/doc/rpc.md +108 -16
- data/doc/session-management.md +9 -9
- data/doc/skills.md +199 -0
- data/doc/usage.md +7 -7
- data/lib/kward/agent.rb +72 -22
- data/lib/kward/auth/anthropic_oauth.rb +5 -87
- data/lib/kward/auth/oauth_helpers.rb +105 -0
- data/lib/kward/auth/openai_oauth.rb +4 -86
- data/lib/kward/cli/commands.rb +9 -2
- data/lib/kward/cli/compaction.rb +7 -0
- data/lib/kward/cli/git.rb +30 -3
- data/lib/kward/cli/hook_commands.rb +258 -0
- data/lib/kward/cli/memory_commands.rb +1 -5
- data/lib/kward/cli/plugins.rb +41 -1
- data/lib/kward/cli/prompt_interface.rb +32 -3
- data/lib/kward/cli/rendering.rb +1 -1
- data/lib/kward/cli/runtime_helpers.rb +44 -5
- data/lib/kward/cli/sessions.rb +13 -0
- data/lib/kward/cli/settings.rb +226 -152
- data/lib/kward/cli/slash_commands.rb +81 -42
- data/lib/kward/cli/tabs.rb +26 -6
- data/lib/kward/cli.rb +26 -3
- data/lib/kward/cli_transcript_formatter.rb +0 -7
- data/lib/kward/compaction/token_estimator.rb +112 -0
- data/lib/kward/compactor.rb +42 -116
- data/lib/kward/config_files.rb +117 -25
- data/lib/kward/deep_copy.rb +42 -0
- data/lib/kward/diff_view_mode.rb +36 -0
- data/lib/kward/events.rb +1 -0
- data/lib/kward/export_path.rb +2 -6
- data/lib/kward/frontmatter.rb +43 -0
- data/lib/kward/hooks/audit_log.rb +121 -0
- data/lib/kward/hooks/catalog.rb +110 -0
- data/lib/kward/hooks/command_handler.rb +66 -0
- data/lib/kward/hooks/config_loader.rb +104 -0
- data/lib/kward/hooks/decision.rb +102 -0
- data/lib/kward/hooks/event.rb +60 -0
- data/lib/kward/hooks/http_handler.rb +72 -0
- data/lib/kward/hooks/manager.rb +158 -0
- data/lib/kward/hooks/matcher.rb +75 -0
- data/lib/kward/hooks.rb +16 -0
- data/lib/kward/markdown_transcript.rb +4 -3
- data/lib/kward/mcp/client.rb +1 -1
- data/lib/kward/mcp/server_config.rb +7 -3
- data/lib/kward/mcp/stdio_transport.rb +7 -1
- data/lib/kward/memory/turn_context.rb +19 -0
- data/lib/kward/message_access.rb +2 -2
- data/lib/kward/message_text.rb +19 -0
- data/lib/kward/model/client.rb +13 -45
- data/lib/kward/model/context_usage.rb +10 -4
- data/lib/kward/model/copilot_models.rb +44 -0
- data/lib/kward/model/model_info.rb +24 -0
- data/lib/kward/model/payloads.rb +15 -17
- data/lib/kward/model/stream_parser.rb +178 -13
- data/lib/kward/pan/server.rb +51 -2
- data/lib/kward/path_guard.rb +13 -0
- data/lib/kward/plugin_registry.rb +86 -25
- data/lib/kward/prompt_interface/editor/controller.rb +60 -1
- data/lib/kward/prompt_interface/editor/renderer.rb +11 -0
- data/lib/kward/prompt_interface/editor/state.rb +5 -1
- data/lib/kward/prompt_interface/selection_prompt.rb +26 -6
- data/lib/kward/prompt_interface.rb +4 -1
- data/lib/kward/prompts/commands.rb +3 -3
- data/lib/kward/prompts.rb +7 -7
- data/lib/kward/rpc/mcp_status.rb +50 -0
- data/lib/kward/rpc/prompt_bridge.rb +38 -4
- data/lib/kward/rpc/runtime_payloads.rb +1 -1
- data/lib/kward/rpc/server.rb +94 -14
- data/lib/kward/rpc/session_manager.rb +258 -33
- data/lib/kward/rpc/session_metrics.rb +1 -1
- data/lib/kward/rpc/session_tree_rows.rb +13 -64
- data/lib/kward/rpc/tool_event_normalizer.rb +16 -2
- data/lib/kward/rpc/transcript_normalizer.rb +9 -10
- data/lib/kward/rpc/turn_context.rb +109 -0
- data/lib/kward/session_store.rb +6 -20
- data/lib/kward/session_tree_nodes.rb +98 -18
- data/lib/kward/session_tree_renderer.rb +6 -61
- data/lib/kward/skills/registry.rb +109 -17
- data/lib/kward/tools/mcp_tool.rb +4 -0
- data/lib/kward/tools/read_skill.rb +9 -4
- data/lib/kward/tools/registry.rb +266 -8
- data/lib/kward/tools/search/code.rb +4 -22
- data/lib/kward/tools/search/web.rb +28 -2
- data/lib/kward/update_check.rb +117 -0
- data/lib/kward/version.rb +1 -1
- data/lib/kward/workers/manager.rb +43 -3
- data/lib/kward/workspace.rb +3 -1
- data/templates/default/fulldoc/html/css/kward.css +22 -0
- data/templates/default/fulldoc/html/js/kward.js +2 -0
- data/templates/default/kward_navigation.rb +4 -2
- data/templates/default/layout/html/setup.rb +2 -0
- metadata +25 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 063b8f53ff1a13adc3171af1201b12dcbbd014b59edf37c61f963614ceb79ea5
|
|
4
|
+
data.tar.gz: db3f8715d8e648326a3d1dbf746636092dca709addadc6e629acec11016d5e13
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c483b653b15e10415ec322dfea7f0e3a23df7e416260eaaf91d66cb711348573f4ecc642db07b55786f0f01389f5421549293a5c2ead483947152d5702909572
|
|
7
|
+
data.tar.gz: faa9827cdc03b0d48fdee98f4ecf40b7157ed8989800236226adc138d8ecabe52855a67d472c85174d0a3365527ed4aab9ec63ded872a61ba9e85c62b08a4c8b
|
data/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,39 @@ All notable changes to Kward will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.75.0] - 2026-07-09
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- Added `rake release:preflight` to run release checks, build docs, build the gem, and print packaged files.
|
|
12
|
+
- Added cached RubyGems update notices on the fresh interactive startup screen.
|
|
13
|
+
- Added an Interface `/settings` option for choosing the integrated diff viewer mode: auto, unified, or side-by-side.
|
|
14
|
+
- Added lifecycle hooks for deterministic runtime policy and automation, including Ruby plugin hooks, command hooks configured in `config.json`, tool/shell/file/turn/model events, and allow/deny/ask/modify/warn decisions.
|
|
15
|
+
- Added Agent Skills interoperability across `~/.agents/skills`, project `.agents/skills`, Kward-native skill directories, explicit `/skill` activation, RPC skill commands, resource listing, and compaction preservation for activated skills.
|
|
16
|
+
- Added RPC MCP/tool discovery metadata, session-aware `tools/list`, `mcp/status`, and initialize capability reporting for MCP discovery.
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- Changed code search to share the web/fetch HTTP adapter for package and GitHub lookups.
|
|
21
|
+
- Changed OpenAI and Anthropic OAuth flows to share browser callback and token helper mechanics.
|
|
22
|
+
- Changed context token counting to reuse loaded tokenizer encodings per model.
|
|
23
|
+
- Changed RPC capability format names from Tauren-specific identifiers to Kward-neutral identifiers.
|
|
24
|
+
- Changed `/settings` to require only picker support, with live overlay redraw remaining optional for overlay-specific settings.
|
|
25
|
+
- Changed new default configs to include explicit overlay and web-search defaults while preserving existing behavior for partial configs.
|
|
26
|
+
- Changed interactive `/settings` menus to return to the last changed option instead of resetting to the first settings screen.
|
|
27
|
+
- Changed the saved session picker slash command from `/sessions` to `/session`, kept `/resume` as an alias, and replaced `/name` with `/session name`.
|
|
28
|
+
- Changed session picker search to use Tab, and Tab again returns to the list without clearing the current search text.
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
|
|
32
|
+
- Fixed RPC memory auto-summary so completed RPC turns learn memories when memory and auto-summary are enabled.
|
|
33
|
+
- Fixed worker lifecycle hooks so create/start blocking decisions stop worker jobs before they run.
|
|
34
|
+
- Fixed RPC plugin reloads so existing sessions rebuild their agent, tool registry, and lifecycle hook runtime.
|
|
35
|
+
- Fixed streamed Codex reasoning whitespace so repeated blank lines collapse to a single empty line.
|
|
36
|
+
- Fixed default persona spelling in new configs and the documented Anthropic default model.
|
|
37
|
+
- Fixed context-usage estimates for restored sessions whose provider differs from the current client default.
|
|
38
|
+
- Fixed project skill discovery to use the active conversation workspace instead of the process working directory.
|
|
39
|
+
|
|
7
40
|
## [0.74.0] - 2026-06-30
|
|
8
41
|
|
|
9
42
|
### Added
|
|
@@ -16,6 +49,8 @@ All notable changes to Kward will be documented in this file.
|
|
|
16
49
|
|
|
17
50
|
### Fixed
|
|
18
51
|
|
|
52
|
+
- Fixed tab switching while busy local commands such as `/compact` are running, including restoring the busy spinner when returning to the tab.
|
|
53
|
+
- Fixed repeated compaction for compacted sessions that continue growing after later turns.
|
|
19
54
|
- Fixed editor undo/redo so selections do not become sticky after restoring buffer contents.
|
|
20
55
|
- Fixed busy composer slash commands so they are blocked instead of being queued or sent as in-flight steering.
|
|
21
56
|
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
kward (0.
|
|
4
|
+
kward (0.75.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.75.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
|
@@ -48,6 +48,7 @@ kward # start an interactive chat
|
|
|
48
48
|
kward help # show available commands and examples
|
|
49
49
|
/login # from inside Kward: sign in or save provider credentials
|
|
50
50
|
kward login # from your shell: sign in or save provider credentials
|
|
51
|
+
kward hooks doctor # inspect lifecycle hook setup
|
|
51
52
|
kward "Explain this project" # run one prompt and exit
|
|
52
53
|
kward --working-directory ~/code/project "Explain this project"
|
|
53
54
|
```
|
|
@@ -63,7 +64,7 @@ See [Authentication](doc/authentication.md) for more details about sign-in optio
|
|
|
63
64
|
- Save, resume, clone, compact, and export sessions.
|
|
64
65
|
- Extend the Agent with trusted Ruby plugins for custom commands, footer UI, prompt context, and transcript-event observers.
|
|
65
66
|
- Use optional memory, personas, prompt templates, and skills.
|
|
66
|
-
- Serve
|
|
67
|
+
- Serve a JSON-RPC backend for trusted local UI clients.
|
|
67
68
|
|
|
68
69
|
## Documentation
|
|
69
70
|
|
|
@@ -88,7 +89,8 @@ Advanced:
|
|
|
88
89
|
|
|
89
90
|
- [Extensibility](doc/extensibility.md): `PRINCIPLES.md`, workspace `AGENTS.md`, skills, prompt templates, and extension choices.
|
|
90
91
|
- [Plugins](doc/plugins.md): trusted Ruby plugins for commands, footer UI, prompt context, transcript events, and RPC clients.
|
|
91
|
-
- [
|
|
92
|
+
- [Lifecycle hooks](doc/lifecycle-hooks.md): deterministic runtime hooks for policy, approvals, automation, and command-hook integrations.
|
|
93
|
+
- [RPC protocol](doc/rpc.md): JSON-RPC backend mode for trusted local UI clients.
|
|
92
94
|
- [Releasing](doc/releasing.md): release checklist for RubyGems publishing.
|
|
93
95
|
- [Agent tools](doc/agent-tools.md): overview of model-callable tools, token-saving behavior, and tool categories.
|
|
94
96
|
- [Workspace tools](doc/workspace-tools.md): local file, edit, and shell command tools.
|
data/Rakefile
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
require "fileutils"
|
|
2
2
|
require "html-proofer"
|
|
3
3
|
require "rdoc/task"
|
|
4
|
+
require "rubygems/package"
|
|
4
5
|
require "webrick"
|
|
5
6
|
require "yard"
|
|
7
|
+
require_relative "lib/kward/version"
|
|
6
8
|
require "yard/rake/yardoc_task"
|
|
7
9
|
|
|
8
10
|
DOCS_WATCH_GLOBS = [
|
|
@@ -26,6 +28,11 @@ def rebuild_docs
|
|
|
26
28
|
system({ "DOCS_SERVE_REBUILD" => "1" }, "bundle", "exec", "rake", "docs:build") || abort("Documentation rebuild failed")
|
|
27
29
|
end
|
|
28
30
|
|
|
31
|
+
def packaged_gem_files(gem_name)
|
|
32
|
+
gem = Gem::Package.new(gem_name)
|
|
33
|
+
gem.spec.files.sort
|
|
34
|
+
end
|
|
35
|
+
|
|
29
36
|
def rewrite_yard_markdown_links
|
|
30
37
|
guide_names = Dir.glob("doc/*.md").map { |path| File.basename(path, ".md") }
|
|
31
38
|
|
|
@@ -46,6 +53,7 @@ end
|
|
|
46
53
|
|
|
47
54
|
task default: :test
|
|
48
55
|
|
|
56
|
+
desc "Run the full test suite"
|
|
49
57
|
task :test do
|
|
50
58
|
ruby "-Itest", "-e", 'Dir["test/**/test_*.rb"].sort.each { |file| require_relative file }'
|
|
51
59
|
end
|
|
@@ -66,6 +74,16 @@ YARD::Rake::YardocTask.new do |yard|
|
|
|
66
74
|
]
|
|
67
75
|
end
|
|
68
76
|
|
|
77
|
+
namespace :release do
|
|
78
|
+
desc "Run release checks and build a local gem"
|
|
79
|
+
task preflight: [:test, "docs:check"] do
|
|
80
|
+
gem_name = "kward-#{Kward::VERSION}.gem"
|
|
81
|
+
FileUtils.rm_f(gem_name)
|
|
82
|
+
sh "gem", "build", "kward.gemspec"
|
|
83
|
+
puts packaged_gem_files(gem_name)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
69
87
|
namespace :docs do
|
|
70
88
|
desc "Serve the built YARD documentation site locally and rebuild on changes"
|
|
71
89
|
task serve: :build do
|
data/doc/configuration.md
CHANGED
|
@@ -26,6 +26,16 @@ Small examples:
|
|
|
26
26
|
|
|
27
27
|
See [MCP servers](mcp.md) for connecting local Model Context Protocol servers such as Safari's browser automation server.
|
|
28
28
|
|
|
29
|
+
```json
|
|
30
|
+
{
|
|
31
|
+
"skills": {
|
|
32
|
+
"trust_project": true
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
By default, Kward loads user-level skills but skips project-level skills from the workspace. Set `skills.trust_project` to `true`, or use `/settings` → `Tools & Search` → `Trust project skills`, when you trust the repository's `.kward/skills` or `.agents/skills` directories. See [Skills](skills.md) for skill locations and examples.
|
|
38
|
+
|
|
29
39
|
```json
|
|
30
40
|
{
|
|
31
41
|
"memory": {
|
|
@@ -52,6 +62,31 @@ By default, Kward stores user data under `~/.kward`:
|
|
|
52
62
|
|
|
53
63
|
When `KWARD_CONFIG_PATH=/path/to/config.json` is set, most config-related files live beside that file instead. User plugins are the exception: they are loaded only from `~/.kward/plugins`. See [Plugins](plugins.md) for writing and loading user plugins.
|
|
54
64
|
|
|
65
|
+
## Lifecycle hooks
|
|
66
|
+
|
|
67
|
+
Configure command or HTTP lifecycle hooks with a top-level `hooks` object. Each key is an event name and each value is an array of hook entries. Command hooks receive event JSON on stdin and return decision JSON on stdout. HTTP hooks receive event JSON by `POST` and return decision JSON in the response body.
|
|
68
|
+
|
|
69
|
+
```json
|
|
70
|
+
{
|
|
71
|
+
"hooks": {
|
|
72
|
+
"shell_command_before": [
|
|
73
|
+
{
|
|
74
|
+
"id": "block-release",
|
|
75
|
+
"type": "command",
|
|
76
|
+
"command": "~/.kward/hooks/block-release.rb",
|
|
77
|
+
"timeout_seconds": 5,
|
|
78
|
+
"failure_policy": "deny",
|
|
79
|
+
"match": { "command_regex": "\\bgem push\\b" }
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Use `failure_policy` (`allow`, `warn`, `deny`, or `ask`) to decide what happens if the hook command fails, times out, or returns invalid JSON.
|
|
87
|
+
|
|
88
|
+
Project-local hooks can also live in `.kward/hooks.json`, but Kward loads them only after you explicitly run `/hooks trust` in that workspace. Trust is tied to the file digest, so changes require re-trusting. See [Lifecycle hooks](lifecycle-hooks.md) for events, decisions, selectors, plugin hooks, command-hook protocol, workspace trust, and security notes.
|
|
89
|
+
|
|
55
90
|
## Embedded shell config
|
|
56
91
|
|
|
57
92
|
The embedded Kward shell (`/shell`, internally `ekwsh`) reads optional global settings from `~/.kward/ekwsh.yml` or, when `KWARD_CONFIG_PATH` is set, from `ekwsh.yml` beside that config file.
|
|
@@ -112,11 +147,13 @@ Model settings:
|
|
|
112
147
|
|
|
113
148
|
`model` is a generic setting for the active provider. Provider-specific values such as `openai_model`, `anthropic_model`, `openrouter_model`, and `copilot_model` take precedence for their provider. `reasoning_effort` and `thinking_level` are generic reasoning settings. `thinking_level` is an alias for `reasoning_effort` honored by all providers. For each provider, Kward resolves reasoning in this order: the provider-specific key (for example `openai_reasoning_effort`), then the generic `reasoning_effort`, then `thinking_level`, then the default `medium`. `openai_reasoning_effort`, `anthropic_reasoning_effort`, `openrouter_reasoning_effort`, and `copilot_reasoning_effort` are provider-specific forms.
|
|
114
149
|
|
|
150
|
+
Set `codex_show_raw_reasoning` to `true` to display raw Codex `reasoning_text` when the API does not provide reasoning summary text. It defaults to `false`; raw reasoning can include internal or unstable model output, so enable it only when you explicitly want to inspect that stream.
|
|
151
|
+
|
|
115
152
|
Defaults:
|
|
116
153
|
|
|
117
154
|
- OpenAI/Codex: `gpt-5.5`
|
|
118
155
|
- OpenRouter: `openai/gpt-5.5`
|
|
119
|
-
- Anthropic: `claude-sonnet-4-
|
|
156
|
+
- Anthropic: `claude-sonnet-4-6`
|
|
120
157
|
- Copilot: `gpt-5-mini`
|
|
121
158
|
- Reasoning effort: `medium`
|
|
122
159
|
|
|
@@ -170,7 +207,7 @@ Use environment variables for temporary or local-only secrets when possible. If
|
|
|
170
207
|
|
|
171
208
|
## Overlay settings
|
|
172
209
|
|
|
173
|
-
Overlay settings control terminal picker/card layout:
|
|
210
|
+
Overlay settings control terminal picker/card layout. New default configs include this section, and partial existing configs use the same defaults for missing keys:
|
|
174
211
|
|
|
175
212
|
```json
|
|
176
213
|
{
|
|
@@ -185,6 +222,22 @@ Overlay settings control terminal picker/card layout:
|
|
|
185
222
|
|
|
186
223
|
You can change these interactively with `/settings`.
|
|
187
224
|
|
|
225
|
+
## Web search settings
|
|
226
|
+
|
|
227
|
+
New default configs enable web search with the automatic provider order:
|
|
228
|
+
|
|
229
|
+
```json
|
|
230
|
+
{
|
|
231
|
+
"web_search": {
|
|
232
|
+
"enabled": true,
|
|
233
|
+
"provider": "auto",
|
|
234
|
+
"allow_model_providers": false
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
Existing configs without `web_search` keep the same behavior: web search is enabled, the provider is `auto`, and model-provider fallbacks are disabled unless explicitly enabled.
|
|
240
|
+
|
|
188
241
|
## Composer settings
|
|
189
242
|
|
|
190
243
|
The busy composer shows a short Ctrl+C cancellation hint by default. To hide it:
|
|
@@ -290,7 +343,7 @@ Interactive CLI and RPC clients start fresh by default. To automatically resume
|
|
|
290
343
|
}
|
|
291
344
|
```
|
|
292
345
|
|
|
293
|
-
The `/
|
|
346
|
+
The `/session` command, `/resume` alias, and RPC `sessions/resume` work regardless of this automatic resume setting.
|
|
294
347
|
|
|
295
348
|
## Memory
|
|
296
349
|
|
data/doc/extensibility.md
CHANGED
|
@@ -14,6 +14,7 @@ Start simple. Most users only need `PRINCIPLES.md`, workspace `AGENTS.md`, and m
|
|
|
14
14
|
| Task-specific reusable instructions | skills |
|
|
15
15
|
| Different tone or role | [personas](personas.md) |
|
|
16
16
|
| Local Ruby behavior or integrations | plugins |
|
|
17
|
+
| Deterministic runtime policy or automation | lifecycle hooks |
|
|
17
18
|
|
|
18
19
|
Install the starter pack for a useful starting point:
|
|
19
20
|
|
|
@@ -97,29 +98,15 @@ Prompt templates are best for reusable text. They do not run local code.
|
|
|
97
98
|
|
|
98
99
|
## Skills
|
|
99
100
|
|
|
100
|
-
Use skills for reusable instructions that should only be loaded for certain tasks.
|
|
101
|
+
Use skills for reusable instructions that should only be loaded for certain tasks, such as testing, release checks, or code review workflows.
|
|
101
102
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
```text
|
|
105
|
-
~/.kward/skills/testing/SKILL.md
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
Example:
|
|
103
|
+
Kward supports Agent Skills in user and project directories, including the shared `.agents/skills` convention. See [Skills](skills.md) for the full guide, including setup, explicit `/skill` activation, bundled files, project trust, and troubleshooting.
|
|
109
104
|
|
|
110
|
-
|
|
111
|
-
---
|
|
112
|
-
name: testing
|
|
113
|
-
description: Use when adding or changing tests.
|
|
114
|
-
---
|
|
115
|
-
|
|
116
|
-
Prefer focused tests near the changed behavior.
|
|
117
|
-
Do not weaken assertions to make tests pass.
|
|
118
|
-
```
|
|
105
|
+
## Lifecycle hooks
|
|
119
106
|
|
|
120
|
-
|
|
107
|
+
Use [lifecycle hooks](lifecycle-hooks.md) when something must happen at a specific runtime point: before a shell command, around model requests, after a file change, or before a tool call. Hooks can allow, deny, ask for approval, modify supported payloads, or warn. They are available from trusted Ruby plugins and from command hooks configured in `config.json`.
|
|
121
108
|
|
|
122
|
-
|
|
109
|
+
Hooks are deterministic automation and policy. They are not model instructions.
|
|
123
110
|
|
|
124
111
|
## Plugins
|
|
125
112
|
|
data/doc/getting-started.md
CHANGED
|
@@ -118,7 +118,7 @@ Inside interactive Kward:
|
|
|
118
118
|
/login sign in or save provider credentials
|
|
119
119
|
/model choose a model
|
|
120
120
|
/status show session and context status
|
|
121
|
-
/
|
|
121
|
+
/session open the saved sessions picker
|
|
122
122
|
/rewind revisit an earlier prompt
|
|
123
123
|
/export notes.md export the transcript
|
|
124
124
|
/compact summarize older context when a chat gets long
|