Repository navigation
Add wally deepsec and wally vvah hosted launchers - #223
Conversation
Co-authored-by: Cursor <cursoragent@cursor.com>
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the
|
There was a problem hiding this comment.
19 issues found across 55 files
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="tests/golden/README.md">
<violation number="1" location="tests/golden/README.md:121">
P3: The golden lists add the `Security tools:` header as well as the two command entries, so saying those two lines are the only difference misdescribes the captured output. Document the header and separator too.</violation>
</file>
<file name="src/app.rs">
<violation number="1" location="src/app.rs:187">
P2: `split_passthrough_argv` now misclassifies a root option value such as `--home deepsec` or `--home vvah` as the wrapped command, inserting `--` before the real subcommand. Restrict passthrough detection to the actual root subcommand position and skip root option values.</violation>
</file>
<file name="docs/EDITORS.md">
<violation number="1" location="docs/EDITORS.md:480">
P3: This path is incorrect on Windows, where the VVAH profile is under `%LOCALAPPDATA%/RunAnywhere/Wally`. Refer to the platform-specific profile path instead of hardcoding `~/.config/wally`.</violation>
<violation number="2" location="docs/EDITORS.md:488">
P3: This absolute path claim is not true for pass-through commands or targets containing the profile directory. Document that staging applies to routed commands and may use a temporary directory to keep the config outside the scan target.</violation>
<violation number="3" location="docs/EDITORS.md:494">
P3: This message is not emitted whenever `python3` is missing or old; wally first selects any supported `python3.11`–`python3.14` candidate. Describe the fallback message as applying only when no supported interpreter is available.</violation>
</file>
<file name="src/harness/vvah.rs">
<violation number="1" location="src/harness/vvah.rs:135">
P2: `config_yaml` writes the selected model as an unescaped YAML scalar, so a model ID containing YAML syntax can corrupt the overlay. Serialize or quote the model value before inserting it into every role mapping.</violation>
<violation number="2" location="src/harness/vvah.rs:286">
P2: When the packaged default cannot be located, the launcher passes `config.local.yaml` as the primary config and omits VVAH's packaged defaults. Return a clear error instead of falling back to the overlay path.</violation>
<violation number="3" location="src/harness/vvah.rs:651">
P2: `wally vvah -m org/model` is rejected even though hosted model IDs may contain `/`. Validate against the account model-ID contract here instead of the harness-safe check that forbids `/`.</violation>
<violation number="4" location="src/harness/vvah.rs:662">
P1: The bare-command home-directory safety check is bypassed on Windows because it never reads `USERPROFILE`. Use the platform home variable before allowing the default remediating scan.</violation>
</file>
<file name="src/harness/deepsec.rs">
<violation number="1" location="src/harness/deepsec.rs:50">
P2: The home-safety check only recognizes an empty argv, so `wally deepsec -- init` and `init --repo .` from `$HOME` still run DeepSec against the home tree. Apply the guard to the effective init workspace, not the spelling of the Wally command.</violation>
<violation number="2" location="src/harness/deepsec.rs:73">
P1: The hosted route is not actually protected from trailing DeepSec arguments. Reserve every injected route flag, including `--agent`, `--model`, `--ai-provider`, and `--ai-credential-header`, before appending user options.</violation>
<violation number="3" location="src/harness/deepsec.rs:488">
P1: The home-workspace safety check is ineffective on standard Windows shells because `launch` ignores `USERPROFILE`. Use the platform home variable, with `HOME` as a fallback, so bare DeepSec cannot recursively treat a Windows user profile as its workspace.
(Based on your team's feedback about Windows home-directory fallbacks.)</violation>
</file>
<file name="skills/runanywhere/SKILL.md">
<violation number="1" location="skills/runanywhere/SKILL.md:75">
P2: The skill advertises no security-scanner trigger, so agents may not load these new DeepSec/VVAH instructions for security-tool requests. Add DeepSec/VVAH or authorised-repository scanning to the frontmatter description.</violation>
<violation number="2" location="skills/runanywhere/SKILL.md:77">
P2: DeepSec and VVAH are local npm/Python scanners; only their model calls are hosted. Describe them as local security scanners against a hosted model so users understand the local execution and repository side effects.</violation>
<violation number="3" location="skills/runanywhere/SKILL.md:80">
P2: The launcher passes DeepSec routing options on the command line, while it keeps the API key in the child environment. Say that keys stay out of command-line arguments instead of claiming routing never uses them.</violation>
<violation number="4" location="skills/runanywhere/SKILL.md:85">
P3: These examples rely on an undefined `$REPO_PATH`, so copy-pasting them normally passes an empty repository path. Use a concrete placeholder such as `./my-repo`, or define `REPO_PATH` immediately before the commands.</violation>
</file>
<file name="src/harness/hosted.rs">
<violation number="1" location="src/harness/hosted.rs:34">
P2: A valid `WALLY_CLOUD_KEY` is blocked by any error loading the local signed-in session. Check and validate the cloud key before loading stored credentials, using the configured default console URL for that independent path.</violation>
<violation number="2" location="src/harness/hosted.rs:170">
P1: `load_models` makes every requested or preferred model appear available by calling `catalog_models_with`, whose fallback insertion is intended for configuration generation, not account authorization. Use the actual `/v1/models` entries for `choose_model` (and retain the catalog metadata separately) so unavailable IDs are rejected and the first real model is selected.</violation>
<violation number="3" location="src/harness/hosted.rs:180">
P2: The implicit default bypasses `require_safe_model`; reject an unsafe `WALLY_DEFAULT_MODEL` before forwarding it into DeepSec or VVAH, matching the validation applied to explicit `-m` values.</violation>
</file>
Reply with feedback, questions, or to request a fix.
View guided diff | Turn on auto-fix | Re-trigger cubic
| } | ||
| }; | ||
| let cwd = std::env::current_dir().unwrap_or_default(); | ||
| let home = std::env::var_os("HOME").map(PathBuf::from); |
There was a problem hiding this comment.
P1: The bare-command home-directory safety check is bypassed on Windows because it never reads USERPROFILE. Use the platform home variable before allowing the default remediating scan.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At src/harness/vvah.rs, line 662:
<comment>The bare-command home-directory safety check is bypassed on Windows because it never reads `USERPROFILE`. Use the platform home variable before allowing the default remediating scan.</comment>
<file context>
@@ -0,0 +1,950 @@
+ }
+ };
+ let cwd = std::env::current_dir().unwrap_or_default();
+ let home = std::env::var_os("HOME").map(PathBuf::from);
+ if refuse_home_workspace(args, &cwd, home.as_deref()) {
+ out::error_line(
</file context>
| }; | ||
|
|
||
| let cwd = std::env::current_dir().unwrap_or_default(); | ||
| let home = std::env::var_os("HOME").map(PathBuf::from); |
There was a problem hiding this comment.
P1: The home-workspace safety check is ineffective on standard Windows shells because launch ignores USERPROFILE. Use the platform home variable, with HOME as a fallback, so bare DeepSec cannot recursively treat a Windows user profile as its workspace.
(Based on your team's feedback about Windows home-directory fallbacks.)
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At src/harness/deepsec.rs, line 488:
<comment>The home-workspace safety check is ineffective on standard Windows shells because `launch` ignores `USERPROFILE`. Use the platform home variable, with `HOME` as a fallback, so bare DeepSec cannot recursively treat a Windows user profile as its workspace.
(Based on your team's feedback about Windows home-directory fallbacks.) </comment>
<file context>
@@ -0,0 +1,812 @@
+ };
+
+ let cwd = std::env::current_dir().unwrap_or_default();
+ let home = std::env::var_os("HOME").map(PathBuf::from);
+ if refuse_home_workspace(args, &cwd, home.as_deref()) {
+ out::error_line(
</file context>
| let home = std::env::var_os("HOME").map(PathBuf::from); | |
| let home = if cfg!(windows) { | |
| std::env::var_os("USERPROFILE") | |
| .or_else(|| std::env::var_os("HOME")) | |
| .map(PathBuf::from) | |
| } else { | |
| std::env::var_os("HOME").map(PathBuf::from) | |
| }; |
|
|
||
| const ROUTE_COMMANDS: [&str; 4] = ["init", "setup", "process", "revalidate"]; | ||
|
|
||
| const OWNED_FLAGS: [&str; 3] = ["--model-auth", "--ai-base-url", "--ai-api-key-env"]; |
There was a problem hiding this comment.
P1: The hosted route is not actually protected from trailing DeepSec arguments. Reserve every injected route flag, including --agent, --model, --ai-provider, and --ai-credential-header, before appending user options.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At src/harness/deepsec.rs, line 73:
<comment>The hosted route is not actually protected from trailing DeepSec arguments. Reserve every injected route flag, including `--agent`, `--model`, `--ai-provider`, and `--ai-credential-header`, before appending user options.</comment>
<file context>
@@ -0,0 +1,812 @@
+
+const ROUTE_COMMANDS: [&str; 4] = ["init", "setup", "process", "revalidate"];
+
+const OWNED_FLAGS: [&str; 3] = ["--model-auth", "--ai-base-url", "--ai-api-key-env"];
+
+const OVERRIDING_VARIABLES: [&str; 4] = [
</file context>
| return Err(1); | ||
| } | ||
| } | ||
| let mut models = catalog_models_with(console, &hosted.console_url, &hosted.key, primary); |
There was a problem hiding this comment.
P1: load_models makes every requested or preferred model appear available by calling catalog_models_with, whose fallback insertion is intended for configuration generation, not account authorization. Use the actual /v1/models entries for choose_model (and retain the catalog metadata separately) so unavailable IDs are rejected and the first real model is selected.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At src/harness/hosted.rs, line 170:
<comment>`load_models` makes every requested or preferred model appear available by calling `catalog_models_with`, whose fallback insertion is intended for configuration generation, not account authorization. Use the actual `/v1/models` entries for `choose_model` (and retain the catalog metadata separately) so unavailable IDs are rejected and the first real model is selected.</comment>
<file context>
@@ -0,0 +1,217 @@
+ return Err(1);
+ }
+ }
+ let mut models = catalog_models_with(console, &hosted.console_url, &hosted.key, primary);
+ models.retain(|model| !super::is_decisions_model(&model.id));
+ Ok(models)
</file context>
| "prime-agent", | ||
| "command-code", | ||
| "shannon", | ||
| "deepsec", |
There was a problem hiding this comment.
P2: split_passthrough_argv now misclassifies a root option value such as --home deepsec or --home vvah as the wrapped command, inserting -- before the real subcommand. Restrict passthrough detection to the actual root subcommand position and skip root option values.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At src/app.rs, line 187:
<comment>`split_passthrough_argv` now misclassifies a root option value such as `--home deepsec` or `--home vvah` as the wrapped command, inserting `--` before the real subcommand. Restrict passthrough detection to the actual root subcommand position and skip root option values.</comment>
<file context>
@@ -180,6 +184,8 @@ fn is_passthrough_command(token: &str) -> bool {
"prime-agent",
"command-code",
"shannon",
+ "deepsec",
+ "vvah",
];
</file context>
| `help__shannon` and `help__help__shannon` are new cases. | ||
|
|
||
| `wally deepsec` and `wally vvah` added a **Security tools** group to every | ||
| command list, so those two lines are the only extra difference in each. |
There was a problem hiding this comment.
P3: The golden lists add the Security tools: header as well as the two command entries, so saying those two lines are the only difference misdescribes the captured output. Document the header and separator too.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At tests/golden/README.md, line 121:
<comment>The golden lists add the `Security tools:` header as well as the two command entries, so saying those two lines are the only difference misdescribes the captured output. Document the header and separator too.</comment>
<file context>
@@ -116,3 +116,8 @@ each. `help__command-code` and `help__help__command-code` are new cases.
`help__shannon` and `help__help__shannon` are new cases.
+
+`wally deepsec` and `wally vvah` added a **Security tools** group to every
+command list, so those two lines are the only extra difference in each.
+`help__deepsec`, `help__help__deepsec`, `help__vvah` and `help__help__vvah` are
+new cases.
</file context>
| command list, so those two lines are the only extra difference in each. | |
| command list; the `Security tools:` header, its two command lines and separator are the only extra differences in each. |
| `OPENAI_BASE_URL` only. VVAH's S10 stage can edit files on disk as part of a | ||
| scan; run it only on trees you are allowed to change. | ||
|
|
||
| If you confirm install and `python3` is missing or older than 3.11, wally |
There was a problem hiding this comment.
P3: This message is not emitted whenever python3 is missing or old; wally first selects any supported python3.11–python3.14 candidate. Describe the fallback message as applying only when no supported interpreter is available.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At docs/EDITORS.md, line 494:
<comment>This message is not emitted whenever `python3` is missing or old; wally first selects any supported `python3.11`–`python3.14` candidate. Describe the fallback message as applying only when no supported interpreter is available.</comment>
<file context>
@@ -404,3 +406,91 @@ available to your account.
+`OPENAI_BASE_URL` only. VVAH's S10 stage can edit files on disk as part of a
+scan; run it only on trees you are allowed to change.
+
+If you confirm install and `python3` is missing or older than 3.11, wally
+prints `python 3.11 is not installed on this machine, Please install it first, Thank You`
+and exits. The venv is left in place for the next run.
</file context>
| If you confirm install and `python3` is missing or older than 3.11, wally | |
| If no supported Python 3.11–3.14 interpreter is available after you confirm install, wally reports the problem; for a missing or older-than-3.11 `python3`, it |
| wally vvah -m glm-5.3-flash -- report | ||
| ``` | ||
|
|
||
| Each run rewrites `<profile>/vvah/config.local.yaml` (owner-only, 0600). Every |
There was a problem hiding this comment.
P3: This absolute path claim is not true for pass-through commands or targets containing the profile directory. Document that staging applies to routed commands and may use a temporary directory to keep the config outside the scan target.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At docs/EDITORS.md, line 488:
<comment>This absolute path claim is not true for pass-through commands or targets containing the profile directory. Document that staging applies to routed commands and may use a temporary directory to keep the config outside the scan target.</comment>
<file context>
@@ -404,3 +406,91 @@ available to your account.
+wally vvah -m glm-5.3-flash -- report
+```
+
+Each run rewrites `<profile>/vvah/config.local.yaml` (owner-only, 0600). Every
+active scanner role maps to your chosen model with `via: openai`; the file
+never contains the API key. The child gets `OPENAI_API_KEY` and
</file context>
| Each run rewrites `<profile>/vvah/config.local.yaml` (owner-only, 0600). Every | |
| For each routed command, wally rewrites the overlay at `<profile>/vvah/config.local.yaml` (owner-only, 0600); if that path is inside the scan target, it uses a temporary directory instead. Every |
|
|
||
| With no VVAH command after `--`, wally runs `scan --repo . --remediate`. Run | ||
| that from a project directory, not `$HOME` (the profile config lives under | ||
| `~/.config/wally`, and VVAH refuses a `--config` inside the scan target). Other |
There was a problem hiding this comment.
P3: This path is incorrect on Windows, where the VVAH profile is under %LOCALAPPDATA%/RunAnywhere/Wally. Refer to the platform-specific profile path instead of hardcoding ~/.config/wally.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At docs/EDITORS.md, line 480:
<comment>This path is incorrect on Windows, where the VVAH profile is under `%LOCALAPPDATA%/RunAnywhere/Wally`. Refer to the platform-specific profile path instead of hardcoding `~/.config/wally`.</comment>
<file context>
@@ -404,3 +406,91 @@ available to your account.
+
+With no VVAH command after `--`, wally runs `scan --repo . --remediate`. Run
+that from a project directory, not `$HOME` (the profile config lives under
+`~/.config/wally`, and VVAH refuses a `--config` inside the scan target). Other
+commands pass through:
+
</file context>
| `~/.config/wally`, and VVAH refuses a `--config` inside the scan target). Other | |
| the active Wally profile (see the platform-specific paths above), and VVAH refuses a `--config` inside the scan target). Other |
| wally deepsec -- init --repo "$REPO_PATH" | ||
| wally vvah -- scan --repo "$REPO_PATH" |
There was a problem hiding this comment.
P3: These examples rely on an undefined $REPO_PATH, so copy-pasting them normally passes an empty repository path. Use a concrete placeholder such as ./my-repo, or define REPO_PATH immediately before the commands.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At skills/runanywhere/SKILL.md, line 85:
<comment>These examples rely on an undefined `$REPO_PATH`, so copy-pasting them normally passes an empty repository path. Use a concrete placeholder such as `./my-repo`, or define `REPO_PATH` immediately before the commands.</comment>
<file context>
@@ -72,6 +72,20 @@ sign-in lasts, the person exports a console Cloud key as `WALLY_CLOUD_KEY`.
+`WALLY_CLOUD_KEY`. Details are in `docs/EDITORS.md`.
+
+```bash
+wally deepsec -- init --repo "$REPO_PATH"
+wally vvah -- scan --repo "$REPO_PATH"
+```
</file context>
| wally deepsec -- init --repo "$REPO_PATH" | |
| wally vvah -- scan --repo "$REPO_PATH" | |
| wally deepsec -- init --repo ./my-repo | |
| wally vvah -- scan --repo ./my-repo |
…219) * chore: start wally shannon work Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Add wally shannon launcher and clearer not-approved model message wally shannon runs the pinned Shannon release (installed, or via npx) against the models on a RunAnywhere account. For start it writes a Pi models.json (owner-only), sets SHANNON_AI_MODEL and SHANNON_AI_API_KEY for the child only, and removes variables that would override the key. Other Shannon commands pass through untouched. Native Windows is refused with a pointer to WSL2. A hosted model missing from the account list now says to request access in the console instead of implying a login problem. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Document wally shannon, add golden help cases and skill note Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Bump to 0.8.14 for wally shannon; harden its tests Releases the skill note and the new command. Also keeps WALLY_CLOUD_KEY out of Shannon's environment, retries a busy script once, and takes the shared environment lock before a test resolves the temp directory. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * wally shannon: pin the endpoint and turn off Pi login reuse Shannon fills a missing SHANNON_AI_BASE_URL from its saved settings, so removing the variable could still send the key to another host. Set it to the Wally endpoint instead. SHANNON_USE_PI_AUTH=1 makes Shannon use a local Pi login and ignore the key it is given, so force it to 0 for start. The child-environment test now sets both strays and checks the child sees the Wally endpoint and Pi login reuse off. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * harness: add hosted wally deepsec and wally vvah (#223) Co-authored-by: Cursor <cursoragent@cursor.com> * docs: address CodeRabbit review on the security harnesses PR CodeRabbit asked for five doc fixes; this applies them and brings the deepsec and vvah docs level with shannon's. - EDITORS.md Shannon environment: wally sets SHANNON_AI_BASE_URL to its own endpoint (it does not drop it); it removes OPENAI_API_KEY, ANTHROPIC_API_KEY, XAI_API_KEY and WALLY_CLOUD_KEY from the child only. - EDITORS.md manual Shannon example: quoted shell-safe Cloud key placeholder instead of an angle-bracket one. - EDITORS.md model fields: map max_input_tokens to contextWindow, max_output_tokens to maxTokens and input_modalities to input. - README.md: Node 18+ is needed only when Shannon 3.4.0 is not on PATH. - SKILL.md: quoted $APP_URL / $REPO_PATH in the shannon command, same conditional Node requirement. - DeepSec 2.3.10 and VVAH 1.5.1 pinned versions, the PATH-or-npx / pip venv install route, account-or-WALLY_CLOUD_KEY model source and the child-only environment override are now stated in EDITORS.md, README.md and SKILL.md. Skipped: removing authHeader from the manual Shannon models.json example. Wally's own generated models.json (src/harness/shannon.rs) writes it, and the Pi 3.4.0 client behaviour was not verified here, so the example keeps matching what wally ships. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * harness: skip DeepSec npx confirm and turn off VVAH step1 effort Co-authored-by: Cursor <cursoragent@cursor.com> * Keep a retired model id out of the deepsec passthrough test scripts/ci/check-retired-model-ids.py scans src/ and is wired into ci.yml; it flagged `zai/glm-5.2` in deepsec.rs:650. The test only proves `pi_model_id` leaves an already-slashed `provider/model` pair unchanged, so the id is incidental -- it now uses `acme/custom-model`, a non-retired pair. Checker after: "no retired model ids in 140 user-facing files". The test still passes (pi_model_id_prefixes_runanywhere_when_bare ... ok) and the crate builds. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * cargo fmt the deepsec select_runner test call The distribution job's `cargo fmt --check` failed on deepsec.rs:777: a multi-line `select_runner(...)` call in a test was not rustfmt-formatted. Mechanical `cargo fmt`; only that block changed, and `cargo fmt --check` is clean after. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Fix a clippy lint in the vvah install path The distribution job's `cargo clippy --all-targets -- -D warnings` failed on vvah.rs:553: `.as_ref().map(PathBuf::as_path)` on an Option is `clippy::option_as_ref_deref`. Use `.as_deref()`. clippy and `cargo fmt --check` are both clean after. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Address PR #219 review comments on the security harnesses Docs: add SHANNON_AI_BASE_URL to the shannon env row, note VVAH strips the ANTHROPIC_*/WALLY_CLOUD_KEY variables, drop -m from the VVAH report example, qualify the 0600 claim on Windows and document the temp-dir config fallback, cover the python>3.14 message, fix the nested-backtick install prompt, name the exact DeepSec 2.3.10 PATH rule, soften the "needs approval" wording, describe routing as tool-specific, harden the manual Shannon recipe, fix the mod.rs module doc. Golden: update the invocation and added-line counts in the README, add the Security tools section (and shannon/deepsec/vvah passthrough) to the capture script, and reword the bare `wally vvah` footer example to say it remediates. Code: refuse every flag wally deepsec injects, not just three; honour USERPROFILE when HOME is unset for the home-directory guard; quote the model id as a YAML scalar in the VVAH config; quote paths in the printed VVAH install command; find the nearest existing ancestor when checking config containment; choose the model from the account's own list so an unavailable -m is refused (it was silently inserted); skip the price request after a failed model list; say "using <model>" rather than "default model" when the default was unavailable; make the shannon env test restore prior values. Design and security items are documented in comments/PR_219_comments.md and flagged to the author; no behavior changes were made for them. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Add the PR #219 comment triage document Single source of truth for all 66 comments: what was fixed in b7c5c5d, and the design and security decisions flagged to the author with recommendations. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Remove the PR-comment triage doc from the tree comments/ is gitignored (/comments/ in .gitignore); the triage worker force-added PR_219_comments.md. It is working notes, not part of the product, so it comes out of the branch. The triage itself is recorded on the PR threads and in the consolidated PR comment. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * Document the real DeepSec init form, not a flag it does not have DeepSec 2.3.10 `init` takes `[workspace] [target-root]` as positionals and has no `--repo` option; `deepsec init --repo ./my-repo` fails with "unknown option '--repo'". The README, docs/EDITORS.md, the runanywhere skill, the `wally deepsec` help footer and both golden help files all showed that form. They now show `wally deepsec -- init . ./my-repo` (workspace `.`, target-root the repo). The status and process examples were checked against the real `--help` and are valid. The unit tests that pass `--repo` through are unchanged: they treat it as an opaque argument. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Siddhesh Sonar <DARKWILDHACKER@gmail.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Summary
Adds
wally deepsecandwally vvahas hosted-only launchers, stacked on Shannon in #219. Models come from a signed-in account orWALLY_CLOUD_KEY. DeepSec gets a Pimodels.jsonplus--model runanywhere/<id>; VVAH writes a properly indentedconfig.local.yamloverlay and leaves packagedinjectalone.Test plan
cargo test --lib -- harness::deepsec harness::vvah harness::shannon$HOMEor~/Dev):wally deepsec -- init --repo .wally vvah -- scan --repo .Made with Cursor