* initlal commit * Ghostwriter always enabled * rename code * ghostwriter panel * separate component * ui improvements * single thread * copy improvement * dont pop up keyboard shortcuts * markdown renderer * ghostwriter button placement * better UX * ghostwriter copy * meta shortcut * better settings menu * formatting * doocumentation * add tests * race condition * race condition 2 * pass title * more comments * comments * formtting
1.9 KiB
1.9 KiB
Ghostwriter
Ghostwriter is the per-job AI chat assistant in JobOps. It is optional to use and is designed for drafting application content with job-specific context already loaded.
What Ghostwriter is for
Ghostwriter is not a generic chat box. For each job, it uses:
- The current job description and job metadata
- A reduced snapshot of your resume/profile
- Your global Ghostwriter writing style settings
This makes it useful for:
- Drafting role-specific answers
- Cover letter and outreach drafts
- Interview prep talking points tied to the current JD
- Rephrasing content to match your preferred style
Where it appears
- Available from job details in
discoveredandreadyflows - Opens as a right-side drawer
- One persistent conversation per job
Writing style settings impact
Ghostwriter settings are global and affect new generations:
Tone: adds a tone instruction in the Ghostwriter system promptFormality: adds a formality instructionConstraints: appended as explicit writing constraintsDo-not-use terms: appended as language to avoid
Defaults:
- Tone:
professional - Formality:
medium - Constraints: empty
- Do-not-use terms: empty
Context + safety model
Ghostwriter context is assembled server-side with size limits and sanitization:
- Job snapshot is truncated to fit prompt budget
- Profile snapshot includes only relevant slices (summary, skills, projects, experience)
- System prompt enforces read-only assistant behavior
- Logging stores metadata only (not raw full prompt/response dumps)
API surface (current)
Primary per-job endpoints:
GET /api/jobs/:id/chat/messagesPOST /api/jobs/:id/chat/messages(supports streaming)POST /api/jobs/:id/chat/runs/:runId/cancelPOST /api/jobs/:id/chat/messages/:assistantMessageId/regenerate(supports streaming)
Compatibility endpoints for thread resources remain present, but UI behavior is one conversation per job.