@@ -763,10 +763,27 @@ func run(args []string) error {
763763 messages = append ([]llm.Message {{Role : "system" , Content : systemMessage }}, messages ... )
764764 }
765765
766+ // Append user input to buffer
767+ if mm := agent .Memory (); mm != nil {
768+ mm .AppendBuffer ("user" , shorten (f .Task , 100 ))
769+ }
770+
766771 var result string
767772 result , allMessages , runErr = agent .RunWithMessages (ctx , messages )
768773 _ = result
769774
775+ // Append agent response to buffer
776+ if runErr == nil && len (allMessages ) > 0 {
777+ if mm := agent .Memory (); mm != nil {
778+ for i := len (allMessages ) - 1 ; i >= 0 ; i -- {
779+ if allMessages [i ].Role == "assistant" && allMessages [i ].Content != "" {
780+ mm .AppendBuffer ("agent" , shorten (allMessages [i ].Content , 100 ))
781+ break
782+ }
783+ }
784+ }
785+ }
786+
770787 if runErr == nil {
771788 store , err := session .NewStore ()
772789 if err != nil {
@@ -777,6 +794,10 @@ func run(args []string) error {
777794 return fmt .Errorf ("save session: %w" , err )
778795 }
779796 sess .Sandbox = resolved .Sandbox
797+ // Persist buffer to session
798+ if mm := agent .Memory (); mm != nil {
799+ sess .Buffer = mm .GetBuffer ()
800+ }
780801 store .Save (sess )
781802 fmt .Fprintf (os .Stderr , "kode: session %s saved — continue with: kode continue \" ...\" \n " , sess .ID )
782803 }
@@ -800,6 +821,19 @@ func run(args []string) error {
800821 runLearnLoop (allMessages , f .Task , sm )
801822 }
802823
824+ // ── Session end — extract episode if enough turns ──
825+ if mm := agent .Memory (); mm != nil && f .Session != nil && * f .Session {
826+ // We need the session for OnSessionEnd. Re-create it from the stored data.
827+ sess , err := session .NewStore ()
828+ if err == nil {
829+ latest , err := sess .Latest ()
830+ if err == nil {
831+ msgStrs := makeSessionMessageStrings (latest )
832+ mm .OnSessionEnd (latest .ID , latest .Turns , msgStrs )
833+ }
834+ }
835+ }
836+
803837 return nil
804838}
805839
@@ -1337,11 +1371,21 @@ func continueCmd(args []string) error {
13371371 }
13381372 defer agent .Close ()
13391373
1374+ // Restore buffer from session
1375+ if mm := agent .Memory (); mm != nil && len (sess .Buffer ) > 0 {
1376+ mm .RestoreBuffer (sess .Buffer )
1377+ }
1378+
13401379 // Build message history: session messages + new user message
13411380 // The system message is already in the session
13421381 messages := sess .GetMessages ()
13431382 messages = append (messages , llm.Message {Role : "user" , Content : task })
13441383
1384+ // Append user input to buffer
1385+ if mm := agent .Memory (); mm != nil {
1386+ mm .AppendBuffer ("user" , shorten (task , 100 ))
1387+ }
1388+
13451389 ctx , cancel := signal .NotifyContext (context .Background (), os .Interrupt )
13461390 defer cancel ()
13471391
@@ -1352,12 +1396,40 @@ func continueCmd(args []string) error {
13521396 }
13531397 _ = result
13541398
1355- // Save updated session
1356- if err := store .Append (sess .ID , allMessages [len (sess .GetMessages ()):]); err != nil {
1399+ // Append agent response to buffer
1400+ if len (allMessages ) > 0 {
1401+ if mm := agent .Memory (); mm != nil {
1402+ for i := len (allMessages ) - 1 ; i >= 0 ; i -- {
1403+ if allMessages [i ].Role == "assistant" && allMessages [i ].Content != "" {
1404+ mm .AppendBuffer ("agent" , shorten (allMessages [i ].Content , 100 ))
1405+ break
1406+ }
1407+ }
1408+ }
1409+ }
1410+
1411+ // Save updated session — persist messages AND buffer
1412+ newMsgs := allMessages [len (sess .GetMessages ()):]
1413+ if err := store .Append (sess .ID , newMsgs ); err != nil {
13571414 return fmt .Errorf ("save session: %w" , err )
13581415 }
1416+ // Re-load session to persist buffer (Append reads from disk)
1417+ if mm := agent .Memory (); mm != nil {
1418+ updated , err := store .Load (sess .ID )
1419+ if err == nil {
1420+ updated .Buffer = mm .GetBuffer ()
1421+ store .Save (updated )
1422+ }
1423+ }
13591424
13601425 fmt .Fprintf (os .Stderr , "kode: session %s saved (%d turns)\n " , sess .ID , sess .Turns + 1 )
1426+
1427+ // ── Session end — extract episode ──
1428+ if mm := agent .Memory (); mm != nil {
1429+ msgStrs := makeSessionMessageStrings (sess )
1430+ mm .OnSessionEnd (sess .ID , sess .Turns + 1 , msgStrs )
1431+ }
1432+
13611433 return nil
13621434}
13631435
0 commit comments