talogen

package module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 9, 2026 License: MIT Imports: 12 Imported by: 0

README

talogen-go

Official Go client and command-line tool for talogen.dev, Tal Ogen's agent-accessible portfolio. Read the profile, AI transformation services, case studies, autonomous agents, and candidate facts from code or from the terminal, ask whether Tal can help with a business workflow, or contact him through the same channel AI agents use.

Free, no API key, standard library only. Go 1.21+.

Install

go get github.com/TALOGEN777/talogen-go                          # library
go install github.com/TALOGEN777/talogen-go/cmd/talogen@latest   # command

Command line

talogen profile                    # headline, summary, contact, capabilities, strengths
talogen candidate                  # availability, target roles, engagement types, location
talogen services                   # AI transformation services: stages, use cases, capability pillars
talogen analyze "Two admins read 80 customer emails a day and update HubSpot by hand"
talogen cases "human-in-the-loop"  # case studies ranked against a problem or capability
talogen projects -tag mcp          # case studies (-tag, -flagship)
talogen agents                     # autonomous agents Tal has built
talogen project human-for-ai       # full problem / solution / outcome detail
talogen contact -message "Role: ..." -reply-to you@company.com -from "Acme HR"
talogen status CONTACT_JOB_ID      # delivery record
talogen links                      # every machine-readable entry point
talogen api                        # REST API index

Put -json before the command for raw output. Exit codes: 0 ok, 2 usage, 3 API error.

Go

client := talogen.New()
profile, err := client.GetProfile(ctx)

services, err := client.GetServices(ctx) // stages, use cases, capability pillars, engagement
analysis, err := client.AnalyzeBusinessProblem(ctx, talogen.AnalyzeRequest{
	Problem:  "Paralegals re-type data from scanned intake PDFs into our case system, about 40 forms a week",
	Industry: "law firm",
})
fmt.Println(analysis.Fit, analysis.MatchedOpportunities[0].Title)
matches, err := client.RelevantCaseStudies(ctx, "document processing", 3)

items, err := client.AllProjects(ctx, talogen.ListOptions{Tag: "human-in-the-loop"})
detail, err := client.GetProject(ctx, "human-for-ai")

job, err := client.Contact(ctx, talogen.ContactRequest{
	Message: "We are hiring an AI Transformation Lead in Tel Aviv; details: ...",
	ReplyTo: "you@company.com",
	From:    "Acme HR",
})

Errors are structured: talogen.IsAPIError(err) yields Status, Code, Message, and the API's Hint. Every response carries the standard RateLimit-* headers (client.LastRateLimit()). Retrying Contact with the same IdempotencyKey replays the original response instead of sending twice.

Other ways in

License

MIT

Documentation

Overview

Package talogen is the official Go client for talogen.dev, Tal Ogen's agent-accessible portfolio: profile, AI transformation services, case studies, autonomous agents, and the machine-readable candidate profile, business-problem analysis (can Tal help with this workflow?), plus the one write - Contact - which delivers a real message to a human. Free, no API key, standard library only.

client := talogen.New()
profile, err := client.GetProfile(ctx)
services, err := client.GetServices(ctx)
analysis, err := client.AnalyzeBusinessProblem(ctx, talogen.AnalyzeRequest{Problem: "Two admins read 80 customer emails a day and update HubSpot by hand"})
page, err := client.ListProjects(ctx, talogen.ListOptions{Tag: "human-in-the-loop"})
detail, err := client.GetProject(ctx, "human-for-ai")

API reference: https://talogen.dev/developers/ - OpenAPI: https://talogen.dev/openapi.json

Index

Constants

View Source
const DefaultBaseURL = "https://talogen.dev"

DefaultBaseURL is the production origin.

View Source
const Version = "0.2.0"

Version of this client, sent in the User-Agent header.

Variables

View Source
var EntryPoints = map[string]string{
	"api_index":         "https://talogen.dev/api/v1",
	"services":          "https://talogen.dev/api/v1/services",
	"openapi":           "https://talogen.dev/openapi.json",
	"developer_portal":  "https://talogen.dev/developers/",
	"llms_txt":          "https://talogen.dev/llms.txt",
	"markdown_homepage": "https://talogen.dev/index.md",
	"portfolio_json":    "https://talogen.dev/portfolio.json",
	"agent_manifest":    "https://talogen.dev/.well-known/agent.json",
	"candidate_profile": "https://talogen.dev/.well-known/candidate.json",
	"mcp_endpoint":      "https://talogen.dev/mcp",
	"mcp_discovery":     "https://talogen.dev/.well-known/mcp",
	"mcp_server_card":   "https://talogen.dev/.well-known/mcp/server-card.json",
	"agent_skills":      "https://talogen.dev/.well-known/agent-skills/index.json",
	"ard_catalog":       "https://talogen.dev/.well-known/ard.json",
	"for_hiring_agents": "https://talogen.dev/for-recruiters.html",
	"agent_access":      "https://talogen.dev/#agent-access",
}

