* feat(auto_resource): unify text and image agent workflows * test(auto_resource): streamline coverage and clarify image prompts * refactor(auto_resource): simplify shared agent interpretation * test(codex): isolate stdio startup budgets and teardown * refactor(auto-resource): align image options and wrapper backend checks * fix(auto-resource): finalize image notes after agent errors * fix(auto-resource): complete image agent review fixes * refactor(auto-resource): simplify shared reply failure finalization * refactor(auto-resource): compose shared resource instructions * fix(auto-resource): preserve prompt configuration compatibility * refactor(auto-resource): remove legacy image prompt aliases
9.4 KiB
Auto Resource Beta
Auto Resource is ReMe's entry point for interpreting resources and is currently in Beta. Resource files first enter
resource/, preferably under a date directory, and are then interpreted into daily resource cards. Each card's filename
comes from the LLM-generated frontmatter name, and source_resource links the card back to its original file.
For the general file semantics of workspace layers, resource/, and daily/, see
Memory as File. For the flow that writes conversations to daily, see
Auto Memory.
resource/[YYYY-MM-DD/]<resource_file>
├─ step 1: daily/YYYY-MM-DD/<generated_name>.md # interpreted resource card
├─ step 2: source_resource points to the original resource
└─ step 3: daily/YYYY-MM-DD.md # daily index linking the cards
What It Records
Auto Resource does more than copy file content. It extracts information that will make the resource easier to retrieve and understand later:
- Core content: what the resource is mainly about.
- Structure: its sections, tables, fields, and data organization.
- Key details: important numbers, names, dates, and conclusions.
- Context and purpose: why the resource exists and how it relates to current work.
- Actionable items: tasks, deadlines, and follow-up work.
In short, it turns "a file was archived" into "the resource is usable."
Original Resource Entry Point
Auto Resource uses resource/ as the entry point for source material. Date directories are recommended, and their date
determines which daily memory layer receives the interpreted card. A file directly under resource/ is also supported
and uses today in the application timezone when it is first processed. On later days, an exact source_resource match
keeps updates and deletion tied to that original daily card instead of creating a new card or leaving an orphan.
Example directory:
workspace/
resource/
quick-note.txt # enters today's daily layer
2026-06-20/
market-report.md
meeting-notes.csv
Text resources such as md, txt, json, jsonl, csv, yaml, and html are the primary fit. Image resources
(png, jpg, jpeg, webp, gif, bmp, tiff, heic) produce caption cards as described in
Image Resources.
Internally, one AutoResourceStep receives each change batch and sends every item to the first configured processor
whose class-level matcher accepts it. AutoImageResourceStep handles image suffixes and AutoTextResourceStep is the
final fallback. A new modality can therefore add a registered processor, its prompt, and one dispatch_steps entry
without changing the router.
Image Resources
Text and image resources share the same agent-wrapper and note-writing tools. Image inputs add a native AgentScope
image block alongside the interpretation instructions; the agent writes a caption card linked to the original image.
The card body starts with an ![[resource/...]] embed link and the frontmatter carries kind: image and media_type,
so text search reaches image content through the caption.
Image processing is enabled by default (include_images=true) and requires an AgentScope wrapper bound to a compatible
model and formatter. Configure the model through components.agent_wrapper.<name>.as_llm, selecting the wrapper with
agent_wrapper on the resource Step. The former image-Step as_llm override and automatic as_llm.vision selection
are replaced by that binding. There is no separate caption model, schema-extraction call, or text-only retry after an
agent failure. An agent workflow can make multiple model requests while using its tools.
Each image interpretation starts a new session. Use the returned agent_session_id to find its processing record;
reprocessing the same image still updates the original card. The body should contain the image embed followed by a
description or transcription under ## Caption, not an empty caption or a JSON response. Leave status to later
processing steps and keep its existing value when updating the card.
Customize image instructions with prompt_dict.resource_instructions (resource_instructions_zh for Chinese).
Rename existing user_message / user_message_zh settings accordingly.
Shared create/update templates insert these instructions at {resource_instructions}; older templates
without the placeholder receive them at the end.
Set include_images=false on an auto_resource call or as a Job default to skip all image events, including
deletions. Call-time values override Job defaults; when neither is set, image processing is enabled. For the watcher, use
jobs.resource_watch_loop.include_images=false; for manual calls, use jobs.auto_resource.include_images=false.
The image processor reports each skip in the existing result and warning log; text processing is unchanged. Existing
image cards are left untouched, even if their source image is deleted. Re-enabling images does not replay skipped
events; explicitly submit the affected paths to auto_resource when compensation is needed. The wrapper's configured
image-count limit is respected and must allow at least one image per resource call; it is not increased automatically.
Configure the wrapper when starting the persistent service. For example, to allow one image per agent context:
reme start components.agent_wrapper.default.context_config.max_image_num=1
The watcher processes resource changes automatically. To explicitly reprocess an existing resource/photo.png, run
the client in another terminal using the same workspace:
reme auto_resource include_images=true changes='[{"path":"resource/photo.png","change":"modified"}]'
Images wider or taller than 2048px are downscaled,
and provider-unfriendly formats are re-encoded, in memory for the request only; the original file under
resource/ is never modified. Before a full decode, image dimensions are checked against a default limit of 40,000,000
pixels; images over the limit and Pillow decompression-bomb warnings fail only that resource. EXIF orientation is
applied to the in-memory request copy before resizing or conversion. Oversized JPEGs first use decoder-level
downsampling, followed by a final thumbnail pass when needed. The VLM request MIME and the card's frontmatter
media_type use the format Pillow detects from the image bytes, rather than trusting the filename extension. When an
image changes, its card is updated in place; when the image is deleted, the card is removed with it, provided image
processing is enabled.
Image preprocessing uses Pillow from the core extra. HEIC resources additionally require the optional
image-heif extra: pip install "reme-ai[image-heif]". Other supported image formats do not load or require the HEIF
plugin.
Resource Cards
Each resource file produces one daily resource card. The system initially uses the resource file's stem as a temporary
path. After the matching processor writes the card, the file is renamed according to its frontmatter name:
resource/2026-06-20/market-report.md
↓
daily/2026-06-20/market-report-highlights.md
The resource card links to the original file through frontmatter:
source_resource: "[[resource/2026-06-20/market-report.md]]"
When a resource changes, Auto Resource finds and updates the corresponding card through an exact source_resource
match. When an enabled resource is deleted, only the explicitly linked daily note is removed. A same-stem note without that
provenance marker is treated as user-owned and left untouched; new resource cards use a collision-free path instead.
A failed call may still have changed a card; modified records whether the file changed. If the agent writes the card
and then fails or is cancelled, the written content stays on disk. ReMe tries to complete metadata and update the day's
index for the card linked through source_resource, while preserving the original error or cancellation. A failed
image-note format check also leaves the written content in place. Failed calls are not retried automatically.
Daily Index
Resource cards enter the same daily memory layer as Auto Memory cards. The day's YYYY-MM-DD.md page acts as an index
and organizes those resource cards:
daily/
2026-06-20.md
2026-06-20/
market-report-highlights.md
meeting-notes-summary.md
To review which resources were processed on a day, start with YYYY-MM-DD.md. To inspect what was distilled from one
resource, open its corresponding resource card.
Preserving the Original Resource
The interpreted daily note is optimized for readability; the original resource is retained for trust and verification.
Auto Resource does not move the original file. It remains at its original path under resource/. Resources can
therefore enter the daily memory flow while their source files stay in their original location.
What Happens Next
Auto Resource only creates resource interpretations in the daily layer. To distill long-term knowledge from resources
into digest/, use Auto Dream. The default live index covers daily cards and digest nodes. Manual
reindex only rebuilds search indexes from chunks already accepted by an ingestion path; it does not add the original
resource files to search. See Memory Search.