Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
44e6397
feat(cowork): observe Claude Cowork tool calls via per-session settin…
tumberger Jun 12, 2026
4e8d679
fix(coworkobserve): only advance spool offset past complete, replayed…
tumberger Jun 12, 2026
5959941
fix(coworkobserve): persist spool offsets so restarts do not duplicat…
tumberger Jun 12, 2026
39539e3
fix(coworkobserve): merge hook into existing settings.json and write …
tumberger Jun 12, 2026
c5cb35e
fix(coworkobserve): spool via absolute $HOME path; tighten hook timeout
tumberger Jun 12, 2026
a4c78b6
refactor(coworkobserve): reuse the Claude hook decoder for spool replay
tumberger Jun 12, 2026
5054a07
feat(coworkobserve): add health counters and heartbeat diagnostics
tumberger Jun 12, 2026
1b23af0
feat(coworkobserve): delete drained spools after an idle retention wi…
tumberger Jun 12, 2026
3a7064f
feat(coworkobserve): gate enablement via managed.json cowork_observe …
tumberger Jun 12, 2026
e696864
docs(coworkobserve): document integrity, delivery, coupling, and depl…
tumberger Jun 12, 2026
a234d17
feat(managedconfig): accept mode "enforce"; rename cowork_observe to …
tumberger Jun 12, 2026
0015365
feat(managedobserve): drive hook edges from the configured managed mode
tumberger Jun 12, 2026
33db709
feat(coworkobserve): enforce mode — deny/allow via decision-file roun…
tumberger Jun 12, 2026
ab6fe70
docs(coworkobserve): document mode semantics and enforce limits
tumberger Jun 12, 2026
2ade318
fix(cowork): write spool/decision files relative to session dir, not …
tumberger Jun 13, 2026
bd9a93c
docs(cowork): correct stale cowork_observe references to cowork_enabled
tumberger Jun 13, 2026
44df174
fix(cowork): keep long-running sessions reachable for re-merge and he…
tumberger Jun 13, 2026
411792a
fix(cowork): re-stat spool before unlinking to guard the cleanup race
tumberger Jun 13, 2026
39d47f5
test(cowork): integration tests for the generated hook shell commands
tumberger Jun 13, 2026
14267a1
refactor(cowork): re-merge running sessions via a startup pass, not s…
tumberger Jun 13, 2026
3817633
fix(cowork): report ground-truth health; don't claim unverifiable hoo…
tumberger Jun 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions cmd/kontext/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import (
"github.com/kontext-security/kontext-cli/internal/update"

_ "github.com/kontext-security/kontext-cli/internal/agent/claude"
_ "github.com/kontext-security/kontext-cli/internal/agent/cowork"
)

var version = "dev"
Expand Down
31 changes: 31 additions & 0 deletions internal/agent/cowork/cowork.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// Package cowork registers the Cowork agent adapter. Claude Cowork runs the same
// bundled Claude Code CLI inside a per-session VM, so its hook payloads use the
// identical Claude Code hook-input format. The adapter therefore reuses the
// Claude decoder/encoder and only differs in its name, which is recorded as the
// session's agent ("cowork") to distinguish Cowork activity from Claude Code in
// the ledger and dashboard.
package cowork

import (
"github.com/kontext-security/kontext-cli/internal/agent"
"github.com/kontext-security/kontext-cli/internal/hook"
"github.com/kontext-security/kontext-cli/internal/hookruntime"
)

func init() {
agent.Register(&Cowork{})
}

type Cowork struct{}

func (c *Cowork) Name() string { return "cowork" }

func (c *Cowork) Aliases() []string { return []string{"claude-cowork"} }

func (c *Cowork) DecodeHookInput(input []byte) (hook.Event, error) {
return hookruntime.DecodeClaudeEvent(input, c.Name())
}

func (c *Cowork) EncodeHookResult(event hook.Event, result hook.Result) ([]byte, error) {
return hookruntime.EncodeClaudeResult(event.HookName.String(), result)
}
Loading
Loading