Skip to content

Add wally deepsec and wally vvah hosted launchers - #223

Merged
sanchitmonga22 merged 1 commit into
feat/wally-shannonfrom
harnesses/security-audit-harnesses
Oct 26, 2026
Merged

sanchitmonga22 merged 1 commit into
feat/wally-shannonfrom
harnesses/security-audit-harnesses

Conversation

@Siddhesh2377

Copy link
Copy Markdown
Collaborator

Summary

Adds wally deepsec and wally vvah as hosted-only launchers, stacked on Shannon in #219. Models come from a signed-in account or WALLY_CLOUD_KEY. DeepSec gets a Pi models.json plus --model runanywhere/<id>; VVAH writes a properly indented config.local.yaml overlay and leaves packaged inject alone.

Test plan

  • cargo test --lib -- harness::deepsec harness::vvah harness::shannon
  • From a git repo you own (not $HOME or ~/Dev): wally deepsec -- init --repo .
  • Same repo: wally vvah -- scan --repo .

Made with Cursor

Co-authored-by: Cursor <cursoragent@cursor.com>
@Siddhesh2377
Siddhesh2377 requested a review from a team as a code owner October 26, 2026 15:47
@coderabbitai

coderabbitai Bot commented Oct 26, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 22d303fc-7245-45bb-b2e9-a18560f314fb

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Comment thread src/harness/vvah.rs
}
};
let cwd = std::env::current_dir().unwrap_or_default();
let home = std::env::var_os("HOME").map(PathBuf::from);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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>

Comment thread src/harness/deepsec.rs
};

let cwd = std::env::current_dir().unwrap_or_default();
let home = std::env::var_os("HOME").map(PathBuf::from);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.)

View Feedback

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>
Suggested change
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)
};

Comment thread src/harness/deepsec.rs

const ROUTE_COMMANDS: [&str; 4] = ["init", "setup", "process", "revalidate"];

const OWNED_FLAGS: [&str; 3] = ["--model-auth", "--ai-base-url", "--ai-api-key-env"];

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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>

Comment thread src/harness/hosted.rs
return Err(1);
}
}
let mut models = catalog_models_with(console, &hosted.console_url, &hosted.key, primary);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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>

Comment thread src/app.rs
"prime-agent",
"command-code",
"shannon",
"deepsec",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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>

Comment thread tests/golden/README.md
`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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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>
Suggested change
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.

Comment thread docs/EDITORS.md
`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

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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>
Suggested change
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

Comment thread docs/EDITORS.md
wally vvah -m glm-5.3-flash -- report
```

Each run rewrites `<profile>/vvah/config.local.yaml` (owner-only, 0600). Every

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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>
Suggested change
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

Comment thread docs/EDITORS.md

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

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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>
Suggested change
`~/.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

Comment on lines +85 to +86
wally deepsec -- init --repo "$REPO_PATH"
wally vvah -- scan --repo "$REPO_PATH"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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>
Suggested change
wally deepsec -- init --repo "$REPO_PATH"
wally vvah -- scan --repo "$REPO_PATH"
wally deepsec -- init --repo ./my-repo
wally vvah -- scan --repo ./my-repo

@sanchitmonga22
sanchitmonga22 merged commit 133773e into feat/wally-shannon Oct 26, 2026
2 checks passed
sanchitmonga22 added a commit that referenced this pull request Oct 26, 2026
…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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants