Skip to content

feat: add Knolo autonomous agent product foundation - #20

Closed
HiveForensicsAI wants to merge 4 commits into
mainfrom
feature/knolo-autonomous-agent
Closed

HiveForensicsAI wants to merge 4 commits into
mainfrom
feature/knolo-autonomous-agent

Conversation

@HiveForensicsAI

Copy link
Copy Markdown
Member

Summary

Validation

  • Rust checks
  • TypeScript checks
  • Contracts/fixtures updated together
  • Pack authority remains minimal
  • No generated output or secrets

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 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".

Comment thread knolo-product/README.md Outdated
"path must stay inside the workspace".into(),
));
}
Ok(self.root.join(relative))

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 Badge 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 👍 / 👎.

Comment on lines +371 to +373
while output.is_err() && retries < self.profile.autonomy.max_retries {
retries += 1;
output = self.host.execute(self.profile, &action);

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 Badge 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 👍 / 👎.

Comment thread crates/knolo-agent/src/bin/knolo.rs Outdated
Comment on lines +122 to +124
if records.len() > scope.max_items as usize {
let excess = records.len() - scope.max_items as usize;
records.drain(0..excess);

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 Badge 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 {

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 Badge 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 👍 / 👎.

Comment thread install.sh
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" ;;

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 Badge 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 👍 / 👎.

@The3seus The3seus closed this Sep 5, 2026
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