Title: Tribar Connector for TypeSafe Jev
Author: Juan Lentino
Published: <strong>October 28, 2026</strong>
Last modified: October 28, 2026

---

Search plugins

![](https://ps.w.org/tribar-connector-for-typesafe-jev/assets/icon.svg?rev=3770630)

# Tribar Connector for TypeSafe Jev

 By [Juan Lentino](https://profiles.wordpress.org/juanml/)

[Download](https://downloads.wordpress.org/plugin/tribar-connector-for-typesafe-jev.0.4.6.zip)

 * [Details](https://wordpress.org/plugins/tribar-connector-for-typesafe-jev/#description)
 * [Reviews](https://wordpress.org/plugins/tribar-connector-for-typesafe-jev/#reviews)
 *  [Installation](https://wordpress.org/plugins/tribar-connector-for-typesafe-jev/#installation)
 * [Development](https://wordpress.org/plugins/tribar-connector-for-typesafe-jev/#developers)

 [Support](https://wordpress.org/support/plugin/tribar-connector-for-typesafe-jev/)

## Description

Most AI plugins hand you a paragraph of prose and leave you to parse it. This one
does the opposite. It connects WordPress to the TypeSafe System One API, whose Jev
model answers **typed** questions and returns values your code can branch on directly:

 * **Noul** — the probability, from 0 to 1, that a statement is true.
 * **Choice** — one option from a set you define, with the full probability distribution
   and a confidence figure.
 * **Score** — a position on an ordered scale you define, with probabilities per
   level and a confidence figure.

Many questions can be sent in a single call and are evaluated in parallel.

#### In five lines

    ```
    use JevConnector\Question;

    $answer = JevConnector\ask(
        array( 'comment' => $comment->comment_content ),
        array( 'hostile' => Question::noul( 'Does this comment attack a person rather than an idea?' ) )
    );

    if ( ! is_wp_error( $answer ) && $answer->noul( 'hostile' ) >= 0.9 ) {
        wp_set_comment_status( $comment, 'hold' );
    }
    ```

A probability you branch on, not prose you parse. For a choice or a score the
 gate
is `is_confident()`; for a noul the probability is itself the confidence, so the
threshold goes straight on the value.

At its core this is a connector, not a feature. The plumbing comes first:

 * Registration with the WordPress Connectors API, so your key is managed by core
   under **Settings  Connectors** and never by a field this plugin invented.
 * A PHP client with retry and backoff on rate-limit and overload responses.
 * Question builders that validate the shape before anything leaves your site.
 * A response reader with one accessor per answer type, plus a confidence gate.
 * Response caching keyed by request content, so re-evaluating identical material
   costs nothing.
 * A REST proxy at `/wp-json/jev/v1/ask` so admin-side JavaScript never sees your
   key.
 * Filters and actions at every point worth intercepting.

This plugin adds no menu and no screens of its own. Like the provider connectors
for Anthropic and Google, it is the card under **Settings  Connectors** plus a PHP
and REST surface for other code to build on. What a site does with Jev’s answers
belongs to the theme or plugin that owns the content.

TypeSafe and Jev are trademarks of their owner. This plugin is an independent client
and is not affiliated with, endorsed by, or sponsored by TypeSafe, and it ships 
no TypeSafe logo.

#### Common uses

Spam is not one of them: leave that to Akismet, which sees signals from millions
of sites. Jev answers questions about meaning that a spam filter does not ask.

 * **Comment moderation**: “Does this comment attack a person rather than an idea?”
   Hold it for a human.
 * **Contact form routing**: “Which team should answer this: billing, technical,
   sales, other?” Send it to that inbox.
 * **Tags and categories**: “Is this post about this term?”, one question per existing
   term in a single call. Suggest the terms; an editor accepts.
 * **Pre-publish checks**: “How well is the central claim supported?” on a scale
   you define. Show it in the publish checklist.
 * **Policy and compliance**: “Does this post make a health claim?” Require review
   before publishing.
 * **Checking AI-written drafts**: “Does the summary state anything the source does
   not?” Flag it before it goes out.
 * **Product listings**: “Is this a prohibited item under our policy?” and “Which
   category fits?” Queue it for review.
 * **Reviews and feedback**: “What is the tone?” and “Does this report a defect?”
   Route defects to support.
 * **Related posts and search**: “How relevant is this post to the one being read?”,
   per candidate. Reorder the list.
 * **Lead qualification**: “How well does this enquiry fit the customer we serve?”
   Answer the best fits first.

Anything that publishes, deletes or emails should wait for a high confidence or 
a human.

#### Example

    ```
    $answer = JevConnector\ask(
        array( 'comment' => $comment_text ),
        array(
            'off_topic' => JevConnector\Question::noul( 'Is this comment unrelated to the post?' ),
            'route'     => JevConnector\Question::choice(
                'Where should this go?',
                array(
                    'approve' => 'Clearly a real, on-topic comment',
                    'hold'    => 'Plausible but needs a human look',
                    'trash'   => 'Abuse or harassment',
                )
            ),
        )
    );

    if ( ! is_wp_error( $answer ) && $answer->is_confident( 'route', 0.9 ) ) {
        do_something( $answer->choice( 'route' ) );
    }
    ```

### External services

This plugin connects to the TypeSafe System One API, a third-party service operated
by TypeSafe, to evaluate the content you pass to it. You supply your own API key.

**What is sent:** the state you supply to `JevConnector\ask()` or to the REST route(
which may include post content, comment text, or any other data your code passes),
the questions you define, and your model identifier. Your API key is sent as a bearer
token, and the request’s User-Agent header identifies this plugin, its version, 
and your site’s home URL.

**When it is sent:** only when your own code calls `JevConnector\ask()` or `JevConnector\
models()`, or a permitted user calls one of the REST routes. `models()` asks only
for the list of model names your account can use, sends no content, and is cached
for a day. This plugin itself never initiates a request. Nothing is sent until an
administrator has connected TypeSafe under **Settings  Connectors**, and no request
is made on activation, on page load, or on any schedule. Identical repeat requests
are served from a local cache rather than re-sent.

**Where it goes:** `https://api.typesafe.ai/v1/systemone` for questions and `https://
api.typesafe.ai/v1/models` for the model list.

Service terms and policies: https://docs.typesafe.ai/legal
 Documentation: https://
docs.typesafe.ai

## Screenshots

[⌊The TypeSafe Jev card on Settings → Connectors, connected. The key is stored and
masked by WordPress core; this plugin renders no key field of its own.⌉⌊The TypeSafe
Jev card on Settings → Connectors, connected. The key is stored and masked by WordPress
core; this plugin renders no key field of its own.⌉[

The TypeSafe Jev card on Settings  Connectors, connected. The key is stored and 
masked by WordPress core; this plugin renders no key field of its own.

[⌊One call returning a probability, a named choice and a score, each with its confidence
figure.⌉⌊One call returning a probability, a named choice and a score, each with
its confidence figure.⌉[

One call returning a probability, a named choice and a score, each with its confidence
figure.

## Installation

 1. Upload the plugin to `/wp-content/plugins/` and activate it.
 2. Go to **Settings  Connectors** and add your TypeSafe API key to the TypeSafe Jev
    card. Keys are available from the TypeSafe console.

That is the whole setup. The default model (`jev-latest`) and the capability the
REST route requires (`edit_posts`) are changed in code, with the `jevc_default_model`
and `jevc_rest_capability` filters, the same way the core AI provider connectors
leave choices to the code that uses them.

To keep the key out of the database, set it in the environment or in `wp-config.
php` instead. WordPress checks both before the stored value:

    ```
    define( 'TYPESAFE_API_KEY', 'your-key' );
    ```

## FAQ

### Do I need a TypeSafe account?

Yes. The plugin is a bring-your-own-key client for a third-party API. Create a key
at https://console.typesafe.ai/keys.

### Why does this require WordPress 7.0?

Because key management is handled entirely by the Connectors API introduced in 7.0.
Rather than ship a second, weaker credential field for older versions, the plugin
targets the platform that does it properly.

### Is this an AI provider for the core AI Client?

Not yet. Jev is not an LLM: it returns a probability, a choice, or a score with 
a confidence figure, and the core AI Client has no capability for that kind of model
yet. WordPress checks every AI provider key against a matching provider in the AI
Client when it is saved and clears it if there is none, so the plugin registers 
under its own connector type until the AI Client supports decision models. WordPress
stores and masks the key either way.

### Which Jev model does it use?

jev-latest, TypeSafe’s alias for its newest stable release, so new Jev releases 
arrive without a plugin update. To stay on one version, return a versioned id such
as `jev-1.13.0` from the `jevc_default_model` filter. `JevConnector\models()` lists
the names your account can send.

### How can I contribute?

Development happens on GitHub: https://github.com/juanlentino/tribar-connector-for-
typesafe-jev. Issues marked “good first issue” are a good start, and questions go
to Discussions there.

### Does anything get sent without my say-so?

No. Until a key is present, every call returns a `jevc_not_configured` error and
no HTTP request is made.

### Can I use this from the block editor?

Yes. Call `POST /wp-json/jev/v1/ask` with a `state` and a `questions` object. The
route requires a logged-in user with `edit_posts` by default; change the capability
with the `jevc_rest_capability` filter.

### What happens when TypeSafe is rate-limiting or overloaded?

429, 529 and 5xx responses are retried up to three times with exponential backoff,
honoring `Retry-After` when present. Everything else fails fast and returns a `WP_Error`.

### Which hooks are available?

Filters: `jevc_default_model`, `jevc_http_timeout`, `jevc_request_payload`, `jevc_request_args`,`
jevc_retry_delay`, `jevc_rest_capability`, `jevc_cache_ttl`, `jevc_connector_type`,`
jevc_connector_args`. Actions: `jevc_after_response`, `jevc_request_failed`.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Tribar Connector for TypeSafe Jev” is open source software. The following people
have contributed to this plugin.

Contributors

 *   [ Juan Lentino ](https://profiles.wordpress.org/juanml/)

[Translate “Tribar Connector for TypeSafe Jev” into your language.](https://translate.wordpress.org/projects/wp-plugins/tribar-connector-for-typesafe-jev)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/tribar-connector-for-typesafe-jev/),
check out the [SVN repository](https://plugins.svn.wordpress.org/tribar-connector-for-typesafe-jev/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/tribar-connector-for-typesafe-jev/)
by [RSS](https://plugins.trac.wordpress.org/log/tribar-connector-for-typesafe-jev/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 0.4.6

 * Renamed to Tribar Connector for TypeSafe Jev, with the slug tribar-connector-
   for-typesafe-jev, at the directory review’s request. Function names, hooks, setting
   names and the REST namespace are unchanged.
 * New: pass `'long_context' => true` to `JevConnector\ask()` to send one request
   with TypeSafe’s long-context header.

#### 0.4.5

 * The opening example holds a hostile comment for review instead of checking for
   spam, which is Akismet’s job.
 * New “Common uses” section: ten everyday ways to use typed answers on a WordPress
   site.

#### 0.4.4

 * Hardening: the REST route validates its input instead of cleaning it. A malformed
   model id or a question without text instructions is refused with a clear error.

#### 0.4.3

 * The Connectors card shows the plugin’s own icon instead of the generic placeholder.

#### 0.4.2

 * The TypeSafe logo is removed from the Connectors card. The card shows WordPress’s
   generic placeholder, because every image a directory plugin ships must be GPL-
   compatible.

#### 0.4.1

 * The description now states that the plugin is independent and not affiliated 
   with TypeSafe.
 * The plugin’s home moved to github.com/juanlentino/connector-for-typesafe-jev,
   named after the plugin.

#### 0.4.0

 * New: `JevConnector\models()` and `GET /wp-json/jev/v1/models` list the Jev models
   and aliases your account can send, cached for a day, the way the core AI provider
   connectors list theirs.
 * The External services section now covers the model list request.

#### 0.3.1

 * Documentation only, no behaviour change. Corrected the FAQ on why the plugin 
   is not an AI provider yet: WordPress clears an AI provider key on save when no
   matching AI Client provider exists, and there is none for decision models until
   the AI Client supports them.
 * The description now opens with a five-line example and lists two screenshots.

#### 0.3.0

 * The plugin is now a pure connector, like the Anthropic and Google provider connectors:
   the card under Settings  Connectors, the PHP client, and the REST proxy. The 
   Settings  TypeSafe Jev screen and the two optional modules (comment guardrail,
   term suggestions) are removed. Model and REST capability are set with the existing
   filters.

#### 0.2.5

 * The not-connected notice links only the word “Connectors”, so shells that open
   it in its own window title that window sensibly.

#### 0.2.4

 * Fixed the “Get your API key” link on the Connectors card; it now opens the console’s
   keys page.

#### 0.2.3

 * Fixed the link to Settings  Connectors on the plugin’s settings screen and in
   the not-connected notice. It pointed at a page core refuses; it now opens the
   Connectors screen.

#### 0.2.2

 * The connector card under Settings  Connectors now shows the TypeSafe mark instead
   of the generic placeholder.

#### 0.2.1

 * Directory readiness: escaped caller-supplied ids in validation messages, removed
   the unused Domain Path header, and marked the plugin tested up to WordPress 7.1.
 * The External services disclosure now mentions the site URL sent in the User-Agent
   header.

#### 0.2.0

 * Added an optional comment guardrail module: two-question agreement, hold as the
   fallback, decisions logged to comment meta.
 * Added an optional term suggestions module: one question per existing term in 
   a single call, suggest-only.
 * Both modules are off by default and can be switched on under Settings  TypeSafe
   Jev.

#### 0.1.0

 * First release: Connectors API registration, client, question builders, response
   reader, response cache, and REST proxy.

## Meta

 *  Version **0.4.6**
 *  Last updated **1 day ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 7.0 or higher **
 *  Tested up to **7.1.4**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [AI](https://wordpress.org/plugins/tags/ai/)[api](https://wordpress.org/plugins/tags/api/)
   [automation](https://wordpress.org/plugins/tags/automation/)[connector](https://wordpress.org/plugins/tags/connector/)
 *  [Advanced View](https://wordpress.org/plugins/tribar-connector-for-typesafe-jev/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/tribar-connector-for-typesafe-jev/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/tribar-connector-for-typesafe-jev/reviews/)

## Contributors

 *   [ Juan Lentino ](https://profiles.wordpress.org/juanml/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/tribar-connector-for-typesafe-jev/)