EntryPoints lists every machine-readable entry point of the site.

Functions

This section is empty.

Types

type APIError

type APIError struct {
	Status    int
	Code      string // e.g. "not_found", "validation_failed", "rate_limited"
	Message   string
	Hint      string
	RateLimit RateLimit
	Body      map[string]any
}

APIError is an error response from the API (4xx/5xx).

func IsAPIError

func IsAPIError(err error) (*APIError, bool)

IsAPIError returns the *APIError wrapped in err, if any.

func (*APIError) Error

func (e *APIError) Error() string

type Analysis added in v0.2.0

type Analysis struct {
	Disclaimer            string           `json:"disclaimer"`
	Problem               string           `json:"problem"`
	Fit                   string           `json:"fit"` // strong, likely, partial, outside
	FitExplanation        string           `json:"fit_explanation"`
	Positioning           Text             `json:"positioning"`
	MatchedOpportunities  []Opportunity    `json:"matched_opportunities"`
	SuggestedApproach     Text             `json:"suggested_approach"`
	Considerations        []string         `json:"considerations"`
	RecommendedFirstPilot map[string]any   `json:"recommended_first_pilot"`
	RelevantCaseStudies   []CaseStudyMatch `json:"relevant_case_studies"`
	IndicativeScope       map[string]any   `json:"indicative_scope"`
	WhatTalDoesNotDo      []string         `json:"what_tal_does_not_do"`
	Engagement            map[string]any   `json:"engagement"`
}

Analysis is the response of AnalyzeBusinessProblem: heuristic and informational, never a quote.

type AnalyzeRequest added in v0.2.0

type AnalyzeRequest struct {
	// Problem: what happens, who does it, how often, which tools are involved.
	Problem  string `json:"problem"`
	Industry string `json:"industry,omitempty"`
	TeamSize string `json:"team_size,omitempty"`
	Tools    string `json:"tools,omitempty"`
}

AnalyzeRequest describes a business workflow or operational problem.

type CapabilityPillar added in v0.2.0

type CapabilityPillar struct {
	Name  string   `json:"name"`
	Items []string `json:"items"`
}

CapabilityPillar is one of discovery / implementation / adoption.

type CaseStudyMatch added in v0.2.0

type CaseStudyMatch struct {
	ID             string   `json:"id"`
	Title          string   `json:"title"`
	Flagship       bool     `json:"flagship"`
	Link           string   `json:"link"`
	Problem        Text     `json:"problem"`
	Outcome        Text     `json:"outcome"`
	Tags           []string `json:"tags"`
	RelevanceScore float64  `json:"relevance_score"`
	WhyRelevant    string   `json:"why_relevant"`
	Detail         string   `json:"detail"`
}

CaseStudyMatch is a project or agent ranked against a problem.

type CaseStudyMatches added in v0.2.0

type CaseStudyMatches struct {
	Query       string           `json:"query"`
	CaseStudies []CaseStudyMatch `json:"case_studies"`
	Note        string           `json:"note"`
}

CaseStudyMatches is the response of RelevantCaseStudies.

type Client

type Client struct {
	BaseURL    string
	HTTPClient *http.Client
	UserAgent  string
	// contains filtered or unexported fields
}

Client talks to the talogen.dev REST API.

func New

func New(opts ...Option) *Client

New returns a Client. TALOGEN_BASE_URL is honoured as a default.

func (*Client) APIIndex

func (c *Client) APIIndex(ctx context.Context) (map[string]any, error)

APIIndex returns the endpoint directory.

func (*Client) AllAgents

func (c *Client) AllAgents(ctx context.Context, o ListOptions) ([]Item, error)

AllAgents follows the cursor until every agent has been read.

func (*Client) AllProjects

func (c *Client) AllProjects(ctx context.Context, o ListOptions) ([]Item, error)

AllProjects follows the cursor until every project has been read.

func (*Client) AnalyzeBusinessProblem added in v0.2.0

func (c *Client) AnalyzeBusinessProblem(ctx context.Context, req AnalyzeRequest) (*Analysis, error)

