shikiru-cli 0.2.0__py3-none-any.whl
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.
- shikiru/__init__.py +1 -0
- shikiru/__main__.py +8 -0
- shikiru/agents/__init__.py +3 -0
- shikiru/agents/contracts.py +590 -0
- shikiru/agents/registry.py +87 -0
- shikiru/agents/sdk/__init__.py +17 -0
- shikiru/agents/sdk/reset_time.py +137 -0
- shikiru/agents/sdk/turn.py +335 -0
- shikiru/agents/settings.py +151 -0
- shikiru/agents/testing/__init__.py +26 -0
- shikiru/agents/testing/contract_suite.py +653 -0
- shikiru/agents/testing/resume.py +15 -0
- shikiru/bootstrap.py +1277 -0
- shikiru/cli/__init__.py +1 -0
- shikiru/cli/app.py +770 -0
- shikiru/cli/context.py +63 -0
- shikiru/cli/render.py +1475 -0
- shikiru/cli/report.py +156 -0
- shikiru/cli/session_prompt.py +63 -0
- shikiru/cli/view.py +131 -0
- shikiru/clock.py +41 -0
- shikiru/config/__init__.py +8 -0
- shikiru/config/defaults.toml +131 -0
- shikiru/config/loader.py +178 -0
- shikiru/config/settings.py +392 -0
- shikiru/dashboard/__init__.py +3 -0
- shikiru/dashboard/actions_list.py +799 -0
- shikiru/dashboard/activity.py +150 -0
- shikiru/dashboard/app.py +1765 -0
- shikiru/dashboard/blocker_evidence.py +122 -0
- shikiru/dashboard/blocker_rows.py +84 -0
- shikiru/dashboard/briefing_view.py +871 -0
- shikiru/dashboard/contract.py +1086 -0
- shikiru/dashboard/covered.py +32 -0
- shikiru/dashboard/detail.py +1209 -0
- shikiru/dashboard/detail_fold.py +244 -0
- shikiru/dashboard/detail_hint.py +68 -0
- shikiru/dashboard/details_list_view.py +150 -0
- shikiru/dashboard/diagnostics.py +80 -0
- shikiru/dashboard/diagnostics_sections.py +186 -0
- shikiru/dashboard/evidence_table.py +123 -0
- shikiru/dashboard/extra_details.py +214 -0
- shikiru/dashboard/fault_guidance.py +216 -0
- shikiru/dashboard/fold_bodies.py +276 -0
- shikiru/dashboard/help_keys.py +166 -0
- shikiru/dashboard/help_screen.py +204 -0
- shikiru/dashboard/interaction.py +17 -0
- shikiru/dashboard/ladder_editor.py +544 -0
- shikiru/dashboard/live_settings.py +62 -0
- shikiru/dashboard/motion.py +368 -0
- shikiru/dashboard/orchestration_fields.py +201 -0
- shikiru/dashboard/palette.py +1606 -0
- shikiru/dashboard/palette_app.py +89 -0
- shikiru/dashboard/palette_drafts.py +33 -0
- shikiru/dashboard/resolution.py +573 -0
- shikiru/dashboard/resolution_view.py +302 -0
- shikiru/dashboard/row_list.py +256 -0
- shikiru/dashboard/section_rows.py +173 -0
- shikiru/dashboard/services.py +665 -0
- shikiru/dashboard/session_history.py +402 -0
- shikiru/dashboard/shikiru_init_ascii_art.txt +40 -0
- shikiru/dashboard/task_picker.py +358 -0
- shikiru/dashboard/tick.py +59 -0
- shikiru/dashboard/timeline_filter.py +129 -0
- shikiru/dashboard/timeline_section.py +385 -0
- shikiru/dashboard/usage_body.py +269 -0
- shikiru/dashboard/views.py +2314 -0
- shikiru/dashboard/wizard.py +1389 -0
- shikiru/domain/__init__.py +1 -0
- shikiru/domain/acceptance.py +130 -0
- shikiru/domain/activity.py +28 -0
- shikiru/domain/attempts.py +333 -0
- shikiru/domain/briefing.py +257 -0
- shikiru/domain/commands.py +219 -0
- shikiru/domain/decisions.py +231 -0
- shikiru/domain/docker.py +262 -0
- shikiru/domain/engine_uptime.py +87 -0
- shikiru/domain/escalation.py +194 -0
- shikiru/domain/escalation_evidence.py +186 -0
- shikiru/domain/escalation_panel.py +144 -0
- shikiru/domain/events.py +71 -0
- shikiru/domain/evidence_export.py +89 -0
- shikiru/domain/faults.py +86 -0
- shikiru/domain/feedback.py +180 -0
- shikiru/domain/feedback_rounds.py +172 -0
- shikiru/domain/fencing.py +31 -0
- shikiru/domain/ladder.py +102 -0
- shikiru/domain/ladder_text.py +44 -0
- shikiru/domain/levels.py +44 -0
- shikiru/domain/motion.py +199 -0
- shikiru/domain/packet_evidence.py +377 -0
- shikiru/domain/pushes.py +47 -0
- shikiru/domain/quota_blocks.py +44 -0
- shikiru/domain/quota_waits.py +219 -0
- shikiru/domain/recovery.py +194 -0
- shikiru/domain/reports.py +498 -0
- shikiru/domain/results.py +217 -0
- shikiru/domain/runs.py +85 -0
- shikiru/domain/scheduling.py +231 -0
- shikiru/domain/status_tasks.py +40 -0
- shikiru/domain/steps.py +325 -0
- shikiru/domain/tasks.py +174 -0
- shikiru/domain/timeline.py +208 -0
- shikiru/domain/timeline_phrases.py +271 -0
- shikiru/domain/versions.py +18 -0
- shikiru/domain/workflow.py +372 -0
- shikiru/engine/__init__.py +0 -0
- shikiru/engine/acceptance.py +90 -0
- shikiru/engine/agents.py +61 -0
- shikiru/engine/cosmetic_decorator.py +99 -0
- shikiru/engine/daemon.py +409 -0
- shikiru/engine/dependency.py +37 -0
- shikiru/engine/escalation_filing.py +110 -0
- shikiru/engine/escalations.py +401 -0
- shikiru/engine/events.py +285 -0
- shikiru/engine/evidence.py +81 -0
- shikiru/engine/fault_reporter.py +144 -0
- shikiru/engine/feedback.py +577 -0
- shikiru/engine/feedback_audit.py +80 -0
- shikiru/engine/feedback_intake.py +95 -0
- shikiru/engine/feedback_snapshot.py +148 -0
- shikiru/engine/flow.py +87 -0
- shikiru/engine/handlers/__init__.py +33 -0
- shikiru/engine/handlers/base.py +148 -0
- shikiru/engine/handlers/engine.py +24 -0
- shikiru/engine/handlers/escalations.py +174 -0
- shikiru/engine/handlers/operator.py +81 -0
- shikiru/engine/handlers/tasks.py +237 -0
- shikiru/engine/history.py +128 -0
- shikiru/engine/integration.py +1234 -0
- shikiru/engine/integration_turns.py +337 -0
- shikiru/engine/layout_guard.py +362 -0
- shikiru/engine/lifecycle.py +60 -0
- shikiru/engine/monitor.py +317 -0
- shikiru/engine/notification_delivery.py +124 -0
- shikiru/engine/notification_feed.py +57 -0
- shikiru/engine/notifier.py +91 -0
- shikiru/engine/pull_request_closing.py +117 -0
- shikiru/engine/push_service.py +177 -0
- shikiru/engine/quota_probe_threads.py +79 -0
- shikiru/engine/quota_reconciler.py +210 -0
- shikiru/engine/quota_schedule.py +24 -0
- shikiru/engine/quota_waits.py +102 -0
- shikiru/engine/reconcile.py +91 -0
- shikiru/engine/recovery.py +284 -0
- shikiru/engine/retention.py +102 -0
- shikiru/engine/root_preparation.py +86 -0
- shikiru/engine/scheduler.py +320 -0
- shikiru/engine/session_guard.py +46 -0
- shikiru/engine/sessions.py +95 -0
- shikiru/engine/signalled.py +75 -0
- shikiru/engine/step_runner.py +140 -0
- shikiru/engine/supervisor.py +101 -0
- shikiru/engine/takeover.py +223 -0
- shikiru/engine/task_facts.py +46 -0
- shikiru/engine/tick_guard.py +95 -0
- shikiru/engine/titles.py +297 -0
- shikiru/engine/transitions.py +79 -0
- shikiru/engine/turn_context.py +206 -0
- shikiru/engine/turn_execution.py +30 -0
- shikiru/engine/turn_loop.py +230 -0
- shikiru/engine/turn_processes.py +79 -0
- shikiru/engine/turns.py +457 -0
- shikiru/errors.py +144 -0
- shikiru/helper/__init__.py +3 -0
- shikiru/helper/helper.py +182 -0
- shikiru/helper/models.py +11 -0
- shikiru/mcp/__init__.py +1 -0
- shikiru/mcp/server.py +196 -0
- shikiru/operator/__init__.py +33 -0
- shikiru/operator/attachment.py +24 -0
- shikiru/operator/commands.py +319 -0
- shikiru/operator/detectors.py +374 -0
- shikiru/operator/doctor.py +351 -0
- shikiru/operator/events.py +57 -0
- shikiru/operator/evidence_export.py +498 -0
- shikiru/operator/evidence_writer.py +78 -0
- shikiru/operator/lifecycle.py +294 -0
- shikiru/operator/plugin_checks.py +194 -0
- shikiru/operator/probe.py +287 -0
- shikiru/operator/queries.py +1601 -0
- shikiru/operator/services.py +36 -0
- shikiru/operator/sessions.py +378 -0
- shikiru/operator/strip_views.py +162 -0
- shikiru/operator/timeline.py +416 -0
- shikiru/operator/toml_text.py +62 -0
- shikiru/palette.py +18 -0
- shikiru/paths.py +91 -0
- shikiru/plugins/__init__.py +0 -0
- shikiru/plugins/agents/__init__.py +1 -0
- shikiru/plugins/agents/claude/__init__.py +5 -0
- shikiru/plugins/agents/claude/agent.py +251 -0
- shikiru/plugins/agents/claude/context.py +116 -0
- shikiru/plugins/agents/claude/headless.py +92 -0
- shikiru/plugins/agents/claude/hook.py +57 -0
- shikiru/plugins/agents/claude/model_catalog.py +105 -0
- shikiru/plugins/agents/claude/options.py +62 -0
- shikiru/plugins/agents/claude/turn.py +1018 -0
- shikiru/plugins/agents/codex/__init__.py +5 -0
- shikiru/plugins/agents/codex/agent.py +486 -0
- shikiru/plugins/agents/codex/headless.py +166 -0
- shikiru/plugins/agents/codex/home.py +14 -0
- shikiru/plugins/agents/codex/model_catalog.py +128 -0
- shikiru/plugins/agents/codex/options.py +94 -0
- shikiru/plugins/agents/codex/quota.py +195 -0
- shikiru/plugins/agents/codex/sandbox.py +31 -0
- shikiru/plugins/agents/codex/sandbox_probe.py +97 -0
- shikiru/plugins/agents/codex/turn.py +767 -0
- shikiru/plugins/agents/codex/usage.py +106 -0
- shikiru/plugins/agents/shared_settings.py +62 -0
- shikiru/plugins/widgets/__init__.py +3 -0
- shikiru/plugins/widgets/dialogue.py +144 -0
- shikiru/plugins/widgets/disk.py +123 -0
- shikiru/plugins/widgets/docker.py +225 -0
- shikiru/plugins/widgets/escalations.py +402 -0
- shikiru/plugins/widgets/faults.py +204 -0
- shikiru/plugins/widgets/header.py +321 -0
- shikiru/plugins/widgets/queue.py +1140 -0
- shikiru/plugins/widgets/queue_hint.py +93 -0
- shikiru/plugins/widgets/resources.py +105 -0
- shikiru/plugins/widgets/strips.py +82 -0
- shikiru/plugins/widgets/usage.py +176 -0
- shikiru/private.py +94 -0
- shikiru/process.py +535 -0
- shikiru/prompts/__init__.py +3 -0
- shikiru/prompts/renderer.py +85 -0
- shikiru/prompts/templates/_base.md.j2 +17 -0
- shikiru/prompts/templates/_macros.md.j2 +61 -0
- shikiru/prompts/templates/conflicts.md.j2 +22 -0
- shikiru/prompts/templates/consult.md.j2 +5 -0
- shikiru/prompts/templates/continue.md.j2 +4 -0
- shikiru/prompts/templates/feedback_analysis.md.j2 +29 -0
- shikiru/prompts/templates/feedback_rework.md.j2 +33 -0
- shikiru/prompts/templates/feedback_verify.md.j2 +33 -0
- shikiru/prompts/templates/handoff.md.j2 +23 -0
- shikiru/prompts/templates/implement.md.j2 +13 -0
- shikiru/prompts/templates/plan.md.j2 +30 -0
- shikiru/prompts/templates/rework.md.j2 +13 -0
- shikiru/prompts/templates/triage.md.j2 +20 -0
- shikiru/prompts/templates/verify.md.j2 +29 -0
- shikiru/store/__init__.py +1 -0
- shikiru/store/commands.py +242 -0
- shikiru/store/database.py +297 -0
- shikiru/store/escalations.py +240 -0
- shikiru/store/events.py +213 -0
- shikiru/store/feedback.py +266 -0
- shikiru/store/migrations/001_initial.sql +63 -0
- shikiru/store/migrations/002_headless_turns.sql +31 -0
- shikiru/store/migrations/003_drop_command_handled_at.sql +1 -0
- shikiru/store/migrations/004_repo_base_ref.sql +3 -0
- shikiru/store/migrations/005_complexity_explicit.sql +3 -0
- shikiru/store/migrations/006_events_kind_index.sql +1 -0
- shikiru/store/migrations/007_notification_cursor.sql +1 -0
- shikiru/store/migrations/008_reported_usage.sql +1 -0
- shikiru/store/migrations/009_billing_declarations.sql +2 -0
- shikiru/store/migrations/010_canonical_quota_windows.sql +3 -0
- shikiru/store/migrations/012_drop_task_quota_evidence.sql +2 -0
- shikiru/store/migrations/013_push_targets.sql +7 -0
- shikiru/store/migrations/014_agent_block_time.sql +6 -0
- shikiru/store/migrations/015_repair_orphan_agent_blocks.sql +3 -0
- shikiru/store/migrations/016_feedback_rounds.sql +29 -0
- shikiru/store/migrations/017_feedback_round_comments.sql +5 -0
- shikiru/store/migrations/__init__.py +1 -0
- shikiru/store/notification_cursor.py +29 -0
- shikiru/store/pushes.py +117 -0
- shikiru/store/quotas.py +153 -0
- shikiru/store/reader.py +310 -0
- shikiru/store/retention.py +92 -0
- shikiru/store/runs.py +227 -0
- shikiru/store/tasks.py +949 -0
- shikiru/telemetry/__init__.py +1 -0
- shikiru/telemetry/disk.py +167 -0
- shikiru/telemetry/docker.py +164 -0
- shikiru/telemetry/resources.py +296 -0
- shikiru/tmux/__init__.py +3 -0
- shikiru/tmux/client.py +637 -0
- shikiru/tmux/decorator.py +225 -0
- shikiru/tmux/layout.py +200 -0
- shikiru/tmux/session.py +381 -0
- shikiru/ui/__init__.py +9 -0
- shikiru/ui/age.py +45 -0
- shikiru/ui/bubbles.py +41 -0
- shikiru/ui/compact.py +1209 -0
- shikiru/ui/console.py +49 -0
- shikiru/ui/fold.py +50 -0
- shikiru/ui/gated_static.py +117 -0
- shikiru/ui/gauge.py +40 -0
- shikiru/ui/glyphs.py +109 -0
- shikiru/ui/keys.py +57 -0
- shikiru/ui/live_interval.py +42 -0
- shikiru/ui/popup.py +311 -0
- shikiru/ui/quota_status.py +26 -0
- shikiru/ui/recent_window.py +78 -0
- shikiru/ui/screen.py +57 -0
- shikiru/ui/section.py +193 -0
- shikiru/ui/session.py +65 -0
- shikiru/ui/size.py +17 -0
- shikiru/ui/splash.py +42 -0
- shikiru/ui/status.py +47 -0
- shikiru/ui/status_strip.py +149 -0
- shikiru/ui/stream.py +152 -0
- shikiru/ui/strip.py +332 -0
- shikiru/ui/theme.py +83 -0
- shikiru/ui/tokens.py +51 -0
- shikiru/view_log.py +126 -0
- shikiru/workspace/__init__.py +3 -0
- shikiru/workspace/base_refs.py +160 -0
- shikiru/workspace/caches.py +136 -0
- shikiru/workspace/facts.py +118 -0
- shikiru/workspace/git.py +601 -0
- shikiru/workspace/github.py +744 -0
- shikiru/workspace/messages.py +107 -0
- shikiru/workspace/reports.py +145 -0
- shikiru/workspace/roots.py +180 -0
- shikiru_cli-0.2.0.dist-info/METADATA +428 -0
- shikiru_cli-0.2.0.dist-info/RECORD +319 -0
- shikiru_cli-0.2.0.dist-info/WHEEL +4 -0
- shikiru_cli-0.2.0.dist-info/entry_points.txt +18 -0
- shikiru_cli-0.2.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,428 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: shikiru-cli
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Runs coding-agent tasks in tmux panes, orchestrated by an asyncio engine.
|
|
5
|
+
Project-URL: Homepage, https://github.com/ferrum-code-dev/shikiru
|
|
6
|
+
Project-URL: Source, https://github.com/ferrum-code-dev/shikiru
|
|
7
|
+
Project-URL: Issues, https://github.com/ferrum-code-dev/shikiru/issues
|
|
8
|
+
Project-URL: Changelog, https://github.com/ferrum-code-dev/shikiru/releases
|
|
9
|
+
Author: Ferrum Code
|
|
10
|
+
License-Expression: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: claude,codex,coding-agents,git-worktrees,orchestration,tmux
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
15
|
+
Requires-Python: >=3.14
|
|
16
|
+
Requires-Dist: jinja2<3.2,>=3.1
|
|
17
|
+
Requires-Dist: mcp<2.0,>=1.26
|
|
18
|
+
Requires-Dist: psutil<8.0,>=7.0
|
|
19
|
+
Requires-Dist: pydantic<2.14,>=2.13
|
|
20
|
+
Requires-Dist: textual<6.4,>=6.3
|
|
21
|
+
Requires-Dist: typer<0.28,>=0.27
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
|
|
24
|
+
# Shikiru (しきる)
|
|
25
|
+
|
|
26
|
+
[](https://github.com/ferrum-code-dev/shikiru/releases)
|
|
27
|
+
[](https://github.com/ferrum-code-dev/shikiru/blob/main/LICENSE)
|
|
28
|
+
[](https://github.com/ferrum-code-dev/shikiru/actions/workflows/ci.yml)
|
|
29
|
+
|
|
30
|
+
Shikiru coordinates coding agents through a defined development workflow: turn a request into
|
|
31
|
+
reviewed changes, integrate them, and ask you when a decision needs human judgment. It runs locally
|
|
32
|
+
with Git worktrees, a persistent engine and a terminal dashboard in tmux. Claude Code and Codex CLI
|
|
33
|
+
are built in; different agents and models can work on the same task in different roles.
|
|
34
|
+
|
|
35
|
+
To have routine escalations handled for you, and the rest forwarded to your phone, see the companion
|
|
36
|
+
service [shikiri-yaku](https://github.com/ferrum-code-dev/shikiri-yaku).
|
|
37
|
+
|
|
38
|
+
I designed and implemented Shikiru from my own experience developing software with AI agents. No
|
|
39
|
+
existing tool covered all the workflows I needed, so I built one that does.
|
|
40
|
+
|
|
41
|
+
## How it works
|
|
42
|
+
|
|
43
|
+

|
|
44
|
+
|
|
45
|
+
| Participant | Responsibility |
|
|
46
|
+
| --- | --- |
|
|
47
|
+
| **Operator** | You: submit requests, choose policy, inspect results, answer decisions and intervene. |
|
|
48
|
+
| **Leader** | An agent that triages requests, plans larger work, answers implementation questions and reviews changes. |
|
|
49
|
+
| **Implementer** | An agent that changes code, runs project checks, updates selected trackers and resolves integration conflicts. |
|
|
50
|
+
| **Helper** | A headless agent used to reconstruct missing structured reports or classify otherwise unrecognized agent failures. It does not run the development workflow. |
|
|
51
|
+
| **Engine** | Shikiru's deterministic coordinator: schedules tasks, validates reports, applies transitions, manages Git integration and records state. |
|
|
52
|
+
|
|
53
|
+
A request receives a task ID such as `T-1`, its own branch and a Git worktree. The Leader normally
|
|
54
|
+
triages it into one of two routes:
|
|
55
|
+
|
|
56
|
+
- **Implement:** the Implementer makes changes; the Leader accepts them, requests another iteration,
|
|
57
|
+
raises an Operator decision, or replaces the task with more suitable tasks.
|
|
58
|
+
- **Plan:** the Leader commits a plan and can create dependent follow-up tasks when the request asks
|
|
59
|
+
for execution. A request only to produce a plan can finish with the plan itself.
|
|
60
|
+
|
|
61
|
+
Accepted changes are rebased onto the configured base and integrated locally or through a GitHub
|
|
62
|
+
pull request. Conflicts go through bounded Implementer repair and Leader review. Requests needing
|
|
63
|
+
your input, exhausted recovery limits and unsafe integration conditions become **escalations**
|
|
64
|
+
(`E-1`, etc.) with context and applicable answers. Other eligible tasks can continue.
|
|
65
|
+
|
|
66
|
+
You can submit work with explicit mode, complexity, priority, dependencies or role/model choices.
|
|
67
|
+
Independent tasks run in parallel up to the configured slot limit; dependencies, pauses, resource
|
|
68
|
+
pressure and provider quota can delay dispatch. Each task retains reports, Git facts, agent sessions
|
|
69
|
+
and a timeline so you can understand both its result and how it got there.
|
|
70
|
+
|
|
71
|
+
## Requirements and installation
|
|
72
|
+
|
|
73
|
+
- Python 3.14+ and uv; Git 2.45+ and tmux 3.5+.
|
|
74
|
+
- A single Git repository per project, initialized at its root with at least one commit.
|
|
75
|
+
Submodules and multi-repository projects are unsupported.
|
|
76
|
+
- Claude Code or Codex CLI installed and configured for your account.
|
|
77
|
+
- `gh` and an accessible GitHub remote if you choose pull-request integration.
|
|
78
|
+
|
|
79
|
+
### Installation
|
|
80
|
+
|
|
81
|
+
```sh
|
|
82
|
+
uv tool install shikiru-cli
|
|
83
|
+
shikiru --help
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
The distribution is `shikiru-cli`; the command and the Python package are `shikiru`.
|
|
87
|
+
|
|
88
|
+
Before the first PyPI release, install the wheel from the latest release on the Releases page.
|
|
89
|
+
Never install a long-running copy with `--editable`: an editable install follows the working tree.
|
|
90
|
+
For development, see [From a checkout](CONTRIBUTING.md).
|
|
91
|
+
|
|
92
|
+
### Updating
|
|
93
|
+
|
|
94
|
+
```sh
|
|
95
|
+
uv tool upgrade shikiru-cli
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
An engine keeps the code it was started with, so run `shikiru restart` in each project with a running
|
|
99
|
+
engine afterwards. `restart` refuses while a task runs unless `--force` is given.
|
|
100
|
+
|
|
101
|
+
Installations from before the rename (distribution `shikiru`) must switch once: the tool changed its
|
|
102
|
+
distribution name, and both provide the executable `shikiru`, so they cannot be installed together. Run
|
|
103
|
+
`uv tool uninstall shikiru`, then `uv tool install shikiru-cli`, then `shikiru restart` in each project
|
|
104
|
+
with a running engine.
|
|
105
|
+
|
|
106
|
+
### Going back
|
|
107
|
+
|
|
108
|
+
```sh
|
|
109
|
+
uv tool install shikiru-cli==<version>
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Replace `<version>` with the release to return to, then run `shikiru restart` in each project with a
|
|
113
|
+
running engine.
|
|
114
|
+
|
|
115
|
+
### From a checkout
|
|
116
|
+
|
|
117
|
+
For development from a source checkout, follow [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
118
|
+
|
|
119
|
+
macOS is the platform exercised locally. CI is configured for Ubuntu 24.04 and macOS 15; see
|
|
120
|
+
[workflow runs](https://github.com/ferrum-code-dev/shikiru/actions/workflows/ci.yml) for
|
|
121
|
+
platform-specific results.
|
|
122
|
+
|
|
123
|
+
## Initialize and run
|
|
124
|
+
|
|
125
|
+
Start at the root of a committed project repository:
|
|
126
|
+
|
|
127
|
+
```sh
|
|
128
|
+
cd /path/to/project
|
|
129
|
+
shikiru init
|
|
130
|
+
shikiru doctor
|
|
131
|
+
shikiru start
|
|
132
|
+
shikiru submit "Fix a small, specific issue and verify it"
|
|
133
|
+
shikiru attach
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
The eight-step wizard checks the repository, builds role/model/effort ladders, lets you choose
|
|
137
|
+
tracker files and ignored cache paths, sets the orchestration limits, reviews each agent's options and
|
|
138
|
+
chooses the integration mode, then writes `.shikiru/config.toml` and runs Doctor. The Orchestration step sets the maximum parallel
|
|
139
|
+
tasks, the maximum passes per task, the maximum quota wait in seconds, the stall and tool timeouts
|
|
140
|
+
in seconds (the silence allowed before a turn is stopped as stalled, without and with a running
|
|
141
|
+
tool), the push interval in seconds (default 14400, four hours; 0 pushes after every local
|
|
142
|
+
integration), the host CPU percentage below which new tasks may start, and the free RAM in GB that must be
|
|
143
|
+
available before a new task starts. Each field starts at the project default, and Finish rejects an
|
|
144
|
+
out-of-range value by focusing that field before anything is written. The Agents step lists the
|
|
145
|
+
options each installed agent plugin offers (for the built-in Claude Code and Codex plugins: the
|
|
146
|
+
compaction threshold in percent, the billing declaration, left unset unless you choose one, and
|
|
147
|
+
extra CLI arguments split like a shell command line). They are written explicitly under
|
|
148
|
+
`[agents.<name>.options]` so you can edit them later; an invalid value focuses its field and
|
|
149
|
+
nothing is written. An agent plugin without the settings capability is named on that step and
|
|
150
|
+
keeps its own defaults. Available model and effort
|
|
151
|
+
choices come from agent plugins; where no authoritative catalog exists, Doctor cannot promise model
|
|
152
|
+
availability. Tracker and cache fields start empty: add only what you want Shikiru to use. Cancel
|
|
153
|
+
explicitly with the Cancel button; `Ctrl+F` briefly reveals the background artwork.
|
|
154
|
+
|
|
155
|
+
`shikiru init --yes` skips the wizard and writes editable defaults with model placeholders. Replace
|
|
156
|
+
them with models supported by your agent, review the config, and run Doctor before starting.
|
|
157
|
+
Ordinary `doctor` checks environment, config, plugins and state without running task turns;
|
|
158
|
+
`doctor --probe` additionally runs live agent-contract checks and can consume paid provider usage.
|
|
159
|
+
|
|
160
|
+
## CLI
|
|
161
|
+
|
|
162
|
+
Project commands find the nearest `.shikiru/` above the current directory; use the global
|
|
163
|
+
`--project PATH` to select a project explicitly. `--help` on each command describes its arguments
|
|
164
|
+
and defaults; the root help also offers shell-completion setup and `--version`.
|
|
165
|
+
|
|
166
|
+
| Command | Use |
|
|
167
|
+
| --- | --- |
|
|
168
|
+
| `shikiru init` | Configure a repository through the wizard; `--yes` writes editable defaults. |
|
|
169
|
+
| `shikiru start` | Start or reuse its detached engine and ensure its tmux session; `--attach` enters it. |
|
|
170
|
+
| `shikiru stop` | Stop orchestration while keeping project state and tmux agent panes; `--kill-session` also closes that project's tmux session. |
|
|
171
|
+
| `shikiru restart` | Stop and start the engine so it runs the installed code; refuses while a task runs unless `--force`. |
|
|
172
|
+
| `shikiru submit "REQUEST"` | Queue work and return its allocated task ID. |
|
|
173
|
+
| `shikiru status` | Show engine/queue state, tasks, escalations, usage and quota; add `T-1` for one task or `--watch` for updates. |
|
|
174
|
+
| `shikiru ls` | List discovered project sessions; `--host HOST` queries an SSH host. |
|
|
175
|
+
| `shikiru attach` | Attach to the current project; outside a project, choose a numbered session. A project name selects it directly; `--host HOST` uses SSH. |
|
|
176
|
+
| `shikiru doctor` | Diagnose requirements, config, plugins and local state; `--probe` includes live checks. |
|
|
177
|
+
| `shikiru mcp` | Serve the project's operator tools over stdio to an MCP client. |
|
|
178
|
+
|
|
179
|
+
For example, skip triage for a known implementation, choose a complexity ladder and wait for
|
|
180
|
+
another task:
|
|
181
|
+
|
|
182
|
+
```sh
|
|
183
|
+
shikiru submit --mode implement --complexity high --priority 10 --after T-1 "Implement the accepted design"
|
|
184
|
+
shikiru status T-2 --watch
|
|
185
|
+
shikiru --json status
|
|
186
|
+
shikiru --project /path/to/project --set orchestration.max_parallel=1 start
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
`--after` is repeatable. `--leader` and `--implementer` pin a role using
|
|
190
|
+
`agent:model[:effort]`; obtain supported IDs from your installed agent and wizard. Global `--json`
|
|
191
|
+
provides machine-readable command results. Queue acknowledgement and a task ID mean the request
|
|
192
|
+
was recorded, not that the work finished; inspect status or the dashboard for the outcome.
|
|
193
|
+
|
|
194
|
+
Session discovery preserves healthy results alongside diagnostics for stale or unreadable project
|
|
195
|
+
state, with applicable repair commands. `ls` exits nonzero when discovery is incomplete. Deleting
|
|
196
|
+
`.shikiru/` loses its state; initialization creates new state, not a recovery of deleted tasks.
|
|
197
|
+
Shikiru permits one attached client per project session and refuses a second attachment rather
|
|
198
|
+
than changing the existing terminal. Detach that client before moving to another terminal.
|
|
199
|
+
|
|
200
|
+
## Dashboard and Operator control
|
|
201
|
+
|
|
202
|
+
Home shows the engine, repository cleanliness, task queue, active work, decisions and usage.
|
|
203
|
+
Up/Down selects tasks; `f` filters status, `/` searches by ID or title, and `m` loads older tasks
|
|
204
|
+
when offered. Task details bring together the current briefing, results, dependencies and related
|
|
205
|
+
tasks, reports/Git evidence, event and agent activity, usage, sessions and workspace access.
|
|
206
|
+
Timelines support paging, following the latest entries and agent-activity filters by role/turn.
|
|
207
|
+
Use `?` for context-specific navigation help.
|
|
208
|
+
|
|
209
|
+
Open **Actions** with `Ctrl+P` or `F12` in the dashboard, or your tmux prefix followed by Space in
|
|
210
|
+
any Shikiru pane. Actions apply to the selected task and, where appropriate, a chosen role.
|
|
211
|
+
Availability depends on task/session state; **More…** exposes additional controls.
|
|
212
|
+
|
|
213
|
+
| Action | Effect |
|
|
214
|
+
| --- | --- |
|
|
215
|
+
| **Submit / Prioritize** | Add work or change its dispatch priority. |
|
|
216
|
+
| **Message** | Send guidance to a role at the start of its next turn. |
|
|
217
|
+
| **Take over / Hand back** | Stop automation for the task and open an existing role's agent session interactively in its pane. Hand back returns ownership to the engine, which continues with notice of your intervention. An existing pause remains until Resume. |
|
|
218
|
+
| **Pause / Pause now / Resume** | Hold after the current turn, interrupt immediately, or clear the pause. Pausing one task leaves other eligible tasks free to progress. |
|
|
219
|
+
| **Rung** | Select another agent/model/effort for that role from its next turn. A provider change uses a fresh session with handoff context. |
|
|
220
|
+
| **Open session** | Inspect recorded activity for a task role without taking ownership of its agent session. |
|
|
221
|
+
| **Retry** | Re-run the current step. |
|
|
222
|
+
| **Cancel** | Abandon the task while keeping its branch; unintegrated work can retain its worktree for inspection. |
|
|
223
|
+
| **Answer** | Resolve an escalation using an offered choice or written answer; retry, accept-as-is and cancel are available where applicable. |
|
|
224
|
+
| **Export** | Write retained task evidence as Markdown or JSON, with optional agent signals and explicit gaps for unavailable evidence. |
|
|
225
|
+
| **Command history / Diagnostics** | Inspect pending, applied or rejected commands, engine health, faults and resources. |
|
|
226
|
+
| **Start engine / Stop engine** | Control project orchestration from the dashboard. |
|
|
227
|
+
|
|
228
|
+
The task's tmux window provides role panes and a shell. Task details can open that workspace;
|
|
229
|
+
resuming the agent interactively through Take over is different from just viewing its output.
|
|
230
|
+
The default tmux prefix is `Ctrl+B`; prefix then `d` detaches without stopping the engine.
|
|
231
|
+
`shikiru attach` reconnects later.
|
|
232
|
+
|
|
233
|
+
Built-in widgets include usage/quota, host and process CPU/RAM, disk space and project/run sizes,
|
|
234
|
+
Docker container health/resource use, and engine faults. Docker is optional; unavailable samples
|
|
235
|
+
are reported. The configured widget list controls what is enabled; extended views are available
|
|
236
|
+
through Actions. Pane layouts, titles, refresh rates, warning thresholds and animation are
|
|
237
|
+
configurable.
|
|
238
|
+
|
|
239
|
+
## Agents, ladders and recovery
|
|
240
|
+
|
|
241
|
+
A **rung** is one agent/model/effort choice. A **ladder** is an ordered list of rungs: it lets
|
|
242
|
+
Shikiru progress to another choice under its recovery/review policy, including a different provider.
|
|
243
|
+
Leader and Implementer have their own ladders. Implementer can additionally use `low`, `normal`
|
|
244
|
+
and `high` complexity ladders; an unspecified complexity ladder inherits its base ladder.
|
|
245
|
+
|
|
246
|
+
In `.shikiru/config.toml`, a rung can be written as a short string, `"agent:model"` or
|
|
247
|
+
`"agent:model:effort"`, or as an inline table, `{ agent, model, effort }` (effort optional).
|
|
248
|
+
Both forms can appear in one ladder, and existing table ladders keep loading unchanged:
|
|
249
|
+
|
|
250
|
+
```toml
|
|
251
|
+
[roles.leader]
|
|
252
|
+
ladder = ["codex:gpt-6.1-sol:high", { agent = "claude", model = "claude-sonnet-5-5" }]
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
The short form reads its third part as the effort, so a model or effort containing `:`, or an empty
|
|
256
|
+
effort, must use the table form. A malformed short entry, or one with an empty part, fails config
|
|
257
|
+
loading and names the entry. `init` and the wizard write the short form, and the table form for any
|
|
258
|
+
rung the short form cannot express.
|
|
259
|
+
|
|
260
|
+
Rejected implementations return for another review iteration, with a possible Implementer rung
|
|
261
|
+
increase. Provider unavailability gets bounded backoff/retries; quota can wait for a reset or move
|
|
262
|
+
to a later different-provider rung when the configured wait budget is exhausted. Stalls receive
|
|
263
|
+
limited continuation attempts. Authentication problems, unrecoverable failures and exhausted limits
|
|
264
|
+
request Operator attention rather than silently completing a task.
|
|
265
|
+
|
|
266
|
+
Helper has a separate ordered ladder. It tries later entries after failed calls or unusable
|
|
267
|
+
answers, within one total Helper timeout. Any rebuilt report must still pass validation; Helper
|
|
268
|
+
neither approves work nor decides the workflow. Agent session resumption and compaction are
|
|
269
|
+
provider-specific; automatic compaction thresholds are configurable per agent. Token counts,
|
|
270
|
+
context, costs, billing mode and quota are shown when supplied by
|
|
271
|
+
the agent; missing data stays unknown, and quota observations may be stale. A quota block is
|
|
272
|
+
revalidated periodically in the background (and on an Operator retry) against newer provider readings, without delaying other tasks or commands, so queued work
|
|
273
|
+
resumes when quota returns before the predicted reset. Quota reset times are shown in your local
|
|
274
|
+
timezone. A task waiting on quota shows an amber `⧗ quota` in its tmux window tab, and each agent
|
|
275
|
+
pane affected by the wait shows a `⧗ Quota blocked · next check …` (or `retry …`) strip above its
|
|
276
|
+
output until the wait ends.
|
|
277
|
+
|
|
278
|
+
## Configuration and automation
|
|
279
|
+
|
|
280
|
+
Settings merge in this order: packaged defaults → `.shikiru/config.toml` → repeated global
|
|
281
|
+
`--set key.path=value` overrides for that invocation. Use the wizard for project choices and edit
|
|
282
|
+
the config for additional controls. An already-running engine keeps the settings it started with;
|
|
283
|
+
stop/start it to apply engine policy changes. When a new engine run starts, the dashboard re-reads
|
|
284
|
+
the config for slot counts, gauge thresholds, briefing and timeline display, animations, the palette
|
|
285
|
+
confirmation delay, and the disk, Docker and resource refresh intervals; timeouts, Docker scope, the
|
|
286
|
+
repository status cache, the motion timer and the widget list apply when the dashboard starts. An
|
|
287
|
+
invalid config keeps the last valid values and shows an alert in the header.
|
|
288
|
+
|
|
289
|
+
| Configuration area | Controls |
|
|
290
|
+
| --- | --- |
|
|
291
|
+
| `project`, `repo` | Project name, tracker files agents read/update, integration base/remote, ignored cache paths. |
|
|
292
|
+
| `roles`, `agents` | Role and complexity ladders, review escalation policy; plugin CLI arguments, compaction threshold and optional billing declaration. |
|
|
293
|
+
| `orchestration` | Parallel task slots, review iterations and local merge, local squash or pull-request integration; `pr_feedback` (`changes_requested` by default, or `any_comment`) chooses which PR reviews and comments start feedback rounds; `push_interval_seconds` (seconds between pushes of locally integrated bases, default 14400) and `remote_recheck_seconds` (seconds between pending remote checks and retries for an absent remote, default 60); the init wizard also sets the stall and tool timeouts, the quota, CPU and free-RAM limits below. |
|
|
294
|
+
| `orchestration.resources` | CPU/free-RAM gates for dispatch; these do not impose CPU/RAM limits on already-running agents. |
|
|
295
|
+
| `orchestration.quota_refresh` | `interval_seconds` between quota block revalidations (default 300) and `timeout_seconds` bounding each probe (default 30). |
|
|
296
|
+
| `orchestration.timeouts`, `.network`, `.faults`, `.retries` | Stall/tool/Helper/quota/integration/PR limits, remote polling, engine-fault retries, and configurable provider-unavailable retries. |
|
|
297
|
+
| `dashboard` | Widgets, pane splits/titles, animation, display/refresh limits and resource/quota warning thresholds. |
|
|
298
|
+
| `sessions`, `doctor`, `escalation` | SSH-query timeout, live-probe limits and the amount of attempted work summarized in decision context. |
|
|
299
|
+
| `notify` | Optional external notification command and timeout; receives a JSON event on stdin. |
|
|
300
|
+
| `logging`, `retention` | Engine log rotation and pruning horizons for finished run files, events and completed commands. |
|
|
301
|
+
|
|
302
|
+
**Integration:** `orchestration.integration = "merge"` rebases and applies accepted work to the
|
|
303
|
+
local base. `"squash"` ("Local squash and merge") lands the rebased task as a single commit parented
|
|
304
|
+
by the current base and carrying the task's complete tree; an empty task adds no commit. It shares
|
|
305
|
+
every local-merge guard. Task commits follow the target project's documented subject convention, or
|
|
306
|
+
Conventional Commits when none is documented, and carry a `Task: T-n` trailer; merge preserves them,
|
|
307
|
+
while squash uses the accepted whole-change subject and summary and adds the task ID and recovery
|
|
308
|
+
trailers. The Result and Results of a completed task show the landed commit's
|
|
309
|
+
SHA and subject, its destination and the integrated file and line totals, which stay accurate after
|
|
310
|
+
the task branch and worktree are cleaned up. `"pr"` pushes the task branch, opens/adopts a GitHub PR
|
|
311
|
+
and waits for it to merge;
|
|
312
|
+
conflicting/closed/failed or overdue PRs require recovery or a decision. After a merge, the local
|
|
313
|
+
base is fast-forwarded to the merged remote tip before the task is done. If it cannot be (local
|
|
314
|
+
commits the remote lacks, or uncommitted changes in files the merge changes), the task escalates as
|
|
315
|
+
integration blocked and leaves your work untouched; resolve it, then retry to finish the sync.
|
|
316
|
+
Shikiru does not bypass
|
|
317
|
+
repository review policy. With `orchestration.pr_feedback = "changes_requested"` (default) a newly
|
|
318
|
+
submitted changes-requested review, or a new reply in one of its inline discussions, starts a
|
|
319
|
+
feedback round. With `"any_comment"` a newly submitted review that has a body (commented, approved
|
|
320
|
+
or changes requested) and a new reply in any inline discussion start one too. In the wizard the
|
|
321
|
+
choice appears under Integration once "Pull request" is selected. A round works like this: the
|
|
322
|
+
Leader analyses it, the Implementer edits, the Leader verifies, and the engine pushes with a lease
|
|
323
|
+
and replies per item, then returns to the PR wait. Conversation comments, pending or dismissed
|
|
324
|
+
reviews, Shikiru's own replies and edits to handled reviews never start rounds, and Shikiru never dismisses reviews,
|
|
325
|
+
resolves threads, approves or merges. `orchestration.max_iterations` bounds attempts per batch. A
|
|
326
|
+
PR closed without merge escalates and keeps the branch and worktree; only an explicit Operator
|
|
327
|
+
retry opens a new PR. Dirty overlapping changes in the main checkout block local integration;
|
|
328
|
+
commit, move or otherwise resolve them before retrying.
|
|
329
|
+
|
|
330
|
+
**Pushes (merge and squash modes):** `orchestration.push_interval_seconds` (default `14400`, four hours; a
|
|
331
|
+
nonnegative whole number of seconds) controls when locally integrated work reaches `repo.remote`.
|
|
332
|
+
Integrations within an interval accumulate and the first one sets the deadline, so later ones do
|
|
333
|
+
not postpone it. `0` pushes after each successful local integration. Only the base branch is pushed,
|
|
334
|
+
never forced and never task branches or tags; a rejected or timed-out push raises an engine fault,
|
|
335
|
+
keeps the work pending and retries with backoff. A remote that is not configured is not pushed to
|
|
336
|
+
and raises no fault: the work stays pending and the remote is checked again after
|
|
337
|
+
`orchestration.remote_recheck_seconds` (default `60`, a positive whole number of seconds). A check
|
|
338
|
+
that itself fails is a fault like a failed push: it is retried with the same backoff and recovers
|
|
339
|
+
once the check succeeds. Pending work survives restarts. PR mode does not use this setting. Stop and restart the engine to load a changed value.
|
|
340
|
+
|
|
341
|
+
**Caches:** selected Git-ignored cache paths can be cloned into task worktrees using filesystem
|
|
342
|
+
copy-on-write. If unsupported, Shikiru warns and leaves caches uncloned; it does not silently make
|
|
343
|
+
an expensive ordinary copy. Trackers and caches are optional.
|
|
344
|
+
|
|
345
|
+
**Notifications:** tmux messages and an optional hook report completions, escalations, integration
|
|
346
|
+
waits, lost takeovers and engine faults. Urgent undelivered notifications survive restarts; a crash
|
|
347
|
+
can cause a duplicate delivery, so hooks should tolerate repeats.
|
|
348
|
+
|
|
349
|
+
**Provider retry timing:** `[orchestration.retries]` configures unavailable-agent retries in
|
|
350
|
+
seconds, with a multiplier and maximum delay. Defaults are 30 seconds, multiplier 4, 300 seconds
|
|
351
|
+
maximum and 3 retries (delays of 30, 120 and 300 seconds before ladder fallback). The retry count
|
|
352
|
+
may be zero and is limited to 20. Stop and restart the engine to load changed values. These settings
|
|
353
|
+
are separate from `[orchestration.faults]`, which controls engine tick retries.
|
|
354
|
+
|
|
355
|
+
**Automation and extensions:** CLI JSON supports scripts. MCP exposes status/task/escalation queries
|
|
356
|
+
(an escalation carries its packet plus parsed `question`, `agent_options` and `resolutions`),
|
|
357
|
+
session peeks, submission, prioritization, pause/resume/cancel/retry, rung changes, messages,
|
|
358
|
+
takeover/handback, escalation resolution and event waiting. It uses the same operator services and
|
|
359
|
+
command queue as the dashboard. Agent and widget plugins use Python entry points; the
|
|
360
|
+
[agent contract](src/shikiru/agents/contracts.py), [SDK](src/shikiru/agents/sdk/) and
|
|
361
|
+
[contract test kit](src/shikiru/agents/testing/) support additional agents. A plugin opts into the
|
|
362
|
+
wizard's Agents step by giving its agent a `settings()` method that returns
|
|
363
|
+
[`AgentSetting`](src/shikiru/agents/settings.py) entries (key, label, help, kind, default and
|
|
364
|
+
bounds or choices); the plugin's own factory still validates the resulting options. It can raise
|
|
365
|
+
[`AgentOptionsError`](src/shikiru/agents/settings.py) with the rejected option key so the wizard
|
|
366
|
+
focuses that field, or omit the key for an agent-wide rejection.
|
|
367
|
+
|
|
368
|
+
For exact fields and defaults, see [defaults.toml](src/shikiru/config/defaults.toml),
|
|
369
|
+
[settings validation](src/shikiru/config/settings.py), [Claude options](src/shikiru/plugins/agents/claude/options.py)
|
|
370
|
+
and [Codex options](src/shikiru/plugins/agents/codex/options.py). The [MCP tools](src/shikiru/mcp/server.py)
|
|
371
|
+
provide the automation contract.
|
|
372
|
+
|
|
373
|
+
## Persistence, diagnosis and safety
|
|
374
|
+
|
|
375
|
+
The engine is independent of the terminal. Restart it with `shikiru start` to reload persisted
|
|
376
|
+
state, reconcile unfinished work and resume eligible tasks. Re-running `start` also ensures the
|
|
377
|
+
project's tmux session. Terminal detach, engine stop, task pause and task cancellation are distinct
|
|
378
|
+
operations: detaching changes only your connection; Stop interrupts engine-supervised turns and
|
|
379
|
+
ends orchestration while preserving state and the tmux session. Start reconciles and resumes
|
|
380
|
+
eligible work. Use task controls when you need to halt a specific task without stopping others.
|
|
381
|
+
|
|
382
|
+
| Project path | Contents |
|
|
383
|
+
| --- | --- |
|
|
384
|
+
| `.shikiru/config.toml` | Project settings. |
|
|
385
|
+
| `.shikiru/state.db` | Tasks, commands, events, sessions, decisions and recovery state. |
|
|
386
|
+
| `.shikiru/backups/` | Copies of `state.db` from before each schema migration; the newest three are kept. |
|
|
387
|
+
| `.shikiru/worktrees/` | Per-task Git checkouts. |
|
|
388
|
+
| `.shikiru/runs/` | Turn prompts, reports, collected facts, streams and logs. |
|
|
389
|
+
| `.shikiru/logs/engine.log` | Rotating engine diagnostics. |
|
|
390
|
+
|
|
391
|
+
Use Doctor for setup/state problems, status for progress and decisions, and dashboard Diagnostics
|
|
392
|
+
for live resource/fault information. Retention removes eligible finished evidence after configured
|
|
393
|
+
horizons while preserving unresolved work; export evidence you need to keep. Missing/corrupt state
|
|
394
|
+
is not repaired by deleting `.shikiru/`. To roll back after a migration, stop the engine and copy the
|
|
395
|
+
newest file from `.shikiru/backups/` over `state.db`.
|
|
396
|
+
|
|
397
|
+
Shikiru orchestrates agents; it does not sandbox them. Agents run as your user, inherit their CLI's
|
|
398
|
+
environment and may use your credentials. Use only repositories and hosts you trust.
|
|
399
|
+
|
|
400
|
+
- Claude Code defaults to `--permission-mode bypassPermissions`.
|
|
401
|
+
- Codex uses `workspace-write`, with the run directory, task worktree Git directory and shared
|
|
402
|
+
repository `.git` writable. Agents can affect shared Git refs, hooks and configuration.
|
|
403
|
+
- Worktrees separate task files, but do not enforce isolation from the main checkout or other
|
|
404
|
+
worktrees. Project instructions and notification commands also run with your privileges.
|
|
405
|
+
- State files are owner-only, not a security boundary against agents running as you. Prompts,
|
|
406
|
+
reports and exports can contain project-sensitive content; review them before sharing.
|
|
407
|
+
|
|
408
|
+
Review changes and commits before trusting them. Agent review and a valid report are not proof that
|
|
409
|
+
software is correct.
|
|
410
|
+
|
|
411
|
+
## Shikiri-yaku
|
|
412
|
+
|
|
413
|
+
Shikiru stops and waits for a person when it raises an escalation.
|
|
414
|
+
[Shikiri-yaku](https://github.com/ferrum-code-dev/shikiri-yaku) is a companion background service that
|
|
415
|
+
takes that seat: it watches the escalations of your Shikiru projects, handles the routine ones (retries,
|
|
416
|
+
quota waits, engine restarts, approved tool installs) and forwards the rest to you in Telegram, where one
|
|
417
|
+
tap applies the answer. It talks to Shikiru only through `shikiru mcp` and the CLI, and keeps nothing in
|
|
418
|
+
your repositories. Its `doctor` checks that the installed Shikiru is compatible.
|
|
419
|
+
|
|
420
|
+
## Contributing
|
|
421
|
+
|
|
422
|
+
Contributions are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for how to validate a checkout and a real project.
|
|
423
|
+
|
|
424
|
+
## Design
|
|
425
|
+
|
|
426
|
+
[Design](docs/design.md) explains the architecture and invariants. The retained
|
|
427
|
+
[CLI examples](docs/design/references/cli-output-examples.html) and
|
|
428
|
+
[dashboard reference](docs/design/references/dashboard-example.html) show the interface direction.
|