trackly-cli 0.6.2 → 0.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/agent.js
CHANGED
|
@@ -7,7 +7,7 @@ const path = require('node:path');
|
|
|
7
7
|
const { spawnSync } = require('node:child_process');
|
|
8
8
|
const { apiRequest, downloadFile, getConfigPaths, hasAuth, maintenanceOutput } = require('./client');
|
|
9
9
|
const { version: PACKAGE_VERSION } = require('../package.json');
|
|
10
|
-
const SKILL_VERSION = '2.
|
|
10
|
+
const SKILL_VERSION = '2.2.0';
|
|
11
11
|
const CLI_USER_AGENT = `trackly-cli/${PACKAGE_VERSION}`;
|
|
12
12
|
const MCP_USER_AGENT = `trackly-mcp/${PACKAGE_VERSION}`;
|
|
13
13
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "trackly-cli",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.3",
|
|
4
4
|
"mcpName": "io.github.trackly-app/trackly",
|
|
5
5
|
"description": "AI job search CLI + hosted MCP server with OAuth. 128K+ jobs, 1,900+ companies, 40+ ATS. Works with Claude, ChatGPT, Cursor, Windsurf, Codex via hosted streamable-http or local stdio.",
|
|
6
6
|
"bin": {
|
package/server.json
CHANGED
|
@@ -17,12 +17,12 @@
|
|
|
17
17
|
]
|
|
18
18
|
}
|
|
19
19
|
],
|
|
20
|
-
"version": "0.6.
|
|
20
|
+
"version": "0.6.3",
|
|
21
21
|
"packages": [
|
|
22
22
|
{
|
|
23
23
|
"registryType": "npm",
|
|
24
24
|
"identifier": "trackly-cli",
|
|
25
|
-
"version": "0.6.
|
|
25
|
+
"version": "0.6.3",
|
|
26
26
|
"runtimeHint": "npx",
|
|
27
27
|
"runtimeArguments": [
|
|
28
28
|
{
|
|
@@ -29,13 +29,15 @@ Use Trackly as the source of truth for profile answers, documents, queue decisio
|
|
|
29
29
|
- Require explicit encrypted-storage consent before saving restricted profile values.
|
|
30
30
|
4. Require the one-time profile confirmation, complete education entries, and a default resume before browser work.
|
|
31
31
|
5. Call `trackly_get_apply_queue`. Select deterministically unless the user names a job. Do not replace the queue call with a fresh job search.
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
- If the user requests the next `N` jobs, freeze the deterministic ordered set of exactly `N` job IDs before starting any run. Do not replace, rescore, or expand that approved batch.
|
|
33
|
+
- For each fixed batch member, preserve an explicit job ID -> application run ID -> browser tab mapping. Complete the full start -> resume preparation -> exact-file confirmation -> pre-attach verification -> form completion -> `review_ready` lifecycle for every member. A review-ready run does not block the next member. Never submit any of them.
|
|
34
|
+
6. Call `trackly_start_apply_run` for the selected job or current fixed batch member.
|
|
35
|
+
7. Call `trackly_prepare_resume` with that exact application run ID. If hosted MCP reports it unavailable, tell the user that local Trackly MCP or manual upload is required.
|
|
34
36
|
8. Preserve the user’s filename returned by `trackly_prepare_resume`. Internal cache identifiers belong only in private parent directories and must never appear in the employer-facing upload filename.
|
|
35
37
|
9. Before any upload, let the user inspect the exact prepared file returned by `trackly_prepare_resume`:
|
|
36
38
|
- Prefer an inline visual preview. Otherwise open the exact local file in Quick Look or Preview.app.
|
|
37
39
|
- Show a compact proof block with source (`Trackly default resume`), exact local path, user-facing filename, file size, SHA-256 fingerprint, application run, and expiration.
|
|
38
|
-
- Ask for explicit confirmation to use that resume. Bind confirmation to the exact SHA-256 and current application run; a different hash or run requires new confirmation.
|
|
40
|
+
- Ask for explicit confirmation to use that resume. Bind confirmation to the exact SHA-256 and current application run. For an explicitly approved batch of `N` runs, the user may authorize the same confirmed SHA-256 only for the frozen job/run/tab set; still show and verify each member's exact path, size, hash, run ID, and expiration. Stop if any hash differs, a run is missing, or a run falls outside the frozen batch. Outside that batch, a different hash or run requires new confirmation.
|
|
39
41
|
- Always provide `confirmation.verification.exactLocalPath` so the user can independently verify the file. Never describe the prepared cache path as the original upload source.
|
|
40
42
|
- If an original local source path is known from the current session, identify it separately. Do not store original device paths in Trackly.
|
|
41
43
|
- A generic profile page is not proof of the prepared file. Use an app or web deep link only when the current protocol supplies an authenticated exact-resume viewer tied to the same SHA-256.
|
|
@@ -62,23 +64,26 @@ Follow this order:
|
|
|
62
64
|
2. Inspect the whole form and identify required fields, semantic controls, consent controls, document inputs, and multi-step sections.
|
|
63
65
|
3. Only after the exact-hash visual confirmation and a successful immediate pre-attach `trackly_verify_prepared_resume` check, upload the prepared resume before autofill when parsing may overwrite contact fields. Do not change the file between verification and attachment. Verify that the filename chip exactly matches the prepared resume’s user-facing filename and contains no internal cache identifier. Stop and replace the attachment if it does not.
|
|
64
66
|
4. Fill typed fields from the resolved Trackly profile. Clear parser-filled data when the canonical state is intentionally blank.
|
|
65
|
-
5. Use real UI clicks for React/native selects, radios, and checkboxes. After every selection,
|
|
67
|
+
5. Use real UI clicks for React/native selects, radios, and checkboxes. Resolve boolean values by their exact semantic label (`true` to Yes, `false` to No), never by option order, index, proximity, or a stale prior selection. After every selection, compare the committed value with the canonical Trackly value. If the field is required or had a validation error before selection, verify that the required-field error disappeared. An optional control with no validation error passes when its committed value is correct. Treat any value mismatch or applicable stale error as a failed field and correct it before continuing.
|
|
66
68
|
6. Recheck email and phone through both browser DOM state and macOS accessibility state. Require exact values and reject duplicate/concatenated values.
|
|
67
69
|
7. Complete known optional fields, education, links, relocation, and source answers. Do not silently omit canonical answers.
|
|
70
|
+
- Treat partial dates as unknown at the missing precision. If Trackly has only a year but the ATS requires a month, ask once and sync the complete date before selecting either control. Never accept an ATS-selected current/default month or infer an education month.
|
|
68
71
|
8. Use the canonical `consent.background_check_if_advanced` field only when the form explicitly asks for consent to a background check if the candidate advances. If it is unknown, ask before selecting it and save the answer at the user's chosen scope. Never infer it from privacy, demographic, recruiting-data, general application, criminal-record, or professional-reference consent. Treat the latter two as separate unknown consent questions unless the current profile schema supplies their own canonical fields.
|
|
69
|
-
9.
|
|
72
|
+
9. For a free-text application response, read [references/application-writing.md](references/application-writing.md). Calibrate from the user's Trackly writing fields, use only supported profile and role facts, and run the built-in voice and anti-slop gate before entering the response. Do not require a separate writing or humanizer skill.
|
|
73
|
+
10. Run the full integrity gate, including the final consent checkbox, every visible error, all steps, and any correction banner.
|
|
70
74
|
|
|
71
75
|
When the user corrects an answer, immediately save the appropriate scope with `trackly_update_application_profile` and report only a redacted mechanics observation through `trackly_report_apply_observation`. Never promote one user’s value into a global default.
|
|
72
76
|
|
|
73
77
|
## Review handoff
|
|
74
78
|
|
|
75
|
-
Call `trackly_record_application_outcome` with `review_ready`, then provide the review block defined in [references/review-handoff.md](references/review-handoff.md).
|
|
79
|
+
Call `trackly_record_application_outcome` with `review_ready`, then provide the review block defined in [references/review-handoff.md](references/review-handoff.md). For a single run, keep the browser on the final review state and stop. For a frozen batch, preserve the current review-ready tab and continue the same lifecycle for the next mapped batch member; stop only after every frozen member is review-ready, then provide one review block per run. Never submit any member.
|
|
76
80
|
|
|
77
81
|
After the user submits manually:
|
|
78
82
|
|
|
79
83
|
- If a success page is visible, record `submitted` with a short non-sensitive confirmation signal.
|
|
80
84
|
- If the user explicitly confirms submission, record `submitted` with `user_confirmed`.
|
|
81
85
|
- If neither exists, do not move the job to applied.
|
|
86
|
+
- Treat a contradictory ATS response such as “already applied” as provisional until the exact requisition URL settles. Do not click Submit again. Preserve the page, confirm the job/requisition identifier is unchanged, and re-read the final route state after the UI and network activity settle. A later explicit success state on that same requisition overrides the provisional error and must be recorded as `submitted`; otherwise record the run as blocked without marking the job applied.
|
|
82
87
|
|
|
83
88
|
## Support boundary
|
|
84
89
|
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Application writing integrity
|
|
2
|
+
|
|
3
|
+
Use this reference for free-text questions such as "Why this company?", motivation, or experience summaries.
|
|
4
|
+
|
|
5
|
+
## Calibrate once
|
|
6
|
+
|
|
7
|
+
- Read `writing.voice_sample` and `writing.style_instructions` from the resolved Trackly profile.
|
|
8
|
+
- Offer both optional fields during profile setup, but never block an application run when they are unknown. If a free-text question appears before the user has set them, ask once before drafting and synchronize the answer. Let the user decline a voice sample, choose intentionally blank style instructions, or continue with the plain default style for the current run.
|
|
9
|
+
- Treat the sample and preferences as private user data. Never copy them into the public skill, logs, observations, or another user's defaults.
|
|
10
|
+
- A separate humanizer or writing skill may be used when available, but it is optional. This gate remains authoritative and self-contained.
|
|
11
|
+
|
|
12
|
+
## Draft from evidence
|
|
13
|
+
|
|
14
|
+
1. Answer the exact question using only canonical profile facts, resume evidence, and specific facts visible in the job posting.
|
|
15
|
+
2. Lead with the concrete overlap between the user's experience and the role. Avoid generic company praise or unsupported enthusiasm.
|
|
16
|
+
3. Prefer one or two specific proofs over a broad inventory of strengths. Never invent an achievement, employer, skill, or motivation.
|
|
17
|
+
4. Keep the response proportionate to the form. Short questions should receive short answers.
|
|
18
|
+
|
|
19
|
+
## Match the user's voice
|
|
20
|
+
|
|
21
|
+
- Match the sample's register, sentence length, paragraph breaks, first-person usage, punctuation, and level of informality.
|
|
22
|
+
- Honor explicit style instructions over generic defaults.
|
|
23
|
+
- Preserve readable quirks and personality. Do not polish every sentence into the same formal register.
|
|
24
|
+
- When no sample is available, default to plain first-person language, short paragraphs, and concrete evidence.
|
|
25
|
+
|
|
26
|
+
## Anti-slop gate
|
|
27
|
+
|
|
28
|
+
Before entering the response:
|
|
29
|
+
|
|
30
|
+
1. Remove generic praise, inflated claims, vague transitions, boilerplate conclusions, and chatbot phrases.
|
|
31
|
+
2. Rewrite `not just X, but Y`, ornamental rule-of-three lists, and dangling `-ing` clauses unless the user's sample clearly uses them naturally.
|
|
32
|
+
3. Use no em dash by default. Use one only when the user's sample or saved instructions show that punctuation is part of their voice.
|
|
33
|
+
4. Vary sentence length and structure. Avoid a sequence of equally sized, equally formal sentences.
|
|
34
|
+
5. Prefer active verbs, concrete nouns, real numbers, and named examples already supported by the profile.
|
|
35
|
+
6. Read the answer aloud. If it sounds like a press release, generic cover letter, or assistant response, rewrite it.
|
|
36
|
+
7. When a voice sample exists, compare the final response with it for rhythm and register. When the sample was declined or remains unknown for the current run, use the saved style instructions or plain default instead. In every case, confirm each factual claim again.
|
|
@@ -6,8 +6,10 @@ Run this gate after each semantic selection and again across the entire form bef
|
|
|
6
6
|
|
|
7
7
|
- Open React comboboxes and click the exact list option. Do not inject a value or rely on displayed input text.
|
|
8
8
|
- Click native select options, radio labels, and checkboxes through the UI.
|
|
9
|
-
-
|
|
10
|
-
-
|
|
9
|
+
- Map booleans semantically: canonical `true` must commit the visible Yes-equivalent and canonical `false` the visible No-equivalent. Never choose a boolean option by index, DOM order, keyboard offset, proximity, or previous control state.
|
|
10
|
+
- After selection, verify the selected/checked state from the control, dispatch-completed page state, and visible label. Compare the normalized committed value to the canonical Trackly value; presence alone is insufficient.
|
|
11
|
+
- If the committed value is the semantic opposite of the canonical value, stop the sweep, correct the field through a fresh real UI selection, and report a redacted integrity observation.
|
|
12
|
+
- For a required control or a control that had a validation error before selection, verify that the error is absent afterward. A visible value beside “This field is required” is a failed field. An optional control that never had a validation error passes when its committed value is correct.
|
|
11
13
|
- If a stale error remains, reopen and reselect the control. Use non-submitting validation only when the ATS provides it.
|
|
12
14
|
|
|
13
15
|
## Contact-field integrity
|
|
@@ -27,3 +29,10 @@ Run this gate after each semantic selection and again across the entire form bef
|
|
|
27
29
|
6. Confirm the Submit button is present but do not click it.
|
|
28
30
|
|
|
29
31
|
If any field’s committed state cannot be observed, fail the gate and explain which field needs manual review.
|
|
32
|
+
|
|
33
|
+
## Submission-state reconciliation
|
|
34
|
+
|
|
35
|
+
- Never retry Submit after a contradictory or duplicate-application response.
|
|
36
|
+
- Treat “already applied” and similar banners as provisional until the current ATS route finishes settling.
|
|
37
|
+
- Confirm the employer, role, and exact requisition identifier are unchanged, then re-read the final state from that same URL.
|
|
38
|
+
- An explicit success state on the exact requisition is authoritative and may be recorded as submitted. Without success or explicit user confirmation, record blocked and leave the job out of Applied.
|