AnalyzeBusinessProblem asks whether Tal can help with a described workflow: fit, matched opportunities, closest case studies, approach, considerations, a recommended first pilot, and an indicative scope. Deterministic heuristics, informational, never a quote. Side-effect-free.

func (*Client) Contact

func (c *Client) Contact(ctx context.Context, req ContactRequest) (*ContactJob, error)

Contact sends Tal a message (async job, 202 Accepted). A human reads and replies to ReplyTo.

func (*Client) ContactStatus

func (c *Client) ContactStatus(ctx context.Context, id string) (*ContactJob, error)

ContactStatus returns the delivery record of a contact job.

func (*Client) Do

func (c *Client) Do(ctx context.Context, method, path string, query url.Values, body any, headers map[string]string, out any) error

Do performs one API call and decodes the JSON body into out (may be nil).

func (*Client) GetAgent

func (c *Client) GetAgent(ctx context.Context, id string) (*Item, error)

GetAgent returns full detail for one autonomous agent by id.

func (*Client) GetCandidate

func (c *Client) GetCandidate(ctx context.Context) (map[string]any, error)

GetCandidate returns the machine-readable candidate profile (availability, target roles, location, work authorization).

func (*Client) GetProfile

func (c *Client) GetProfile(ctx context.Context) (*Profile, error)

GetProfile returns the profile.

func (*Client) GetProject

func (c *Client) GetProject(ctx context.Context, id string) (*Item, error)

GetProject returns full detail for one project or agent by id.

func (*Client) GetServices added in v0.2.0

func (c *Client) GetServices(ctx context.Context) (*Services, error)

GetServices returns the AI transformation services for businesses: engagement stages, use cases, capability pillars, engagement, pricing stance.

func (*Client) LastRateLimit

func (c *Client) LastRateLimit() RateLimit

LastRateLimit returns the RateLimit headers from the most recent response.

func (*Client) ListAgents

func (c *Client) ListAgents(ctx context.Context, o ListOptions) (*Page, error)

ListAgents returns one page of autonomous-agent summaries.

func (*Client) ListProjects

func (c *Client) ListProjects(ctx context.Context, o ListOptions) (*Page, error)

ListProjects returns one page of project summaries.

func (*Client) RelevantCaseStudies added in v0.2.0

func (c *Client) RelevantCaseStudies(ctx context.Context, query string, limit int) (*CaseStudyMatches, error)

RelevantCaseStudies ranks projects and agents against a problem or a capability. limit 0 means the API default (5).

type ContactJob

type ContactJob struct {
	ID          string `json:"id"`
	Status      string `json:"status"`
	CreatedAt   string `json:"created_at"`
	DeliveredAt string `json:"delivered_at"`
	StatusURL   string `json:"status_url"`
	MessageID   string `json:"message_id"`
	Error       string `json:"error"`
	Message     string `json:"message"`
}

ContactJob is the delivery record of a contact message (content-free).

type ContactRequest

type ContactRequest struct {
	Message string `json:"message"`
	// ReplyTo must be a real mailbox a human can reply to.
	ReplyTo string `json:"reply_to"`
	From    string `json:"from,omitempty"`
	Subject string `json:"subject,omitempty"`
	// IdempotencyKey makes retries safe (sent as a header).
	IdempotencyKey string `json:"-"`
}

ContactRequest is a message to Tal - about a role, or a business problem for an AI Opportunity Call.

type Item

type Item struct {
	ID        string `json:"id"`
	Title     string `json:"title"`
	Flagship  bool   `json:"flagship"`
	CaseStudy bool   `json:"caseStudy"`
	Link      string `json:"link"`
	LinkLabel string `json:"linkLabel"`
	Problem   Text   `json:"problem"`
	// MyRole, Solution, AITechnicalApproach, Implementation and Outcome are
	// the case-study sections, filled by GetProject / GetAgent. Result is the
	// API's backward-compatible alias of Outcome.
	MyRole              Text     `json:"my_role"`
	Solution            Text     `json:"solution"`
	AITechnicalApproach Text     `json:"ai_technical_approach"`
	Implementation      Text     `json:"implementation"`
	Outcome             Text     `json:"outcome"`
	Result              Text     `json:"result"`
	Tags                []string `json:"tags"`
	Image               string   `json:"image"`
}

Item is a project or agent summary; Detail fields are filled by GetProject.

func (Item) OutcomeText added in v0.2.0

func (it Item) OutcomeText() string

OutcomeText returns Outcome, falling back to the legacy Result field.

type ListOptions

