end_session
Close Cursor work sessions by syncing context files, updating Agent OS, and committing changes to git with session summaries.
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/session-closer.ts:19-54 (handler)Core handler implementation for the end_session tool. This method orchestrates the entire session closing process: gathering summary, updating session summary, Agent OS files, syncing context files, and committing to git.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 }; }
- src/index.ts:109-129 (handler)MCP CallToolRequestSchema handler switch case for 'end_session'. Extracts input parameters and delegates to SessionCloser.closeSession, formats the response.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/index.ts:46-75 (schema)JSON Schema definition for end_session tool input parameters, defining conversationSummary as required and others as 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:43-77 (registration)Registration of the end_session tool in the ListToolsRequestSchema handler response, including name, description, and full 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'], }, }, {