block / block/berd

Allow berdctl session create/send to include image and file attachments

Open
#107 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
909
Forks
116
Avg merge
1d 1h
Merged PRs (30d)
156

Description

## Before filing

- [x] I searched open and closed issues for duplicates.
- [x] I am using the latest release, Berd 0.6.2, and this capability does not exist there.
- [x] This is one request, not several bundled together.

## Closest existing issue

none found

## Is this new, or an improvement?

New capability — Berd cannot do this at all today

---

## The problem, in your terms

I want to use a project-level PM agent as the main inbox for a Berd project. The PM should be able to create or contact specialist work sessions, send them the relevant task context, collect their results, and bring work back for human review.

This works for text because `berdctl session create` and `berdctl session send` accept a prompt. It breaks as soon as the task includes screenshots or other images. An image already available to the PM session cannot be sent to a new or existing worker session as a Berd attachment.

That means the worker either loses essential visual context or the workflow falls back to an out-of-band workaround. This is a major gap for agent-to-agent orchestration around UI review, visual bugs, design work, and screenshot-based feedback.

## What you do today

Manually open the destination chat and attach the image again, or extract the image to a local file and send an absolute file path in a text prompt.

The first option requires the human to operate every worker session. The second is not a real Berd attachment: it is machine-specific, not visibly represented as an attachment in the transcript, and may not work with another harness or environment.

## What you would like to see

Allow `berdctl session create` and `berdctl session send` to include one or more image or file attachments.

A possible interface is a repeatable argument such as:

```text
berdctl session create --prompt "Review these screenshots" --attachment ./before.png --attachment ./after.png
berdctl session send --session-id --prompt "Please inspect this state" --attachment ./state.png
```

The destination chat should display the attachments using the same attachment model as the normal composer, and the selected harness should receive them as proper multimodal input. Queued sends should preserve the attachments. Existing file-type and size validation should apply.

The exact CLI shape is not important; the important outcome is that a Berd agent can pass visual context to another Berd session without UI automation or local-path-only workarounds.

## Why this belongs in Berd itself

A skill or agent cannot implement a real session attachment from outside Berd. Berd owns attachment ingestion and storage, message serialization, transcript rendering, session queueing, and the payload sent to each harness.

A skill can extract a file and mention its path, but that does not create a portable, user-visible attachment and cannot provide consistent behavior across harnesses.

## Non-goals

- No automatic forwarding of every attachment.
- No arbitrary remote URL downloading.
- No cross-account or cloud file-sharing system.
- No expansion of a harness local-file permissions.
- No requirement for computer-use or UI automation.
- No request to copy unrelated conversation history into the worker session.

## Alternatives you considered

- **Manual re-attachment in the destination chat:** works, but defeats unattended PM-to-worker orchestration.
- **Send a local absolute path as text:** the worker may read it on the same machine, but it is not a Berd attachment and is fragile across harnesses and environments.
- **Fork the source session:** carries too much unrelated history and does not help when the destination is an existing specialist session.

## Mockups, prior art, or other context

Observed on Berd 0.6.2 on macOS 26.5.1, Apple Silicon, with Codex ACP. The installed `berdctl session create --help` and `berdctl session send --help` expose only text prompts and session metadata; neither exposes an attachment input.

No logs or private session content are attached.

Contributor guide

Open the contributing guide

Research direction

Start with `berdctl session create --help` and `berdctl session send --help`, then trace how the normal composer represents and submits attachments. Confirm that the chosen CLI shape supports multiple attachments, validation, queued sends, transcript display, and delivery to the selected harness.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
cli, desktop
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.