* Add language settings for AI-generated resume output * Resolve merge conflicts for language settings PR * Fix language settings review feedback and CI lint * Tighten language setting precedence and onboarding validation --------- Co-authored-by: saad <Saad>
100 lines
2.9 KiB
Markdown
100 lines
2.9 KiB
Markdown
---
|
|
id: ghostwriter
|
|
title: Ghostwriter
|
|
description: Context-aware per-job AI chat assistant behavior and API surface.
|
|
sidebar_position: 2
|
|
---
|
|
|
|
## What it is
|
|
|
|
Ghostwriter is the per-job AI chat assistant in JobOps.
|
|
|
|
Ghostwriter uses:
|
|
|
|
- current job description and metadata
|
|
- reduced profile snapshot
|
|
- global writing style settings
|
|
|
|
The UI behavior is one persistent conversation per job, shown in the right-side drawer from job details.
|
|
|
|
## Why it exists
|
|
|
|
Ghostwriter helps you produce job-specific writing quickly while preserving consistency with your profile and style settings.
|
|
|
|
Typical use cases:
|
|
|
|
- role-specific answer drafting
|
|
- cover letter and outreach drafts
|
|
- interview prep tied to the job description
|
|
- rephrasing with tone constraints
|
|
- multilingual drafting when you want replies in a specific language
|
|
|
|
## How to use it
|
|
|
|
1. Open a job in `discovered` or `ready`.
|
|
2. Open the Ghostwriter drawer.
|
|
3. Enter your prompt and stream a response.
|
|
4. Stop or regenerate responses when needed.
|
|
|
|
### Writing style settings impact
|
|
|
|
Global settings affecting generations:
|
|
|
|
- `Tone`
|
|
- `Formality`
|
|
- `Constraints`
|
|
- `Do-not-use terms`
|
|
|
|
Ghostwriter follows the output language you request in your prompt. For example, `Ecris en français` should produce a French reply.
|
|
|
|
If you want a persistent default language, set it in **Settings → Writing Style & Language**.
|
|
|
|
`Do-not-use terms` are passed as guidance in the prompt. They are not enforced by a hard post-generation filter, so the model should avoid them but may still use them occasionally.
|
|
|
|
Defaults:
|
|
|
|
- Tone: `professional`
|
|
- Formality: `medium`
|
|
- Constraints: empty
|
|
- Do-not-use terms: empty
|
|
|
|
### Context and safety model
|
|
|
|
- Job snapshot is truncated to fit prompt budget.
|
|
- Profile snapshot includes relevant slices only.
|
|
- System prompt enforces read-only assistant behavior.
|
|
- Logging stores metadata, not full prompt/response dumps.
|
|
|
|
### API surface
|
|
|
|
- `GET /api/jobs/:id/chat/messages`
|
|
- `POST /api/jobs/:id/chat/messages` (streaming)
|
|
- `POST /api/jobs/:id/chat/runs/:runId/cancel`
|
|
- `POST /api/jobs/:id/chat/messages/:assistantMessageId/regenerate` (streaming)
|
|
|
|
Compatibility thread endpoints remain, but UI behavior is one thread per job.
|
|
|
|
## Common problems
|
|
|
|
### Responses feel too generic
|
|
|
|
- Verify the job description is complete and current.
|
|
- Confirm style constraints in Settings are specific enough.
|
|
|
|
### Generation quality is lower than expected
|
|
|
|
- Check model/provider configuration in Settings.
|
|
- Tighten prompts with explicit output intent (for example, "3 bullet points for recruiter outreach").
|
|
- If you need a non-English response every time, set it in **Settings → Writing Style & Language**.
|
|
|
|
### Missing context in answers
|
|
|
|
- Update profile data and relevant project details used by Ghostwriter context.
|
|
- Regenerate after updating job notes/description.
|
|
|
|
## Related pages
|
|
|
|
- [Settings](/docs/next/features/settings)
|
|
- [Reactive Resume](/docs/next/features/reactive-resume)
|
|
- [Orchestrator](/docs/next/features/orchestrator)
|