EXXETA / EXXETA/exxperts

False-positive secret detection blocks writing ordinary OAuth source code

Open
#56 0 comments 0 reactions 0 assignees View on GitHub
enhancement
Dominant language
TypeScript
Stars
354
Forks
40
PR merge metrics
No merged PRs in 30d

Description

## Description

When writing a Rust source file that implements Microsoft OAuth/PKCE, exxperts blocked the file operation because the source contained token-related field and variable names.

No API keys, credentials, bearer-token values, or other secrets were included. The file contained only normal Rust source code with identifiers such as:

```rust
struct TokenResponse {
access_token: String,
id_token: Option,
}
```

The write operation returned:

```text
Content policy blocked tool 'write': blocked API key/token-looking argument.
Do not retry with equivalent file/path/token access.
```

This appears to be a false positive caused by identifier names rather than actual credential values.

## Steps to reproduce

1. Open a room with write access to a local Rust project.
2. Ask the agent to create a Rust OAuth client module.
3. Include ordinary deserialization fields such as:

```rust
#[derive(serde::Deserialize)]
struct TokenResponse {
access_token: String,
expires_in: u64,
id_token: Option,
}
```

4. Attempt to write the source file using the workspace file-writing tool.

## Actual result

The complete file write is rejected as a token- or API-key-related operation.

The agent is also instructed not to retry, so it cannot split or otherwise complete the legitimate source-code change.

## Expected result

Source code containing credential-related identifiers should be allowed when it does not contain actual secret values.

Secret detection should distinguish between:

- source-code identifiers such as `access_token`;
- placeholders and type declarations;
- actual credential values with token-like entropy or known secret formats.

## Impact

This prevents exxperts from implementing common authentication functionality, including:

- OAuth 2.0 clients;
- OpenID Connect clients;
- token-response deserialization;
- refresh-token handling;
- authorization-header middleware;
- credential-storage abstractions.

The user must manually create affected files outside exxperts before the agent can continue integration.

## Suggested improvement

Apply secret scanning primarily to values rather than identifier names. For source files, consider allowing common authentication identifiers when they appear in declarations or field access.

For example, this should be accepted:

```rust
struct AuthenticationResult {
access_token: String,
}
```

An actual high-entropy value assigned to that field should remain blocked.

## Environment

- **Product:** exxperts
- **Workspace mode:** Full access
- **Operation:** Creating a new Rust source file
- **File type:** `.rs`
- **Secrets included:** None

Contributor guide

Open the contributing guide

Research direction

Start at the workspace file-writing tool and locate the secret-scanning decision that rejects Rust source containing identifiers such as access_token. Compare the identifier-only examples with high-entropy credential values, then verify that ordinary declarations are allowed while actual secrets remain blocked.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
devtools, security
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.