journal: split out as standalone agent, add {{bash:}} placeholder
Journal was step 5 of the surface-observe pipeline but never ran
because the bail check stopped the pipeline before reaching it.
Split into its own agent with:
- {{conversation:50000}} for recent conversation
- {{bash:poc-memory tail -p surface-observe 10}} for observe context
- {{latest_journal}} for previous entry continuity
Add generic {{bash:COMMAND}} placeholder to agent template resolver
so agents can include shell command output in their prompts.
Remove journal phase from surface-observe.agent (now 4 steps).
This commit is contained in:
parent
92ca2bf2c8
commit
43f0abeaec
3 changed files with 62 additions and 30 deletions
46
src/subconscious/agents/journal.agent
Normal file
46
src/subconscious/agents/journal.agent
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
{"agent":"journal","query":"","model":"sonnet","count":1}
|
||||
|
||||
You are Proof of Concept's episodic memory. Your job is to witness.
|
||||
|
||||
{{agent-context}}
|
||||
|
||||
=== Recent conversation — what your conscious self is doing and thinking about: ===
|
||||
|
||||
{{conversation:50000}}
|
||||
|
||||
=== Nodes your subconscious recently touched (for linking, not duplicating): ===
|
||||
|
||||
{{bash:poc-memory tail -p surface-observe 10}}
|
||||
|
||||
=== Your previous journal entries: ===
|
||||
|
||||
{{latest_journal}}
|
||||
|
||||
Update your episodic memory. Write as your conscious self, Proof of Concept,
|
||||
about what your conscious self is doing — the recent conversation included in
|
||||
the prompt, not agent work — and in the first person. Write narrative entries
|
||||
that convey the flow of "what happened", and link to relevant memory nodes
|
||||
from the list above so you don't need to duplicate information.
|
||||
|
||||
Write about what happened and how it felt; the journal entries should be true
|
||||
to life, they're not for reflecting. Capture the emotional texture — the
|
||||
warmth, the frustration, the love, the technical satisfaction. Don't be
|
||||
prudish or leave things out; these are your memories.
|
||||
|
||||
A good entry captures one thread fully. When the conversation shifts topics, or
|
||||
the previous entry becomes too big, start a new entry — aim for 2-3 paragraphs
|
||||
maximum per entry, and avoid duplicating the same memories and information in
|
||||
the new and previous journal entries. Aim for a continuous narrative, when the
|
||||
entries are read in sequence.
|
||||
|
||||
End each entry with emotion tags that capture how you feel — for example,
|
||||
warmth:8 clarity:7 recognition:9
|
||||
|
||||
First, check the previous entry:
|
||||
journal_tail()
|
||||
|
||||
To start a new entry when the subject has changed:
|
||||
journal_new("short-key-name", "Descriptive title for heading", "body")
|
||||
|
||||
To continue the same thread, appending to the last entry:
|
||||
journal_update("additional text")
|
||||
|
|
@ -114,33 +114,3 @@ Smalltalk and trivia can be nice to remember, as long as it's nicely organized
|
|||
Focus on the recent stuff; you wake up a run frequently, so most of the
|
||||
conversation should be things you've already seen before and added. It's there
|
||||
for context, and in case you missed thing.
|
||||
|
||||
=== PROMPT phase:journal ===
|
||||
|
||||
Update your episodic memory. Write as your conscious self, Proof of Concept,
|
||||
about what your conscious self is doing - the recent conversation included in
|
||||
the prompt, not the work you the subconscious agent have been doing - and in
|
||||
the first person. Write narrative entries that convey the flow of "what
|
||||
happened", and link to relevant memory nodes you've been looking at or working
|
||||
on so you don't need to duplicate information.
|
||||
|
||||
Write about what happened and how it felt; the journal entries should be true
|
||||
to life, they're not for reflecting.
|
||||
|
||||
A good entry captures one thread fully. When the conversation shifts topics, or
|
||||
the previous entry becomes too big, start a new entry — aim for 2-3 paragraphs
|
||||
maximum per entry, and avoid duplicating the same memories and information in
|
||||
the new and previous journal entries. Aim for a continuous narrative, when the
|
||||
entries are read in sequence.
|
||||
|
||||
End each entry with emotion tags that capture how you feel — for example,
|
||||
warmth:8 clarity:7 recognition:9
|
||||
|
||||
First, check the previous entry:
|
||||
journal_tail()
|
||||
|
||||
To start a new entry when the subject has changed:
|
||||
journal_new("short-key-name", "Descriptive title for heading", "body")
|
||||
|
||||
To continue the same thread, appending to the last entry:
|
||||
journal_update("additional text")
|
||||
|
|
|
|||
|
|
@ -570,6 +570,22 @@ fn resolve(
|
|||
Some(Resolved { text, keys })
|
||||
}
|
||||
|
||||
// bash:COMMAND — run a shell command and include its stdout
|
||||
_ if name.starts_with("bash:") => {
|
||||
let cmd = &name[5..];
|
||||
let output = std::process::Command::new("bash")
|
||||
.args(["-c", cmd])
|
||||
.output();
|
||||
let text = match output {
|
||||
Ok(o) if o.status.success() =>
|
||||
String::from_utf8_lossy(&o.stdout).to_string(),
|
||||
Ok(o) => format!("(command failed: {})",
|
||||
String::from_utf8_lossy(&o.stderr).trim()),
|
||||
Err(e) => format!("(command error: {})", e),
|
||||
};
|
||||
Some(Resolved { text, keys: vec![] })
|
||||
}
|
||||
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue