end_session
Close Cursor work sessions by syncing context files, updating Agent OS files, and committing changes to git with session summaries and accomplishments.
Instructions
Close the current Cursor session, sync all context files, update Agent OS files, and commit to git. This is the main tool for ending a work session.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| conversationSummary | Yes | Summary of what was accomplished in this session. If not provided, will attempt to extract from context. | |
| accomplishments | No | List of specific accomplishments (optional, will be extracted if not provided) | |
| decisions | No | List of decisions made during this session (optional) | |
| blockers | No | List of blockers or issues encountered (optional) | |
| nextSteps | No | List of next steps or TODO items (optional) |
Implementation Reference
- src/index.ts:43-77 (registration)Registration of the 'end_session' tool in the ListToolsRequestSchema handler, including name, description, and input schema.{ name: 'end_session', description: 'Close the current Cursor session, sync all context files, update Agent OS files, and commit to git. This is the main tool for ending a work session.', inputSchema: { type: 'object', properties: { conversationSummary: { type: 'string', description: 'Summary of what was accomplished in this session. If not provided, will attempt to extract from context.', }, accomplishments: { type: 'array', items: { type: 'string' }, description: 'List of specific accomplishments (optional, will be extracted if not provided)', }, decisions: { type: 'array', items: { type: 'string' }, description: 'List of decisions made during this session (optional)', }, blockers: { type: 'array', items: { type: 'string' }, description: 'List of blockers or issues encountered (optional)', }, nextSteps: { type: 'array', items: { type: 'string' }, description: 'List of next steps or TODO items (optional)', }, }, required: ['conversationSummary'], }, }, {
- src/index.ts:46-75 (schema)Input schema for the end_session tool defining parameters like conversationSummary (required) and optional arrays.inputSchema: { type: 'object', properties: { conversationSummary: { type: 'string', description: 'Summary of what was accomplished in this session. If not provided, will attempt to extract from context.', }, accomplishments: { type: 'array', items: { type: 'string' }, description: 'List of specific accomplishments (optional, will be extracted if not provided)', }, decisions: { type: 'array', items: { type: 'string' }, description: 'List of decisions made during this session (optional)', }, blockers: { type: 'array', items: { type: 'string' }, description: 'List of blockers or issues encountered (optional)', }, nextSteps: { type: 'array', items: { type: 'string' }, description: 'List of next steps or TODO items (optional)', }, }, required: ['conversationSummary'], },
- src/index.ts:109-129 (handler)MCP CallToolRequestSchema handler implementation for end_session: extracts conversationSummary from args, calls SessionCloser.closeSession, and returns formatted JSON result.case 'end_session': { const conversationSummary = args.conversationSummary as string || 'Session work completed. Review conversation history for details.'; const result = await this.sessionCloser.closeSession(conversationSummary); return { content: [ { type: 'text', text: JSON.stringify({ success: result.success, summary: result.summary, filesUpdated: result.filesUpdated, gitCommit: result.gitCommit, message: 'Session closed successfully! All context files synced and changes committed.', }, null, 2), }, ], }; }
- src/session-closer.ts:16-54 (helper)Core helper function SessionCloser.closeSession implementing the full session closing logic: summary gathering, file updates, context sync, and git commit./** * Main entry point for closing a session */ async closeSession(conversationSummary: string): Promise<{ success: boolean; summary: SessionSummary; filesUpdated: string[]; gitCommit?: string; }> { const timestamp = new Date().toISOString(); const summary = await this.gatherSessionSummary(conversationSummary, timestamp); const filesUpdated: string[] = []; // 1. Update session summary file await this.updateSessionSummary(summary); filesUpdated.push('.agent-os/session-summary.md'); // 2. Update Agent OS files if they exist const agentOSUpdates = await this.updateAgentOSFiles(summary); filesUpdated.push(...agentOSUpdates); // 3. Sync context files const contextFiles = await this.syncContextFiles(summary); filesUpdated.push(...contextFiles); // 4. Git commit let gitCommit: string | undefined; if (await this.isGitRepo()) { gitCommit = await this.commitChanges(summary, filesUpdated); } return { success: true, summary, filesUpdated, gitCommit }; }