Repository navigation
feat: add Knolo autonomous agent product foundation - #20
HiveForensicsAI wants to merge 4 commits into
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 133a9259a4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| "path must stay inside the workspace".into(), | ||
| )); | ||
| } | ||
| Ok(self.root.join(relative)) |
There was a problem hiding this comment.
Resolve symlinks before authorizing workspace paths
When a workspace contains a symlink to a location outside the root, this lexical join still permits read_file and write_file to follow it, so an agent with only workspace capabilities can read or modify files outside the directory that docs/cli.md says is enforced. Canonicalize the existing target, or canonicalize and validate the nearest existing parent for writes, and verify that it remains beneath the canonical workspace root.
Useful? React with 👍 / 👎.
| while output.is_err() && retries < self.profile.autonomy.max_retries { | ||
| retries += 1; | ||
| output = self.host.execute(self.profile, &action); |
There was a problem hiding this comment.
Do not retry non-idempotent actions automatically
When WriteFile or ExecuteCommand performs an external effect and then reports an error, this generic retry executes the same effect again; with the default max_retries = 1, a command that creates a resource, commits, or sends data before exiting unsuccessfully can duplicate or corrupt the result. Restrict automatic retries to explicitly idempotent actions or require an idempotency mechanism from the host.
Useful? React with 👍 / 👎.
| if records.len() > scope.max_items as usize { | ||
| let excess = records.len() - scope.max_items as usize; | ||
| records.drain(0..excess); |
There was a problem hiding this comment.
Apply memory item limits per namespace
When a profile has multiple writable memory scopes, this compares the combined profile record count against only the scope used by the latest write and drains the oldest records regardless of namespace. For example, adding an item to a namespace capped at four can silently delete durable records belonging to another namespace, so filtering and eviction must be scoped to reference.namespace.
Useful? React with 👍 / 👎.
| observations, | ||
| }); | ||
| } | ||
| if started.elapsed().as_millis() as u64 > self.profile.autonomy.timeout_ms { |
There was a problem hiding this comment.
Enforce the autonomy timeout during host execution
The timeout is checked only before planning each turn, so a model request near the limit can consume the full budget repeatedly and an ExecuteCommand that hangs can prevent the run from ever returning timed_out. This makes the advertised autonomy bound ineffective for common model-backed or command-executing runs; pass a remaining deadline into host operations and terminate or cancel them when it expires.
Useful? React with 👍 / 👎.
| operating_system=$(uname -s) | ||
| case "$operating_system/$machine" in | ||
| Linux/x86_64) target="x86_64-unknown-linux-gnu" ;; | ||
| Linux/aarch64|Linux/arm64) target="aarch64-unknown-linux-gnu" ;; |
There was a problem hiding this comment.
Publish the Linux ARM64 archive before selecting it
On Linux ARM64, the remote installer always requests knolo-aarch64-unknown-linux-gnu.tar.gz, but the new release workflow builds only Linux x86_64 and the two macOS targets. Consequently the documented curl installation fails on ARM64 machines without Cargo instead of installing a release binary; add that target to .github/workflows/cli-release.yml or stop advertising it here.
Useful? React with 👍 / 👎.
Summary
Validation