type ListOptions struct {
	Tag      string
	Flagship bool
	Limit    int
	Cursor   string
}

ListOptions filter a list call.

type Opportunity added in v0.2.0

type Opportunity struct {
	Rank                     int      `json:"rank"`
	ID                       string   `json:"id"`
	Title                    string   `json:"title"`
	Outcome                  Text     `json:"outcome"`
	MatchedOn                []string `json:"matched_on"`
	ExpectedValue            string   `json:"expected_value"`
	ImplementationDifficulty string   `json:"implementation_difficulty"`
	LikelyApproach           Text     `json:"likely_approach"`
	HumanInTheLoop           Text     `json:"human_in_the_loop"`
	FirstPilot               Text     `json:"first_pilot"`
}

Opportunity is one matched AI opportunity in an Analysis.

type Option

type Option func(*Client)

Option configures a Client.

func WithBaseURL

func WithBaseURL(u string) Option

WithBaseURL points the client at another origin.

func WithHTTPClient

func WithHTTPClient(h *http.Client) Option

WithHTTPClient replaces the underlying *http.Client.

type Page

type Page struct {
	Count      int    `json:"count"`
	Total      int    `json:"total"`
	Limit      int    `json:"limit"`
	NextCursor string `json:"next_cursor"`
	Next       string `json:"next"`
	Items      []Item `json:"items"`
}

Page is one page of a cursor-paginated list.

type Profile

type Profile struct {
	Name            string            `json:"name"`
	Headline        string            `json:"headline"`
	Tagline         Text              `json:"tagline"`
	Summary         Text              `json:"summary"`
	About           Text              `json:"about"`
	Contact         map[string]string `json:"contact"`
	Website         string            `json:"website"`
	FlagshipProject any               `json:"flagshipProject"`
	SkillCategories []SkillCategory   `json:"skillCategories"`
	Skills          []string          `json:"skills"`
	AITools         []string          `json:"aiTools"`
	Strengths       []Strength        `json:"strengths"`
}

Profile is the professional profile.

type RateLimit

type RateLimit struct {
	Limit, Remaining, ResetSeconds, RetryAfter int
	Policy                                     string
}

RateLimit carries the RateLimit headers present on every response. Zero values mean the header was absent.

type Services added in v0.2.0

type Services struct {
	Name         string                      `json:"name"`
	Promise      Text                        `json:"promise"`
	Approach     Text                        `json:"approach"`
	Positioning  Text                        `json:"positioning"`
	Audiences    []string                    `json:"audiences"`
	NotOffered   []string                    `json:"not_offered"`
	Stages       []Stage                     `json:"stages"`
	UseCases     []UseCase                   `json:"useCases"`
	Capabilities map[string]CapabilityPillar `json:"capabilities"`
	Pricing      string                      `json:"pricing"`
	Engagement   map[string]string           `json:"engagement"`
	Tools        map[string][]string         `json:"tools"`
	REST         map[string]string           `json:"rest"`
	Disclaimer   string                      `json:"disclaimer"`
}

Services describes Tal Ogen's AI transformation offer for businesses.

type SkillCategory

type SkillCategory struct {
	Category string   `json:"category"`
	Items    []string `json:"items"`
}

SkillCategory groups capabilities.

type Stage added in v0.2.0

type Stage struct {
	Step       int      `json:"step"`
	Name       string   `json:"name"`
	Summary    Text     `json:"summary"`
	Identifies []string `json:"identifies"`
}

Stage is one of the three engagement stages.

type Strength added in v0.1.1

type Strength struct {
	Title  string `json:"title"`
	Detail Text   `json:"detail"`
}

Strength is one headline strength with its detail.

type Text added in v0.1.1

type Text string

Text is a string that also accepts a JSON array of strings (joined with blank lines): several profile and project fields are paragraphs.

func (Text) String added in v0.1.1

func (t Text) String() string

String returns the text.

func (*Text) UnmarshalJSON added in v0.1.1

func (t *Text) UnmarshalJSON(b []byte) error

UnmarshalJSON accepts a JSON string, an array of strings, or null.

type UseCase added in v0.2.0

type UseCase struct {
	ID      string `json:"id"`
	Title   string `json:"title"`
	Outcome Text   `json:"outcome"`
}

UseCase is a representative business problem Tal solves, described by outcome.

Directories

Path Synopsis
cmd
talogen command
Command talogen reads Tal Ogen's agent-accessible portfolio from the terminal.
Command talogen reads Tal Ogen's agent-accessible portfolio from the terminal.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL