Skip to content

feat(ashby): add ashby integration for candidate, job, and application management#3362

Merged
waleedlatif1 merged 2 commits intostagingfrom
waleedlatif1/add-ashby-integration
Feb 27, 2026
Merged

feat(ashby): add ashby integration for candidate, job, and application management#3362
waleedlatif1 merged 2 commits intostagingfrom
waleedlatif1/add-ashby-integration

Conversation

@waleedlatif1
Copy link
Collaborator

Summary

  • Add Ashby ATS integration with 13 tools: list/get/create/update candidates, search candidates, list/get jobs, create/list notes, list/get/create applications, list offers
  • All endpoints validated against Ashby API docs
  • Block with operation dropdown, conditional fields, wandConfig on timestamps, advanced mode on optional fields
  • Auto-generated docs with manual description section

Type of Change

  • New feature

Testing

Tested manually

Checklist

  • Code follows project style guidelines
  • Self-reviewed my changes
  • Tests added/updated and passing
  • No new warnings introduced
  • I confirm that I have read and agree to the terms outlined in the Contributor License Agreement (CLA)

@vercel
Copy link

vercel bot commented Feb 27, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
docs Ready Ready Preview, Comment Feb 27, 2026 2:55am

Request Review

@greptile-apps
Copy link
Contributor

greptile-apps bot commented Feb 27, 2026

Greptile Summary

Added comprehensive Ashby ATS integration with 13 tools covering the full candidate lifecycle: list/get/create/update/search candidates, list/get jobs, create/list notes, list/get/create applications, and list offers. All tools use Basic Auth with API key correctly set to user-only visibility. Block configuration includes operation dropdown with conditional fields, advanced mode for optional parameters, and wandConfig for timestamp fields. Documentation includes manually-written intro and auto-generated tool reference. All registrations follow alphabetical ordering conventions.

Confidence Score: 5/5

  • This PR is safe to merge with minimal risk
  • All tools follow established patterns, API keys use correct visibility, registries are alphabetized, block config properly uses conditional fields and advanced mode, and documentation is comprehensive
  • No files require special attention

Important Files Changed

Filename Overview
apps/sim/tools/ashby/types.ts Defines TypeScript interfaces for all Ashby tool params and responses
apps/sim/blocks/blocks/ashby.ts Block config with 13 operations, conditional fields, advanced mode fields, and wandConfig for timestamps
apps/sim/blocks/registry.ts Added AshbyBlock to registry in alphabetical order
apps/sim/tools/registry.ts Registered all 13 Ashby tools in alphabetical order
apps/docs/content/docs/en/tools/ashby.mdx Comprehensive documentation with manual intro section and auto-generated tool reference
apps/sim/tools/ashby/create_candidate.ts Creates candidates with Basic Auth, handles contact info properly, uses user-only visibility for API key
apps/sim/tools/ashby/create_application.ts Creates applications with optional interview plan, stage, source, and custom createdAt timestamp
apps/sim/tools/ashby/list_applications.ts Lists applications with filters for status, job, candidate, and creation date

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Ashby Block] --> B{Operation}
    B -->|Candidate Ops| C[Candidate Tools]
    B -->|Job Ops| D[Job Tools]
    B -->|Application Ops| E[Application Tools]
    B -->|Note Ops| F[Note Tools]
    B -->|Offer Ops| G[Offer Tools]
    
    C --> C1[list_candidates]
    C --> C2[get_candidate]
    C --> C3[create_candidate]
    C --> C4[update_candidate]
    C --> C5[search_candidates]
    
    D --> D1[list_jobs]
    D --> D2[get_job]
    
    E --> E1[list_applications]
    E --> E2[get_application]
    E --> E3[create_application]
    
    F --> F1[create_note]
    F --> F2[list_notes]
    
    G --> G1[list_offers]
    
    C1 & C2 & C3 & C4 & C5 & D1 & D2 & E1 & E2 & E3 & F1 & F2 & G1 --> H[Ashby API]
Loading

Last reviewed commit: 5eaa2b8

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

23 files reviewed, no comments

Edit Code Review Agent Settings | Greptile

@waleedlatif1
Copy link
Collaborator Author

@greptile

@waleedlatif1
Copy link
Collaborator Author

@cursor review

@waleedlatif1 waleedlatif1 merged commit bf0e25c into staging Feb 27, 2026
12 checks passed
@waleedlatif1 waleedlatif1 deleted the waleedlatif1/add-ashby-integration branch February 27, 2026 03:10
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

// Update Candidate params
if (params.updateName) result.name = params.updateName
return result
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unscoped param mappings override correct values across operations

Medium Severity

The config.params function unconditionally maps filterJobIdjobId, filterCandidateIdcandidateId, and updateNamename regardless of the current operation. Since filterJobId, filterCandidateId, and updateName are mode: 'advanced' sub-blocks, the serializer includes them when advanced mode is OFF if they hold non-empty values — bypassing the condition check entirely. After the executor merges { ...inputs, ...transformedParams }, the stale mapped value wins over the correct pass-through value. For instance, a stale filterJobId overrides the correct jobId for create_application or get_job. Scoping each mapping to its intended operation (e.g., checking params.operation) would prevent the conflict.

Additional Locations (2)

Fix in Cursor Fix in Web

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant