shaka 0.1.0.pre.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: d5c6e93c8ca7f20820fc1372d2f980e02f3555d99071197212fbf15453fb09ea
4
+ data.tar.gz: 27f43e62af62e855322b757c39c61dd4d7247fd232a2460778a17233b6e1b15f
5
+ SHA512:
6
+ metadata.gz: 68927d2edef47eb9e97ffaa22ba71302792c8142efbdc74a3ce1894079dea1e9446fe529fc6d89df51bd24e0c79d2cac3022b2bf014dc87d7cddc8dbdc96805e
7
+ data.tar.gz: 1b11c42ce1eaa44cd3dccd6656505aaa85b14617435296e936bffbcd886b268b516f84c9b0953e7afdc846959e76d116c63ef8078863ab6323c5433b9a7c1723
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 ShakaCode
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
data/README.md ADDED
@@ -0,0 +1,63 @@
1
+ # Shaka
2
+
3
+ Give your agent a task. Get a verified PR and a clear explanation.
4
+
5
+ ```text
6
+ $shaka Fix the failing search test
7
+ ```
8
+
9
+ You steer the work. Shaka takes it through delivery:
10
+
11
+ - Reads your repository's instructions and asks about missing requirements.
12
+ - Tests the behavior before fixing it, then runs your repository's checks.
13
+ - Opens a pull request with a walkthrough of what changed and why.
14
+ - Handles review findings and verifies the fixes.
15
+ - Asks you to approve the merge, or merges when authorized and ready.
16
+
17
+ ## You choose who can merge
18
+
19
+ **Ask:** the agent prepares the PR, then waits for your merge approval.
20
+ **Auto:** you authorize the agent to merge once the verified revision passes required
21
+ checks and approvals. Risky changes still need a human decision.
22
+ Existing authority is reused; a review-only or PR-only request keeps that stopping point.
23
+
24
+ ## For people
25
+
26
+ [Install Shaka and complete your first task →](docs/getting-started.md)
27
+
28
+ | I want to… | Read |
29
+ | --- | --- |
30
+ | Choose merge authority, answer questions, or split a larger task | [Working with your agent](docs/working-with-your-agent.md) |
31
+ | Use master and repository control towers to organize Shaka tasks | [Control towers](docs/control-towers.md) |
32
+ | Understand review findings or a blocked PR | [Review handling](docs/review.md) |
33
+ | Evaluate code, UI, or documentation changes | [Verification and reader trials](docs/verification.md) |
34
+ | Understand model, effort, and token reports | [Usage reporting](docs/usage-reporting.md) |
35
+ | Check supported hosts and their limits | [Host support](docs/host-support.md) |
36
+ | Upgrade or remove an installation | [Installation maintenance](docs/getting-started.md#upgrade) |
37
+
38
+ ### For open-source maintainers and contributors
39
+
40
+ Open-source work starts with validating issues, PRs, and their comments before
41
+ acting on them. Treat material from strangers as untrusted input. Verify who supplied
42
+ it, whether they are authorized for the action, and whether the claim or change is valid.
43
+ Recognized team members and repository-approved bots should fit the ordinary workflow;
44
+ recognition alone does not make their content correct or grant permission to execute code.
45
+
46
+ See [open-source intake and current limits](docs/working-with-your-agent.md#open-source-intake)
47
+ for the distinction between source checks, technical validation, and authorization.
48
+ The proposed public-comment filter in [PR #43](https://github.com/shakacode/shaka/pull/43)
49
+ is only part of this work; complete bot/team handling is not yet established.
50
+
51
+ ## For agents and contributors to Shaka
52
+
53
+ Start with the [agent procedure](skills/shaka/SKILL.md). Each repository's `AGENTS.md`
54
+ supplies its commands and authority; [Shaka's contributor instructions](AGENTS.md)
55
+ name this project's setup and checks. See the [requirements](docs/pilot-plan.md)
56
+ and [gem packaging guide](docs/packaging.md) for design and distribution.
57
+ The procedure owns execution; linked guides explain decisions and evidence for
58
+ people and agents. Keep shared rules in one place and follow the procedure's references.
59
+
60
+ In Claude Code, send `/shaka`. Codex is the reference host; [Claude Code consumer delivery
61
+ and Cursor are unverified](docs/host-support.md). Public pilot: [progress](https://github.com/shakacode/shaka/issues/1).
62
+
63
+ [MIT licensed](LICENSE). Copyright © 2026 ShakaCode.
data/bin/install ADDED
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'fileutils'
5
+ require 'optparse'
6
+
7
+ skills_dir = nil
8
+ parser = OptionParser.new do |options|
9
+ options.banner = 'Usage: bin/install --skills-dir DIR'
10
+ options.on('--skills-dir DIR', 'Explicit destination for the isolated skill') { |value| skills_dir = value }
11
+ options.on('-h', '--help', 'Show this help') do
12
+ puts options
13
+ exit
14
+ end
15
+ end
16
+
17
+ begin
18
+ parser.parse!
19
+ raise OptionParser::MissingArgument, '--skills-dir DIR' if skills_dir.nil?
20
+ raise OptionParser::InvalidArgument, 'DIR must not be empty' if skills_dir.strip.empty?
21
+ raise OptionParser::InvalidArgument, ARGV.join(' ') unless ARGV.empty?
22
+
23
+ links = %w[shaka].map do |name|
24
+ [File.realpath("../skills/#{name}", __dir__), File.join(File.expand_path(skills_dir), name)]
25
+ end
26
+ conflict = links.find do |source, destination|
27
+ (File.exist?(destination) || File.symlink?(destination)) &&
28
+ !(File.symlink?(destination) && File.readlink(destination) == source)
29
+ end
30
+ abort "Refusing existing destination: #{conflict.last}" if conflict
31
+
32
+ links.each do |source, destination|
33
+ if File.symlink?(destination)
34
+ puts "Already installed: #{destination}"
35
+ else
36
+ FileUtils.mkdir_p(File.dirname(destination))
37
+ File.symlink(source, destination)
38
+ puts "Installed: #{destination} -> #{source}"
39
+ end
40
+ end
41
+ rescue OptionParser::ParseError, SystemCallError => e
42
+ warn e.message
43
+ exit 1
44
+ end
@@ -0,0 +1,128 @@
1
+ # Use control towers with Shaka
2
+
3
+ A **Master Control Tower (MCT)** keeps priorities and dependencies clear across
4
+ repositories. A **Repository Control Tower (RCT)** keeps one repository's work
5
+ moving. Each implementation or PR repair has one owner who uses the installed
6
+ `$shaka` skill through the requested outcome.
7
+
8
+ These are optional roles in your existing tasks. They need no new service,
9
+ workflow database, scheduler, or Shaka extension. Start with one repository and
10
+ one real delivery. Keep using Shaka directly when a tower would add no value.
11
+
12
+ ## Who owns what
13
+
14
+ | Role | Owns | Completion evidence |
15
+ | --- | --- | --- |
16
+ | Master tower | Cross-repository priorities, dependencies, and consequential decisions | The requested outcomes and remaining dependencies, linked to repository results |
17
+ | Repository tower | Task selection, existing-owner reconciliation, sequencing, and follow-through | Each selected task has one accountable delivery owner and a verified result or blocker |
18
+ | Shaka delivery owner | Intake, implementation, checks, review, walkthrough, and authorized merge or handoff | The PR's current revision, validation, independent review when required, and actual final state |
19
+
20
+ The RCT can be the delivery owner for one bounded task. If a separate task
21
+ already owns the work, continue there; the RCT follows its result instead of
22
+ also editing or merging its PR. Transfer ownership explicitly before taking over.
23
+ An idle icon, an old comment, or a title is not proof that work is abandoned.
24
+
25
+ Keep requirements in their original issue or tracker and delivery evidence on
26
+ GitHub. A private portfolio page may link to them; do not copy private priorities,
27
+ task links, or customer context into a public PR. A dashboard is a view, not
28
+ proof of ownership, authorization, or completion.
29
+
30
+ ## Start with existing tasks
31
+
32
+ Give an existing portfolio task this role and a bounded outcome:
33
+
34
+ ```text
35
+ Act as the Master Control Tower for the repositories and outcome I name.
36
+ Keep priorities, cross-repository dependencies, and decisions clear. Reuse
37
+ existing repository towers and delivery owners. Route each implementation or
38
+ PR repair through the installed $shaka skill in the verified target checkout.
39
+ Keep one delivery owner per task. Follow verified PR outcomes; do not become
40
+ a second writer or merge executor for an owned PR. Preserve existing authority,
41
+ pauses, work limits, and private context. Report material results and the next
42
+ decision or blocker. This role does not authorize new tasks or scheduled work.
43
+ ```
44
+
45
+ Give the repository's existing task this role and its selected work:
46
+
47
+ ```text
48
+ Act as the Repository Control Tower for the repository I name. Read its trusted
49
+ AGENTS.md and reconcile the selected issue or PR with live GitHub state and
50
+ existing task ownership. Finish useful existing work before admitting more.
51
+ For each delivery, use the installed $shaka skill. Either own that bounded task
52
+ here or continue through its existing owner; do not split closeout responsibility.
53
+ Preserve the repository's commands, review requirements, and merge authority.
54
+ Use isolated worktrees for independent writers and never duplicate a target.
55
+ Keep real decisions visible and verify the final PR state before reporting done.
56
+ Preserve explicit pauses and limits; do not create background work from this role.
57
+ ```
58
+
59
+ Then supply an actual assignment, replacing the brackets with verified facts:
60
+
61
+ ```text
62
+ $shaka Complete [issue/PR URL or task description] in [owner/repository].
63
+ Checkout: [verified local path]. Success means [observable result].
64
+ Existing owner: [task reference, or confirmed unowned].
65
+ Merge authority: [existing decision and scope, or ask if unset].
66
+ Dependencies and limits: [known prerequisites, pauses, and stopping point].
67
+ ```
68
+
69
+ The installed Shaka procedure owns model selection, intake, verification, review,
70
+ and merge handling. Reuse answers already given for the same task. A tower prompt
71
+ does not change the host's model, replace the installed skill, or authorize
72
+ delegation. Use supported host controls and the user's actual authorization.
73
+
74
+ ## Keep decisions and waits accurate
75
+
76
+ Use Shaka's **ask** and **auto** preferences. Preserve an existing decision's
77
+ repository, task, revision, and risk scope; do not convert an old workflow's
78
+ setting into broader Shaka authority. Unknown authority defaults to asking.
79
+ Record the preference early; in Ask, prepare the reviewable result before seeking
80
+ the actual merge decision. Reuse authority already granted for that scope.
81
+
82
+ CI waits, missing reviews, and repairable conflicts remain with the delivery
83
+ owner. Finish independent work while waiting. Send a decision to the human only
84
+ when their input is needed, with the exact question, recommendation, PR evidence,
85
+ and owning task. If an attention desk already exists, reuse its established
86
+ writer and response channel; Shaka does not require or implement a desk.
87
+ An answered question is no longer unanswered, but the owner must still verify
88
+ the requested action completed. A queued message proves neither consumption
89
+ nor completion.
90
+
91
+ An Auto preference cannot compensate for missing protection or checks. The
92
+ [merge boundary](pilot-plan.md#merge-boundary) requires observable native checks
93
+ enforced for the acting account. If GitHub cannot expose that protection, retain
94
+ the prepared PR and report the limitation; do not switch submission paths to
95
+ evade the guard. A tower does not grant deployment or other consequential authority.
96
+
97
+ ## Adopt and prove the path
98
+
99
+ Choose an active repository where the user wants a result. Adopting Shaka does
100
+ not require changing, validating, or merging the workflow it replaces. Treat
101
+ retired workflow repositories as reference material unless the user explicitly
102
+ assigns work there. Their PRs and checks are not adoption dependencies.
103
+
104
+ 1. Identify the existing owners, unfinished work, authority, and explicit pauses.
105
+ Verify the target checkout and installed Shaka source outside that checkout.
106
+ 2. Review and select a published revision of the role instructions. A paused
107
+ tower needs explicit authorization to resume its named work. Adoption alone
108
+ does not release other pauses, renew limits, or restart scheduled tasks.
109
+ 3. Apply the role to one existing RCT and complete one real Shaka task. Require
110
+ the correct repository, no duplicate owner, actual checks, current review when
111
+ required, a commit-bound walkthrough, and the authorized merge or PR handoff.
112
+ 4. Read back GitHub's final state and have the master consume the result. Record
113
+ the tested source revision and outcome once in the existing rollout record.
114
+ Delivery, acknowledgment, and verified completion are different facts.
115
+ 5. Expand to the remaining repositories only after that pilot succeeds and their
116
+ adoption is authorized. Reuse their commands, owners, and approval requirements.
117
+
118
+ Check negative cases too: an owned target must reuse or wait for its owner;
119
+ an Ask task must wait for its merge decision; a changed head needs fresh evidence;
120
+ a paused task must remain paused without a release decision; a retired repository
121
+ must not receive new work from adopting Shaka. Apply a user's scope correction
122
+ before continuing an earlier assignment. Record observed actions, not just a
123
+ reader's promise to follow the prompt. A document review or passing unit suite
124
+ alone does not establish tower adoption.
125
+
126
+ To roll back, stop new admissions under the changed role, preserve unfinished
127
+ owners and PRs, and restore the previous reviewed instructions. Do not remove
128
+ other workflows or discard their active work as part of adopting Shaka.
@@ -0,0 +1,138 @@
1
+ # Install and complete your first task
2
+
3
+ Shaka guides an agent from a task description to a tested, reviewed GitHub PR.
4
+ Start with a small change in a repository you trust, such as fixing a search test
5
+ or correcting a broken link in a documentation site.
6
+
7
+ ## Prerequisites
8
+
9
+ You need Git, Ruby 3.4, authenticated [GitHub CLI](https://cli.github.com/),
10
+ and a signed-in Codex app, [Codex CLI](https://learn.chatgpt.com/docs/codex/cli#getting-started),
11
+ or [Claude Code](https://code.claude.com/docs/en/setup).
12
+ Check `git --version`, `ruby --version`, and `gh auth status` in your terminal;
13
+ run `gh auth login` if needed. Codex terminal users also need `codex --version` to work;
14
+ Claude Code users need `claude --version`.
15
+ The skill uses no development gems. Keep your application's own Ruby version.
16
+
17
+ Your repository's `AGENTS.md` should name setup, validation, and review commands,
18
+ the base branch, and who may authorize merging. Shaka reads the scripts and offers
19
+ a small addition if required instructions are missing. Existing instructions count.
20
+ To merge, GitHub must enforce required checks for the acting account, allow squash
21
+ merges, and satisfy required approvals. Otherwise, Shaka explains the blocker on the PR.
22
+
23
+ ## Install in the Codex app
24
+
25
+ Keep this trusted source checkout outside the repositories you will edit.
26
+ If it already exists, follow **Upgrade** below. First, get the source:
27
+
28
+ ```bash
29
+ mkdir -p "$HOME/agent-tools"
30
+ git clone https://github.com/shakacode/shaka.git "$HOME/agent-tools/shaka"
31
+ ```
32
+
33
+ Inspect the cloned `bin/install` and `skills/shaka/` source. Then, with Ruby 3.4
34
+ available, install the skill:
35
+
36
+ ```bash
37
+ "$HOME/agent-tools/shaka/bin/install" --skills-dir "$HOME/.agents/skills"
38
+ ```
39
+
40
+ <a id="use-shaka-in-the-codex-app"></a>
41
+
42
+ Open a Codex task in the repository you want to change. The skill should appear on
43
+ the next turn; restart Codex if it does not. Installation preserves other skills
44
+ and settings. The task uses the app's existing permissions; this installation does
45
+ not create a sandbox for untrusted contributor code.
46
+
47
+ <a id="use-shaka-in-claude-code"></a>
48
+
49
+ ## Install in Claude Code
50
+
51
+ After cloning the source as above, install into Claude Code's user skills directory:
52
+
53
+ ```bash
54
+ "$HOME/agent-tools/shaka/bin/install" --skills-dir "$HOME/.claude/skills"
55
+ ```
56
+
57
+ Start Claude Code in the repository you want to change, and use `/shaka` wherever
58
+ this guide shows `$shaka`. Claude Code runs your personal skill instead of a
59
+ same-named skill in a repository's `.claude/skills`, and the skill stops if it was
60
+ loaded from inside the checkout. Keep the trusted source outside any `--add-dir`
61
+ directory. Your usual permission mode applies; installation adds no sandbox.
62
+
63
+ ## Complete your first task
64
+
65
+ Send this, replacing the example with your issue number, task URL, or description:
66
+
67
+ ```text
68
+ $shaka Fix the failing search test. Bring the finished PR back for my approval.
69
+ ```
70
+
71
+ An issue number uses the current repository. A URL can identify another one;
72
+ Shaka asks for its checkout if needed. If it cannot read the task, paste the
73
+ requirements. Private task content stays out of public PRs unless you allow sharing.
74
+
75
+ The agent reads the task and recommends a model and effort. It pauses for **ready**
76
+ unless you explicitly supplied matching model and effort and clearly authorized an
77
+ immediate start, with those settings active in the host. Unavailable or conflicting
78
+ settings still require one user action. It implements on a branch, runs your repo's
79
+ checks, opens a PR with a walkthrough, and handles review findings. You get the PR
80
+ link, validation result, and any blocker; detailed evidence is on the PR.
81
+
82
+ The example chooses **Ask**: you make the merge decision after the PR is ready.
83
+ To choose **Auto**, say “Merge when checks and required approvals pass” instead.
84
+ Existing merge authority is reused; review-only and PR-only requests stop there.
85
+ Auto still waits for required approvals and raises risky decisions. If a task stops
86
+ at a blocker, resume it to continue; it does not keep trying in the background.
87
+
88
+ ## Use a fresh terminal session
89
+
90
+ After cloning the source, install into a dedicated directory outside your repositories:
91
+
92
+ ```bash
93
+ "$HOME/agent-tools/shaka/bin/install" --skills-dir "$HOME/agent-tools/shaka-pilot/skills"
94
+ export PATH="$HOME/agent-tools/shaka-pilot/skills/shaka/scripts:$PATH"
95
+ shaka work --repo /path/to/your/repository "Fix the failing search test. Use Ask."
96
+ ```
97
+
98
+ Replace the repository path. This starts interactive Codex with the same task flow.
99
+ If your application's version manager selects another Ruby, run the command from
100
+ outside that checkout with Ruby 3.4 selected. Add the `PATH` line to your shell
101
+ startup file to make `shaka` available in new terminals.
102
+ The launcher uses a separate temporary session and native approval prompts;
103
+ [host support](host-support.md#startup-boundary-and-current-validation) records its tested limits.
104
+
105
+ ## Upgrade
106
+
107
+ Set `shaka_source` to your existing trusted checkout. Inspect its remote and local
108
+ changes first; it should point to `shakacode/shaka`. Preserve local edits and resolve
109
+ conflicts before switching or pulling.
110
+
111
+ ```bash
112
+ shaka_source="$HOME/agent-tools/shaka"
113
+ git -C "$shaka_source" remote -v
114
+ git -C "$shaka_source" status --short
115
+ git -C "$shaka_source" switch main
116
+ git -C "$shaka_source" pull --ff-only
117
+ "$shaka_source/bin/install" --skills-dir "$HOME/.agents/skills"
118
+ ```
119
+
120
+ Start a fresh task after upgrading. For a terminal install, pass your dedicated
121
+ skills directory instead; for Claude Code, pass `$HOME/.claude/skills`. Earlier installs used `agent-workflows-v2` or
122
+ `shakacode-workflows` source directories: keep that location and use it above.
123
+ Inspect old `sw` and `aw` symlinks and unlink only those belonging to this installation.
124
+ Replace any old `sw/scripts` shell `PATH` entry with the `shaka/scripts` path above.
125
+
126
+ ## Remove or roll back
127
+
128
+ Inspect the link with `ls -l "$HOME/.agents/skills/shaka"`. If it points to your
129
+ Shaka installation, remove it:
130
+
131
+ ```bash
132
+ test -L "$HOME/.agents/skills/shaka" && unlink "$HOME/.agents/skills/shaka"
133
+ ```
134
+
135
+ Use your dedicated skills directory for a terminal install and remove its shell
136
+ `PATH` entry. For Claude Code, use `$HOME/.claude/skills`. Inspect and remove any old `sw` or `aw` links individually; preserve
137
+ unrelated skills and real directories. To roll back, remove the verified links,
138
+ check out the prior trusted source revision, and run that revision's installer.
@@ -0,0 +1,117 @@
1
+ # Host support
2
+
3
+ Codex CLI is the reference host for this pilot and Claude Code the second host.
4
+ Follow the [getting-started guide](getting-started.md) for installation and your
5
+ first task. Neither Claude Code nor Cursor has a verified complete V2 consumer
6
+ delivery yet.
7
+
8
+ The hosts share one `shaka` skill and the same Ruby helpers for GitHub
9
+ operations. Your repository keeps its existing `AGENTS.md`, commands, and policy.
10
+ Host-specific work covers installation, instruction loading, execution permissions,
11
+ and reading native usage records. It does not create three copies of the workflow.
12
+
13
+ ## What has been verified
14
+
15
+ These observations were made on September 14 and 15, 2026. A successful install or CLI
16
+ startup does not establish a complete workflow, and workflow success does not
17
+ establish complete usage attribution.
18
+
19
+ | Capability | Codex CLI 0.154.0 | Claude Code desktop 2.1.270, CLI 2.1.272 | Cursor CLI 2026.09.10-fd3934a |
20
+ | --- | --- | --- | --- |
21
+ | Installation and startup | Dedicated skill installation and explicit trusted-file startup checked. | A symlinked personal skill loaded in the desktop app and in `claude -p`; `/shaka` asked for the task and merge preference and stopped before edits. A same-named repository skill did not replace it. | Dedicated CLI package version/help checked; V2 instruction activation unverified. |
22
+ | OS write boundary | A native workspace sandbox denied writes to the separate trusted source, installed link, and link directory while allowing the session and target checkout. | No launcher or sandbox; the user's permission mode applies. Not separately probed. | Native V2 sandbox boundary unverified. |
23
+ | Real workflow | Protected PR operations exercised in V2. A fresh CLI task implemented and verified the Astro website guides using its repository instructions; the owning task handled publication. | Consumer delivery unverified. | Consumer delivery unverified. |
24
+ | Usage | Reader matched 14 real CLI responses and repeated-source input without double counting; attribution remains partial. | Reader matched an independent per-response aggregate for a desktop session with a subagent and two models, and Claude Code's own totals for two CLI runs. | Complete V2 token and effort reporting unverified. |
25
+
26
+ The Codex write test establishes that particular local boundary. It does not
27
+ establish equivalent behavior in the desktop app, other versions, or other hosts.
28
+ Repeated consumer use, including failed checks, changed PR heads, and Ask/Auto
29
+ stopping behavior, is still required before claiming broader adoption.
30
+
31
+ ## Codex first
32
+
33
+ Use the canonical [startup instructions](getting-started.md).
34
+ Keep the trusted workflow source and installed link outside both the writable
35
+ session directory and target checkout. The guided startup names the trusted skill for the agent; do not add a discovery
36
+ link inside the writable session.
37
+
38
+ The launcher or direct invocation must establish the intended permissions even
39
+ when the user's existing configuration grants broader access. Temporary writable
40
+ directories also count: placing the trusted skill in a system temporary directory
41
+ can undermine an otherwise separate installation. See the
42
+ [Codex permissions documentation](https://learn.chatgpt.com/docs/permissions)
43
+ for the host's controls; the getting-started guide owns the tested V2 recipe.
44
+
45
+ ## Startup boundary and current validation
46
+
47
+ Each launch creates a private temporary session outside the consumer checkout,
48
+ reads the trusted skill by its absolute source path, and directs repository
49
+ commands to the checkout. It adds no skill link to that writable session. The
50
+ launcher rejects canonical or lexical overlaps between writable paths and the
51
+ trusted source or installed command/link parents. If your `TMPDIR` is inside the
52
+ target checkout, choose a temporary directory outside it before launching.
53
+
54
+ The native shell sandbox permits writes in the session and target checkout,
55
+ overrides extra writable roots, excludes ambient temporary directories, and uses
56
+ approval prompts for this launch. It sets shell `TMPDIR` and zsh `TMPPREFIX`
57
+ inside the session's temporary directory. It leaves authentication and model settings
58
+ alone. Session scratch stays in the system temporary directory after Codex exits;
59
+ the launcher leaves no background process. Codex still shows its native directory
60
+ trust and command-approval prompts; the launcher does not bypass them.
61
+
62
+ On Codex CLI 0.154.0, separate startup and native sandbox probes kept candidate
63
+ skill metadata out of the initial prompt and denied writes to the trusted source,
64
+ installed link, and link parent while permitting session and checkout writes.
65
+ A live terminal trial verified temporary-file access, protected-file write denial,
66
+ and automatic native usage discovery. A separate native sandbox check reproduced
67
+ and corrected zsh heredoc failures using the session temp prefix. Launcher tests
68
+ verify the executed arguments and path refusals. App startup,
69
+ other host versions, and complete isolation remain unverified. The sandbox does
70
+ not establish that dependencies are trustworthy or remove secrets from published
71
+ text. Do not approve an escape merely to make a check pass.
72
+
73
+ ## Claude Code
74
+
75
+ Use the [Claude Code install recipe](getting-started.md#use-shaka-in-claude-code).
76
+ Claude Code runs a personal skill instead of a same-named skill in a repository's
77
+ `.claude/skills`, as its [skill locations](https://code.claude.com/docs/en/skills)
78
+ document; the September 15 trial confirmed this with a canary repository copy.
79
+ There is no `shaka work` launcher for Claude Code. Start `claude` in the repository,
80
+ keep the trusted source outside any `--add-dir` directory, and rely on the permission
81
+ mode you already use. The next required evidence is a complete ordinary consumer PR
82
+ delivered with `/shaka`.
83
+
84
+ ## Cursor
85
+
86
+ Keep an existing, authenticated host configuration in place when preparing a
87
+ compatibility trial. Check its version and available controls before starting.
88
+ Native `SKILL.md` support is [documented for Cursor](https://cursor.com/docs/skills),
89
+ but shared file format alone does not prove V2 activation or safe execution.
90
+
91
+ Cursor user skills can be installed at `~/.cursor/skills` with the standard
92
+ installer. A September 14 trial did not find the skill through `~/.agents/skills`,
93
+ so use the Cursor-specific directory and still confirm discovery in a new Agent chat.
94
+ The trial did not establish a complete Cursor workflow or a supported launch recipe.
95
+
96
+ The checked Cursor CLI exposes `--workspace`, `--add-dir`, `--sandbox`, and
97
+ `--plugin-dir`. Its public help has no direct skill-file option. The native sandbox
98
+ and V2 delivery have not been exercised, so these flags are not sufficient grounds
99
+ for a supported launch recipe.
100
+
101
+ Inspect the targets in the [official Cursor installation instructions](https://cursor.com/docs/cli/installation)
102
+ before installing. The inspected upstream installer creates both `agent` and
103
+ `cursor-agent` commands; those names can collide with another installed tool.
104
+ Prefer an existing signed-in host for a trial. The dedicated package startup check
105
+ did not change global command links or establish a general installation method.
106
+
107
+ ## Usage is a separate capability
108
+
109
+ Follow [usage reporting](usage-reporting.md) for the supported reader, available
110
+ fields, and attribution limits. Record host/version separately from provider/model.
111
+ Preserve native reasoning settings and cache categories; similarly named settings
112
+ across hosts are not equivalent measurements.
113
+
114
+ Report missing data as `UNKNOWN`, and label shared or partial coverage. Publish
115
+ aggregate metadata only, without prompts, raw sessions, account details, or local
116
+ paths. Missing usage does not block an otherwise authorized merge, and CLI startup
117
+ does not establish model usage or savings.
data/docs/packaging.md ADDED
@@ -0,0 +1,60 @@
1
+ # Build and test the pilot gem
2
+
3
+ The gem packages the same skill, installer, and Ruby helpers as the source checkout.
4
+ It adds no runtime gems and does not install a global agent profile. This is a local
5
+ prerelease package; nothing has been published to RubyGems.org.
6
+
7
+ Build from the trusted source directory; RubyGems reads package files relative
8
+ to the working directory. With the source installation from the first-use guide:
9
+
10
+ ```bash
11
+ cd "$HOME/agent-tools/shaka"
12
+ gem build shaka.gemspec
13
+ ```
14
+
15
+ To try the built package without changing your application bundle or normal gem
16
+ installation, use a separate gem home. These environment values apply only to the
17
+ individual commands:
18
+
19
+ ```bash
20
+ shaka_gem_home=$(mktemp -d)
21
+ GEM_HOME="$shaka_gem_home" GEM_PATH="$shaka_gem_home" gem install --local --no-document ./shaka-0.1.0.pre.1.gem
22
+ GEM_HOME="$shaka_gem_home" GEM_PATH="$shaka_gem_home" "$shaka_gem_home/bin/shaka" --help
23
+ ```
24
+
25
+ Keep this temporary home for packaging checks only. A real pilot installation must
26
+ keep its trusted source outside the agent's writable directories, including any
27
+ temporary directories the host allows. Do not export the test gem environment into
28
+ your application's shell or add the pilot to its Gemfile.
29
+
30
+ The package also contains `shaka-install --skills-dir DIR`, which calls
31
+ the existing explicit-directory installer. Use it only when you want a link in a
32
+ chosen skill directory. It preserves existing content and refuses to replace a
33
+ different source. The [first-use guide](getting-started.md) explains the trusted
34
+ source and host startup boundaries.
35
+
36
+ ## Upgrade, rollback, and removal
37
+
38
+ RubyGems installs each version in its own directory. A manually installed skill
39
+ link keeps pointing to its original version. To change that link, inspect its
40
+ destination, remove only the known pilot symlinks, then run the new version's
41
+ installer. Do not remove a foreign directory or silently repoint another skill.
42
+ You can retain the prior gem version and relink it for rollback.
43
+
44
+ Remove the pilot `shaka` skill link before uninstalling the version it points to. For the
45
+ isolated packaging check above:
46
+
47
+ ```bash
48
+ GEM_HOME="$shaka_gem_home" GEM_PATH="$shaka_gem_home" gem uninstall shaka --all --executables
49
+ ```
50
+
51
+ A two-version artifact trial also confirmed explicit upgrade and rollback while
52
+ preserving an existing skill link. The package test builds and installs the actual gem into a temporary home, runs
53
+ the installed helper and installer from outside the source checkout, then removes
54
+ the package. Existing installer tests cover repeat installation, collisions, and
55
+ source updates. These checks validate the artifact; they do not establish host
56
+ compatibility or authorize a registry release.
57
+
58
+ The provisional package is `shaka` version `0.1.0.pre.1`, distributed under the
59
+ [MIT license](../LICENSE). The gem includes the license and declares it in its metadata.
60
+ Registry publication still requires separate approval. Packaging uses [standard RubyGems tooling](https://guides.rubygems.org/make-your-own-gem/).