Skip to content

feat: make Addie proactively read shared files#753

Merged
bokelley merged 1 commit intomainfrom
bokelley/addie-txt-files
Jan 13, 2026
Merged

feat: make Addie proactively read shared files#753
bokelley merged 1 commit intomainfrom
bokelley/addie-txt-files

Conversation

@bokelley
Copy link
Copy Markdown
Contributor

Summary

  • Instruct Claude to proactively read files when users share them in Slack
  • Update read_slack_file tool description to emphasize immediate file reading
  • Add File Handling guidance section to Addie's system prompt

Problem

When users shared text files (.txt, .md, .json, etc.) in Slack, Addie would only see file metadata and wait for an explicit request like "what's in this file?" before reading it. Users expected Addie to automatically see what they shared.

Solution

Updated both the tool description and system prompt to instruct Claude to:

  1. Proactively call read_slack_file when [Shared files] appears in a message
  2. Not wait for users to explicitly ask to read the file
  3. Inform users if file content is truncated or cannot be fully read

Test plan

  • TypeScript compiles
  • All tests pass
  • Dev server starts and homepage loads

🤖 Generated with Claude Code

Previously when users shared text files in Slack, Addie would only see
file metadata and wait for an explicit request to read the file. This
was frustrating UX - users expected Addie to see what they shared.

Changes:
- Update read_slack_file tool description to instruct Claude to
  proactively read files when shared, without waiting to be asked
- Add File Handling section to Addie's system prompt with explicit
  guidance on proactive file reading
- Include guidance to inform users if file content is truncated

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@bokelley bokelley merged commit 8b7d9a9 into main Jan 13, 2026
6 checks passed
bokelley added a commit that referenced this pull request Apr 22, 2026
Original note flagged the bundled 5.9 defaults as narrower; upstream #753
restores allowlist-based conflict checking and whole-body secret scanning
before this merges, so the narrower-than-local state is transient.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
bokelley added a commit that referenced this pull request Apr 22, 2026
…1 walks structured auth (#2639)

#2771 added server/src/compliance/assertions/context-no-secret-echo.ts
as a stricter override of the SDK default while upstream was a no-op
for structured `auth` options (adcp-client#751). That's fixed in
@adcp/client 5.9.1 (#752 walks structured auth + #753 widens to full-
body scan + suspect-property-name match + bearer-token regex). The
local override's coverage is now a subset of the SDK default.

- Delete server/src/compliance/assertions/ — 5.9.1 auto-registers the
  three cross-step defaults on any @adcp/client/testing import.
- Drop the side-effect imports in services/storyboards.ts and the three
  manual-test runner scripts.
- Drop the /dist/compliance/assertions/ .gitignore entry that only
  existed while tsc output was shadowing the compliance-tarball path.
- Bump @adcp/client to ^5.9.1.
- Refresh universal/idempotency.yaml comment to point at the bundled
  defaults.

Consumers who need stricter per-repo checks can override via the new
registerAssertion(spec, { override: true }) option (adcp-client#752).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
bokelley added a commit that referenced this pull request Apr 22, 2026
…efaults (#2639) (#2769)

* spec(compliance): drop redundant assertion modules, use bundled 5.9 defaults (#2639)

@adcp/client@5.9 bundles and auto-registers the three cross-step assertions
this repo was shipping as local modules:

- idempotency.conflict_no_payload_leak
- context.no_secret_echo
- governance.denial_blocks_mutation

They register on `@adcp/client/testing` import via the upstream
default-invariants side effect, so every runStoryboard / comply() call
resolves them without explicit loading.

Delete the local modules, their test, the side-effect imports that were
loading them, and the .gitignore entry that kept the tsc output out of
the published spec-tarball path. Bump @adcp/client to ^5.9.0. Update the
comment on universal/idempotency.yaml to point at the bundled defaults
instead of the old "import the module first" instruction.

Closes #2665 (in-band default registration was the chosen path over a
sibling @adcp/compliance-assertions package). Completes the end state for
#2639 — spec owns the invariant ids and YAML wiring; SDK owns the
implementations, registry, and auto-registration.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore: point changeset at #753 widening for security-equivalence

Original note flagged the bundled 5.9 defaults as narrower; upstream #753
restores allowlist-based conflict checking and whole-body secret scanning
before this merges, so the narrower-than-local state is transient.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* spec(compliance): drop local context.no_secret_echo override now 5.9.1 walks structured auth (#2639)

#2771 added server/src/compliance/assertions/context-no-secret-echo.ts
as a stricter override of the SDK default while upstream was a no-op
for structured `auth` options (adcp-client#751). That's fixed in
@adcp/client 5.9.1 (#752 walks structured auth + #753 widens to full-
body scan + suspect-property-name match + bearer-token regex). The
local override's coverage is now a subset of the SDK default.

- Delete server/src/compliance/assertions/ — 5.9.1 auto-registers the
  three cross-step defaults on any @adcp/client/testing import.
- Drop the side-effect imports in services/storyboards.ts and the three
  manual-test runner scripts.
- Drop the /dist/compliance/assertions/ .gitignore entry that only
  existed while tsc output was shadowing the compliance-tarball path.
- Bump @adcp/client to ^5.9.1.
- Refresh universal/idempotency.yaml comment to point at the bundled
  defaults.

Consumers who need stricter per-repo checks can override via the new
registerAssertion(spec, { override: true }) option (adcp-client#752).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore: fold in reviewer nits — secret-length floor note + override-escape hint

- Changeset: acknowledge the SDK default's 16-char verbatim-secret floor
  (vs local's 8), called out by security-review as the one residual scope
  shift. Real credentials clear 16; the property-name check is the
  primary gate for short fixture values. Consumers can override per #752.
- universal/idempotency.yaml comment: mention the
  `registerAssertion(spec, { override: true })` escape hatch so downstream
  implementers know where to reach for stricter per-repo checks.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.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.

1 participant